ight
glColor3f(0.0f,0.0f,1.0f); // Set The Color To Blue
glVertex3f(-1.0f,-1.0f, 0.0f); // Bottom Left
glEnd(); // we're done with the polygon (smooth color interpolation)
glw->swapBuffers();
msleep(50);
qDebug(rendering);
}
}
GLWidget也要进行相应的修改:
glwidget.h
#ifndef GLWIDGET_H
#define GLWIDGET_H
#include
#include glthread.h
#include
class GLWidget : public QGLWidget { public: GLWidget(QWidget *parent); void startRendering(); void stopRendering(); protected: void resizeEvent(QResizeEvent *evt); void paintEvent(QPaintEvent *); void closeEvent(QCloseEvent *evt); GLThread glt; }; #endif // GLWIDGET_H
glwidget.cpp
#include glwidget.h
GLWidget::GLWidget(QWidget *parent)
: glt(this)
{
setAutoBufferSwap(false);
resize(320, 240);
}
void GLWidget::startRendering()
{
glt.start();
}
void GLWidget::stopRendering()
{
glt.stop();
glt.wait();
}
void GLWidget::resizeEvent(QResizeEvent *evt)
{
glt.resizeViewport(evt->size());
}
void GLWidget::paintEvent(QPaintEvent *)
{
// Handled by the GLThread.
}
void GLWidget::closeEvent(QCloseEvent *evt)
{
stopRendering();
QGLWidget::closeEvent(evt);
}
注意这里用到了C++的一个小技巧,前向声明。当两个类要互相引用的时候不能够互相包含头文件,在一个类的头文件中,必须用Class + 类名作为前向声明。而在这个类的cpp中要访问另一个类的具体方法的话,必须包含那个类的头文件。
这里还涉及到数据的访问。最开始的例子用的是信号槽的方式进行访问,而这里直接使用的指针进行访问。
渲染结果:一个不断旋转的正方形,(假装看见了...)

线程安全
待研究
一些琐碎
待研究