【发布时间】:2010-09-29 15:48:13
【问题描述】:
我正在尝试找出一种在 Windows 中混合 OpenGL 渲染和 GDI 的方法。以前我一直将我的 OpenGL 内容渲染到一个帧缓冲区对象中,将其提取出来,然后将其放入 windows GDI 图形上下文中,然后在顶部绘制我的 GDI 内容。这真的会削弱帧率。
我想做与我现在正在做的相反的事情,所以我的 OpenGL 渲染直接在窗口中完成,然后我将 GDI 内容渲染到一个位图,该位图被上传到纹理,然后使用四边形叠加。 GDI 的东西并没有太大的变化,所以我不需要每帧都重新绘制它,我可以缓存纹理。
我几乎可以让它工作,问题是我似乎无法从 GDI 位图中获得正确的 alpha 值,因此文本和线条会出现可怕的锯齿。
有没有人有任何有用的资源来说明如何做到这一点?是否有可能让 GDI 或 GDI+ 以我需要的方式写入 alpha 通道?
【问题讨论】:
-
我忘了,GDI(+) 支持 32 位颜色吗?
-
我相信是的。我正在向 GDI 提供 BGRA 位图以进行渲染。问题是 alpha 只写为 0 或 255。
-
你有关于如何渲染 GDI 纹理的示例代码吗?
-
您可以为位图设置 32 位像素格式,但您应该注意渲染的内容和方式,因为 GDI 不使用 alpha 通道作为 alpha 通道!相反,有一些关于某些功能的设备模式(通常是 0、1、2 或 3)的信息,因此您的 alpha 通道很可能被其他东西覆盖。如果你没有使用 DIB (HandleType) 那么错误设置 alpha 会给你带来很多麻烦(一些操作在颜色内部设置错误的设备模式下无法正常工作)