我正在用 C++ 在 Windows 8.1 上使用 Qt5.4 编写一个 3D 应用程序的接口。该应用程序正在使用 glLoadGen 加载 OpenGL 函数。
没问题,GlWidget 和 glLoadGen 都希望在包含 gl.h 之前被包含在内,而且在某些时候都包含 gl.h。所以看起来,编译一个同时使用两者的文件是不可能的。
使用一些包装器,我可能能够规避这个问题,但我宁愿不这样做。这个问题有什么干净的解决方案吗?
干净的解决方案是将您的担忧分开。拥有一个与 Qt 交互的源文件,它使用 Qt 的东西。然后有另一个与OpenGL交互的源文件,使用glLoadGen的东西。
如果你有一个在概念上需要两者的函数,当它需要与 GL 对话时,让它在 OpenGL 交互代码中调用函数。因此,如果您想在调整窗口大小时更改视口,您可以让 Qt 代码检测调整大小,然后调用一个函数,该函数会转到 OpenGL 交互代码以实际调用glViewport
.
这样,如果您需要从 Qt 切换,您只需要替换与 Qt 交互的代码。
话虽如此,glLoadGen 实际上并不是一个 OpenGL 加载库。它是OpenGL 加载库的生成器。这是一个可扩展的平台。因此,如果将渲染代码粘贴到 UI 代码中对您来说真的很重要(一般来说,这是一种糟糕的形式),您可以编写一个实际上与 Qt 兼容的生成器样式。
当然,编写 glLoadGen 样式并非易事。您必须了解一些 Lua 脚本,并且必须阅读生成系统的实际工作原理。