支持 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、ios、android 等平台上运行。最简单的解决方案似乎只是不使用 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模式”有什么区别?