内容简介:翻译自:https://stackoverflow.com/questions/24122800/correct-usages-of-qopenglfunctions
我目前正在使用Qt5 gui模块来访问OpenGL函数.
然后我发现QOpenGLFunctions很有用,因为:
>它包含OpenGL for Desktop和OpenGL ES,确保我以“便携”的方式使用OpenGL API.
>我不必担心包含OpenGL标题,Qt为我做了.
然而,我怀疑使用它的正确方法.
以下行仅列出了我使用此类的三种方式.
我的问题是:有没有一种使用QOpenGLFunctions的好方法?
继承自QOpenGLFunctions
Qt官方文档说’从QOpenGLFunctions继承你的类,并像以前一样使用glXXXX类.但我不喜欢这样:
>如果我的类之前需要继承其他类,我必须进行多重继承.我不喜欢的东西.即使这样的情况无论如何都是安全的,这是aestethics ……
>每个glXXXX包装类都是非const的.我会强制所有使用OpenGL的方法都是非const的.这并没有太大的意义.是的,当我执行glClear(…)时,OpenGLFunctions类可以合法地为非const,但为什么我的方法DrawableShape :: render(…)会是?
关于从QOpenGLFunctions继承.它的构造函数可以接受一个参数:当前的OpenGL上下文.这个参数对我来说似乎非常重要,但没有Qt文档调用这个构造函数.相反,他们让编译器选择无参数构造函数.
将QOpenGLFunctions作为成员
另一个想法应该是将QOpenGLFunctions的实例作为调用glXXXXX函数的任何类的成员,或者至少引用一个实例,并从该实例调用每个OpenGL函数.
将QOpenGLFunctions作为参数传递
对于使用OpenGL的每个函数,调用者发送QOpenGLFunctions.这条路 :
void renderRectangle(QOpenGLFunctions& opengl) const;
但我怎么能确定这个功能需要它而且这个不会呢?我的意思是源代码会变得越来越大,我担心看到接收此参数的类的每个方法的风险……
遵循其他面向对象的包装库的相同原则,您可能会考虑第三个选项的一小部分变化.
定义一个表示当前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/correct-usages-of-qopenglfunctions
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 使用GrumPHP来纠正代码“毛病”
- 基于机器翻译输出的语法错误纠正
- 一种基于群体特征的比例偏差纠正方案
- SARscape中高分三号数据轨道纠正
- 谷歌发起包容性竞赛 纠正算法的偏见
- Java学习路线图——及时纠正自己的学习方向
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。