OPENGL初始化:
- 初始化OpenGL函数 : initializeOpenGLFunctions
- 初始化各种flag : glEnable
- 创建各种缓存对象 : VAO,VBO
- 创建并链接shader :
- QOpenGLShaderProgram::addShaderFromSourceCode
- QOpenGLShaderProgram::Link
- 启用shader : QOpenGLShaderProgram::bind
- 启用缓存 : m_vao.bind();
- 绑定缓存(加载不变的数据): m_vao.bind();
- 绑定shader的缓存数据(告诉OpenGL如何从缓存中读取数据到shader中)
- setAttributeBuffer(0, GL_FLOAT, 0, 3, 0);
- enableAttributeArray(0);
- 释放缓存
- 释放shader
OPENGL绘制:
1.清屏
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
2.启用shader
QOpenGLShaderProgram::bind();
3.绑定shader的全局数据(例如摄像机变换矩阵,投影矩阵等)
4.启用缓存()
// 绑定本模型需要的顶点缓冲
bind();
5.绑定缓存(VBO)(加载变化的数据)
// 绑定本模型需要的顶点缓冲
bind();
setUsagePattern(QOpenGLBuffer::StaticDraw);
allocate(m_vertices, m_vertecesCount * 3 * sizeof(float));
6.绑定shader的缓存数据(告诉OpenGL如何从缓存中读取数据到shader中)
// 针对本模型, 设置如何渲染
setAttributeBuffer(0, GL_FLOAT, 0, 3, 0);
enableAttributeArray(0);
7.绘制(使用shader读取缓存中的内容,转换为顶点,然后按照命令基于顶点绘制3D数据)
// 绘制模型
glDrawArrays(GL_POINTS, 0, m_vertecesCount);
8.释放缓存
release();
9.释放shader
QOpenGLShaderProgram::release
1.在qwdiget应用中继承QOpenGLWidget和QOpenGLExtraFunctions
2.在qtquick应用中继承QObject和QOpenGLExtraFunctions
3.重载void initializeGL(),void paintGL()还有void resizeGL(int w, int h)
4. 在initializeGL中初始化绘制条件
5.在void paintGL()
函数中进行绘制