据我所读到的这里,似乎大多数Windows函数都是加速的。因此,例如,对BitBlt或AlphaBlend的调用如果可用,将使用硬件加速。它还提到,窗口的内容只保存在视频内存中。对于窗口DC来说,这一切都是正确的,但是如何使用驻留在显卡内存中的内存DC呢?一旦我们完成了如何获得对像素的直接访问,我认为这将涉及: 1.将数据临时复制到系统内存;2.更改像素数据;3.复制回视频内存。
我尝试过两种方法,这两种方法都分配了系统内存,正如我在任务管理器中所看到的.
GetBitmapBits)?m_pBits),因此很明显它们驻留在系统内存中.还是两种方法都保存在系统内存中的副本?但是,如果我更改系统内存中的位,对BitBlt的调用仍然需要从系统内存中再次检查/复制.不是很优化的IMHO。
编辑:我还尝试使用BeginBufferedPaint和GetBufferedPaintBits创建内存DC。它还分配系统内存,因此在这方面,我认为它只是上述方法的包装器,但是缓存DC的,因此下一个调用不一定要重新创建内存DC。见雷蒙德·陈的文章。
编辑2:我想实际的问题是:在方法1或方法2中,我是否做了正确的内存DC创建来获得硬件加速的GDI操作?对我来说,这一切看起来都很快,而且两种方法都提供了相同的速度,所以没有真正的方法来检查它.
https://stackoverflow.com/questions/7502588
复制相似问题