OpenGL Context(上下文)的概念:
如果你使用过Qt的QPainter类进行过绘图的话,可能理解起来会简单一点,QPainter需要一个PaintDevice(绘图设备)参数,
而我们的QWidget,QImage,QPixmap就继承自它,因此可以这样使用:
Qimage img(400,400);
QPainter painter(&img);
也可以在QWidget的绘图函数中这样:
void paintEvent(QPaintEvent*){
QPainter painter(this);
}
上面的代码主要是创建了一个QPainter对象,并且设置了该对象操作的渲染设备,之后我们可以调用QPainter的各种成员方法在该设备进行绘图。
而OpenGL中进行绘图也需要一个这样的东西——Render Context (渲染上下文),简单来说,它也是一个绘图设备。回顾一下我们是如何在Qt中创建OpenGL窗口,首先创建一个QWidget,然后修改继承自QOpenGLWidget和QOpenGLFunctions,继承QOpenGLWidget是为了创建窗口,而继承QOpenGLFunctions只是为了让我们能够少写一点代码(你应该知道Qt把所有OpenGL函数封装为QOpenGLFunctions的成员函数),我们完全可以在QOpenGLWidget中创建一个 QOpenGLFunctions变量,只不过可能要这样来使用它:
class Test:public QOpenGLWidget{
private:
QOpenGLFunctions func;
public:
void initializeGL(){
func.initializeOpenGLFunctions();
}
void paintGL(){
//...
func.glDrawArray(...);
}
}

本文深入探讨OpenGL的绘图机制,解析渲染上下文(RenderContext)的作用,对比QPainter绘图流程,阐述QOpenGLWidget与QOpenGLFunctions的关系,以及如何在多窗口环境下正确管理OpenGL资源。
最低0.47元/天 解锁文章
989

被折叠的 条评论
为什么被折叠?



