一起使用SDL,OpenGL和Qt

时间:2014-12-07 16:27:32

标签: c++ qt opengl sdl

有一段时间我一直在使用SDL编写我的3D引擎,并且最近一直在实现一个编辑器,可以为我所构建的引擎类型导出优化格式。现在编辑器非常简单,只需移动对象,就可以更改其纹理和模型。截至目前,我正在使用SDL和OpenGL来渲染所有内容,但我想将Qt用于编辑器的GUI部分,这样它在每个平台上看起来都是原生的。我到目前为止工作得很好,我在SDL应用程序中运行QApplication,所以它基本上只打开2个窗口,一个使用SDL和OpenGL,另一个使用Qt。做了一些研究,我发现你可以手动更新QApplication,它完全消除了任何线程问题,一切正常。如果你很难想象这个,那就是一张照片:

enter image description here

我的目标是将这些窗口合并为一个,因为在较小的屏幕(如我的笔记本电脑)上,它很难跟踪我最终会拥有的所有不同的窗口。我知道有一种方法可以使用OpenGL渲染到Qt,但这可以与SDL集成吗?如果编辑器启用,我是否需要放弃使用SDL窗口并使用QT窗口?只是为了澄清一下,当引擎没有处于编辑器模式时,它将不会使用和Qt,只是SDL,所以最好我不需要这样做。

2 个答案:

答案 0 :(得分:0)

删除SDL部分。你有Qt,它可以完成SDL所做的一切。只需将QGLWidget子类化并使用它。

答案 1 :(得分:0)

您可以将游戏和编辑器分开处理,并使其成为同一个应用程序的一部分。

只需在Qt中生成您希望游戏运行的窗口,至少在Windows中,您可以将窗口句柄传递给游戏,并确保在游戏设置时,而不是创建在SDL中窗口自己并将opengl上下文绑定到它,您实际上可以绑定到现有句柄。

有一些关于这种技术的问题要注意输入焦点,我相信(我使用directX测试过,但它可能与SDL类似)。问题是前台模式对“根”窗口进行了一些愚蠢的检查,对我来说这不是拥有opengl上下文的窗口,因此无法初始化。但背景模式有效。我认为这是一个操纵杆,我想到了它,但无论如何,这就是你如何将所有东西合并在一起。