我想知道是否可以使用GDI绘制opengl / direct3D表面?如果是的话,怎么办呢?
我问的原因是因为我正在编写一个简单的应用来在游戏中绘制一些东西。这些东西都是2D或文本,如帧速率信息,自定义十字准线,时钟等。
我知道最好的方法是挂钩并使用渲染器/游戏本机使用的任何东西,无论是opengl还是direct3d,但我正在将GDI视为AFAIK,两个opengl和D3D都坐在设备上下文中我是希望能与GDI接轨。
答案 0 :(得分:3)
你通常不能直接这样做。理论上,当且仅当OpenGL / DirectX设置为使用单缓冲,不双缓冲时,您才可以将GDI与OpenGL或DirectX混合使用。然而,这仅仅是理论上的可能性,因为几乎所有使用DirectX和OpenGL的都是双缓冲。
我会尝试其他方法,例如在无边界layered window中绘制数据。
答案 1 :(得分:1)
您可以使用CreateCompatibleDC,CreateCompatibleBitmap,SelectObject和GetDIBits在中央内存缓冲区中使用GDI进行绘制。 注意:兼容DC很慢(没有2D加速)。 然后,您必须从中央内存复制(慢速操作)到纹理。
对于文本,您可以将所有ASCII字符复制一次到纹理中,然后使用D3D纹理函数复制每个字符。对于等宽的US-ASCII字体应该很容易。