支持 Opengl 3.0+ 和 DirectX 10+ 的主要功能和窗口

Posted

技术标签:

【中文标题】支持 Opengl 3.0+ 和 DirectX 10+ 的主要功能和窗口【英文标题】:Main function and window that supports Opengl 3.0+ and DirectX 10+ 【发布时间】:2014-12-15 20:46:45 【问题描述】:

我目前正在开发游戏引擎,希望同时支持 DirectX 和 OpenGL,但据我所知,directX 必须使用 WINAPI 来打开它的窗口,但这是一个仅限 Windows 的入口点。

是否有同时支持 OpenGL 和 DirectX 的入口点,是否有同时支持 OpenGL 和 DirectX 的窗口库。

如果没有简单的方法可以解决这个问题,您能否提出一个好的替代方案。

【问题讨论】:

有什么理由要同时支持这两者吗? OpenGL 是跨平台的,可以让您的游戏引擎在 Windows 以及 linux、iosandroid 等平台上运行。最简单的解决方案似乎只是不使用 DirectX? 【参考方案1】:

窗口系统通常独立于图形 API。在 Windows 上,HWND 的 HDC 表面是渲染操作的目标,无论您使用的是 DirectX 还是 OpenGL(或 GDI+ 等),这都是正确的。要创建 DirectX 设备,您需要一个 HWND,因此只要其消息循环与图形 API 兼容,任何可以获取已创建窗口的本机句柄的跨平台窗口系统就足够了。在 Windows 上使用 WGL 初始化 OpenGL,您需要一个 HDC(通常从 HWND 获得),因此它与 DirectX 并没有什么不同。

WxWidgets (https://www.wxwidgets.org/) 是一个跨平台的窗口系统,通过 GLCanvas 内置了对 OpenGL 的支持,并且可以通过获取其本机句柄 (http://comp.soft-sys.wxwindows.narkive.com/D9t98DQM/direct3d-wxwidgets-do-they-play-nice-together) 来相当容易地适应在 wxPanel 上使用 DirectX。

【讨论】:

以上是关于支持 Opengl 3.0+ 和 DirectX 10+ 的主要功能和窗口的主要内容,如果未能解决你的问题,请参考以下文章

Google地球的“OpenGL”模式与“DirectX模式”有什么区别?

比较DirectX和OpenGL的区别

OpenGL与Directx的区别

openGL之API学习(一七七)opengl gles glsl glsl es版本对应关系

DirectX和OpenGL到底哪个好

OpenCV-3.0 的 OpenGL 支持