我决定将Qt集成到我的OpenGL项目中。到目前为止,我已经使用原始的OpenGL调用来生成纹理、制作框架缓冲区、绘制东西等等。问题是,OpenGL调用隐藏在诸如纹理对象之类的对象中。例如,您将在其构造函数中为纹理对象提供一个字符串路径,然后该对象将自动从文件中加载纹理数据,并使用它创建OpenGL纹理(显然使用OpenGL函数这样做)。由于QOpenGLFunctions本身是一个对象,所以我要么必须限制这些调用的位置,要么将对其的引用传递给我项目中进行OpenGL函数调用的每个对象。
这真的不可取。我能绕开这件事吗?我是否应该重新考虑我的OpenGL对象的设计?
发布于 2014-05-22 03:07:19
你有几个选择。我个人认为,将呈现代码本地化在软件的有限部分通常是可取的。显式地将QOpenGLFunctions对象传递给需要它的类,使您能够明确哪些类进行呈现,并对其保持一定的控制。除非它在您的特定架构中变得过于繁琐,否则这可能是我的首选。
另一种选择是将对QOpenGLFunctions对象的引用保存在单个实例中,这样每个需要它的人都可以获得实例。虽然单身人士的使用是可以争论的(我真的不想就单身人士的善良或邪恶展开宗教辩论),但这是一个非常实际的解决方案。或者,如果您不关心隐藏您真正正在做的事情,您可以将引用保存在一个全局变量中。
从Qt文档(http://qt-project.org/doc/qt-5/qopenglfunctions.html)中可以看出,创建多个实例也是完全合法的。看起来这些实例不包含任何状态。因此,您可以在构造任何需要OpenGL呈现的对象时创建一个实例,并将其保存在一个成员变量中。有一个代码片段展示了如何在文档页面上创建一个新实例:
QOpenGLFunctions glFuncs(QOpenGLContext::currentContext());您只需注意在当前上下文中创建实例就行了。
https://stackoverflow.com/questions/23796775
复制相似问题