QOpenGLShaderProgram 绘制YUV和空心矩形,给出代码
时间: 2023-05-21 07:02:37 浏览: 259
QT使用OpenGL显示YUV420和YUV444数据实例,内附用例,可直接运行
3星 · 编辑精心推荐
以下是使用 QOpenGLShaderProgram 绘制 YUV 和空心矩形的代码示例:
```cpp
// 初始化着色器程序
QOpenGLShaderProgram shaderProgram;
shaderProgram.addShaderFromSourceCode(QOpenGLShader::Vertex, vertexShaderSource);
shaderProgram.addShaderFromSourceCode(QOpenGLShader::Fragment, fragmentShaderSource);
shaderProgram.link();
// 绘制 YUV
shaderProgram.bind();
shaderProgram.setUniformValue("textureY", 0);
shaderProgram.setUniformValue("textureU", 1);
shaderProgram.setUniformValue("textureV", 2);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, textureY);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, textureU);
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, textureV);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
// 绘制空心矩形
shaderProgram.bind();
shaderProgram.setUniformValue("color", QVector4D(1.0f, 1.0f, 1.0f, 1.0f));
glLineWidth(2.0f);
glDrawArrays(GL_LINE_LOOP, 0, 4);
```
其中,vertexShaderSource 和 fragmentShaderSource 分别是顶点着色器和片段着色器的源代码。textureY、textureU 和 textureV 分别是 YUV 纹理的 ID,textureY 对应 GL_TEXTURE0,textureU 对应 GL_TEXTURE1,textureV 对应 GL_TEXTURE2。color 是空心矩形的颜色。在绘制 YUV 和空心矩形之前,需要先绑定着色器程序。在绘制 YUV 时,需要先绑定 YUV 纹理。在绘制空心矩形时,需要设置颜色和线宽,并使用 GL_LINE_LOOP 绘制。
阅读全文