【发布时间】:2013-04-12 23:14:36
【问题描述】:
我目前正在编写一个 3D 渲染器(用于娱乐和研究),因此我需要一种将帧缓冲区绘制到窗口的方法。由于我在 CPU 上进行所有计算,因此绘图需要尽可能快。
我的目标之一是不使用现有的图形库 (OpenGL/DirectX),因此屏幕上的绘图是纯 Win32。在我的研究中,我找到了几种创建和绘制位图的方法,现在我正在寻找最好的方法。
我当前的实现使用使用CreateDIBSection() 创建的位图,使用BitBlt() 将其绘制到我的窗口DC。
CreateDIBSection() 给我一个指向我的位图字节的指针,这样我就可以在不复制的情况下操作它。使用这种方法,我实现了大约 260 FPS 的更新速率(没有完成任何渲染)。
这似乎有点慢,所以我正在寻找优化。
我读过一些关于如果您不使用与系统调色板相同的调色板创建位图的内容,则会完成一些缓慢的颜色转换。
如何确保我的 DIB 位图和窗口兼容?
有没有比我目前的实现更快的绘制位图的方法?
我还阅读了一些关于DrawDibDraw() 的内容,有人可以确认这更快吗?
【问题讨论】:
-
Windows 不会“实时”执行任何操作。 blitting 的速度取决于您的图形硬件,但 260 FPS 对我来说似乎并不慢...
-
您是在询问“DrawDibDraw 是否更快”而没有尝试任何操作。当然,这并不比什么都不做更快。像素格式至关重要。试试看。
标签: c++ winapi graphics bitmap gdi