我目前正在使用Qt5 gui模块访问OpenGL函数.然后我发现QOpenGLFunctions是有用的,因为:
然而,我怀疑是否有正确的方法来使用它。下面的行只列出了我所知道的使用这个类的三种方法。我的问题是:是否有一种使用QOpenGLFunctions的好方法?
从QOpenGLFunctions继承的
Qt官方文档说:“从QOpenGLFunctions继承类,并像以前一样使用glXXXX类。
OpenGLFunctions时,glClear(...)类可以合法地是非连续的,但是为什么我的方法DrawableShape::render(...)会是?以及关于从QOpenGLFunctions继承。它的构造函数可以接受一个参数:当前的OpenGL上下文。这个参数对我来说很重要,但是没有Qt文档调用这个构造函数。相反,它们让编译器选择无参数构造函数。
以QOpenGLFunctions 为成员的
另一个想法应该是让QOpenGLFunctions的一个实例作为调用glXXXXX函数的任何类的成员,或者至少有一个对一个实例的引用,并从这个实例调用每个OpenGL函数。
将QOpenGLFunctions 作为参数传递给
对于使用OpenGL的每个函数,调用方发送QOpenGLFunctions。这条路:
void renderRectangle(QOpenGLFunctions& opengl) const;但是,我怎么能确定这个函数会需要它,而这个功能不会呢?我的意思是源代码会随着时间的推移而变大,我担心看到每个类的方法都收到这个参数的风险.
发布于 2014-10-02 07:56:04
遵循其他面向对象包装器库的相同原则,您可能会考虑第三个选项的一个小变体。
定义一个表示当前opengl上下文的类,该类也扩展了QOpenGLFunctions
class GL : public QOpenGLFunctions{
QGLContext& context;
GL(QGLContext& c) : glContext(c){ ... }
};呈现线程将初始化提供当前上下文的GL实例,并将其传递给所有需要执行opengl操作的呈现实例。通过这种方式,您还可以确定在初始化和使用opengl结构和缓冲区时不会混合多个上下文。
class Visualizer{
void glInit(GL& gl){ ... }
void glPaintOpaque(GL& gl){ ... }
void glPaintTranslucent(GL& gl){ ... }
};https://stackoverflow.com/questions/24122800
复制相似问题