3

我正在尝试找出一种在 Windows 中混合 OpenGL 渲染和 GDI 的方法。以前我一直将我的 OpenGL 内容渲染到一个帧缓冲区对象中,将其提取出来,然后将其放入 windows GDI 图形上下文中,然后在顶部绘制我的 GDI 内容。这真的会削弱帧率。

我想做与我现在正在做的相反的事情,所以我的 OpenGL 渲染直接在窗口上完成,然后我将 GDI 的东西渲染到一个位图,该位图被上传到纹理,然后使用四边形覆盖。GDI 的东西并没有太大的变化,所以我不需要每帧都重新绘制它,我可以缓存纹理。

我几乎可以让它工作,问题是我似乎无法从 GDI 位图中获得正确的 alpha 值,因此文本和线条会出现可怕的锯齿。

有没有人有任何有用的资源来做到这一点?甚至可以让 GDI 或 GDI+ 以我需要的方式写入 alpha 通道吗?

4

3 回答 3

2

我认为如果您只使用原始 OpenGL 而不是 GDI 进行渲染会更容易。只需创建一些包装函数并调用它们而不是 GDI。

于 2009-01-11T00:25:04.000 回答
2

这一切真的有必要吗?您应该能够只使用 GDI 函数来绘制与 OpenGL 相同的设备上下文。

于 2009-01-11T00:45:46.063 回答
0

如何使用模板。在模板缓冲区中复制您的纹理。使用 GL_NOTEQUAL 作为测试函数,其参考值等于纹理的背景值。首先渲染 OpenGL 的东西,然后启用模板,然后渲染你的纹理矩形。

您没有指定这是 2D 还是 3D 问题。锯齿可能是 3D 世界中的一个深度问题,在这个世界中,几乎所有东西都在同一个平面上。如果您在 3D 中工作,请确保纹理矩形位于其他所有内容的前面或修改 z 缓冲区。

于 2009-01-13T23:35:03.897 回答