[英]How do you use QAbstractOpenGLFunctions in c++?
我是OpenGL的新手,所以这可能是一个愚蠢的问题。 似乎我缺少明显的东西。 我看不到新的OpenGL类应该如何有用。
OpenGL的每个版本和配置文件都有一些类 。 这些类具有用于每个版本支持的所有OpenGL调用的显式方法。 以下是部分列表:
我认为这将是如下所示:
那么如何使用此类编写代码? 在无法明确知道它将在什么硬件上运行的情况下,我无法预测在运行时将获得哪个对象。 基类不包含任何方法,因为它们对于每个派生类都是不同的。 我可以编写一个巨大的开关,但这似乎比使用QOpenGLFunctions退一步,或者只是手动获取函数地址。
这些类之所以有用的原因是,以前的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();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.