我是OpenGL的新手,所以这可能是一个愚蠢的问题。好像我错过了一些明显的东西。我看不出新的OpenGL classes应该如何有用。
There are classes for each version and profile of OpenGL。这些类为每个版本支持的所有OpenGL调用都有显式方法。以下是部分列表:
我认为它将类似于以下内容:
那么如何使用这个类编写代码呢?我无法预测在运行时将获得哪个对象,而不明确知道它将运行什么硬件。基类不包含任何方法,因为它们对于每个派生类都是不同的。我可以编写一个巨大的开关,但这似乎是使用QOpenGLFunctions或仅手动获取函数地址的一步。
答案 0 :(得分:3)
这些类有用的原因是前面的QOpenGLFunctions类只暴露了OpenGL / ES 2.0功能。现在,他们已经展示了许多OpenGL版本的全部功能,使您可以利用仅在这些版本中提供的功能。
当然,大多数开发人员不会在运行时为大多数应用程序选择GL版本。它们针对特定版本,因此Qt类可以很好地工作。
如果您正在搜索的是一种在各种QOpenGLFunctions_ *类之间调用“常用”方法的方法,而不知道您正在使用哪个版本的OpenGL(同时仍然给自己利用特定功能的机会) “更高版本”,为什么不使用模板?
例如:
template <class T>
class SomeOpenGLRendering {
public:
SomeOpenGLRendering(T *openglFunctions) : openglFunctions(openglFunctions) {
openglFunctions->initializeOpenGLFunctions();
}
void renderSomething() {
openglFunctions->glClear(GL_COLOR_BUFFER_BIT);
}
private:
T *openglFunctions;
};
然后根据您想要的任何标准(例如您所说的硬件检测),根据需要创建正确的版本:
SomeOpenGLRendering<QOpenGLFunctions_3_2_Core> r(new QOpenGLFunctions_3_2_Core());
r.renderSomething();