用GDI绘制OpenGL/D3D?

dxxyhpgq  于 2022-10-18  发布在  其他
关注(0)|答案(2)|浏览(251)

我想知道是否有可能用GDI在OpenGL/Direct3D表面上绘制?如果是这样的话,可能会怎么做呢?
我问的原因是因为我正在写一个简单的应用程序来在游戏中画一些东西。这些东西都是2D或文本,如帧速率信息、自定义十字准线、时钟等。
我知道最好的方法是挂钩并使用渲染器/游戏本机使用的任何东西,无论是OpenGL还是Direct3D,但我将GDI视为AFAIK OpenGL和D3D都位于设备上下文中,我希望可以用GDI来绘制。

xoefb8l8

xoefb8l81#

你通常不能直接这么做。
理论上,如果且仅当OpenGL/DirectX绘图使用单缓冲,而不是**双缓冲,则可以将GDI与OpenGL或DirectX混合使用。然而,这只是一种理论上的可能性,因为几乎所有DirectX和OpenGL的使用都是双缓冲的。
我会尝试其他方法,例如在无边框的layered window中绘制数据。

siv3szwd

siv3szwd2#

您可以使用CreateCompatibleDC、CreateCompatibleBitmap、SelectObject和GetDIBits在中央内存缓冲区中使用GDI绘图。注意:兼容的DC速度很慢(没有2D加速)。然后,必须从中央内存复制(慢速操作)到纹理。
对于文本,您可以将所有ASCII字符复制到纹理中一次,然后使用D3D纹理函数复制每个字符。这应该是足够容易的单一空间US-ASCII字体。

相关问题