1.xvideo.h
#pragma once
#include <QOpenGLWidget>
#include<qopenglfunctions.h>
#include<qglshaderprogram.h>
class xvideo : public QOpenGLWidget,protected QOpenGLFunctions
{
Q_OBJECT
public:
xvideo(QWidget *parent);
~xvideo();
protected:
void initialGL();//初始化GL
void paintGL(); //绘制GL
void resizeGL(int width,int height);//改尺寸
private:
//通过该成员运行shader程序
QGLShaderProgram program;
//shader中yuv变量地址 unis_y,unis_u,unis_v
GLuint unis[3] = {
0 };
//opengl的 texture地址
GLuint texs[3] = {
0 };
//材质内存空间
unsigned char* datas[3] = {
0 };
int width = 240;
int height = 128;
};
2.void xvideo::initialGL()
void xvideo::initialGL() //初始化GL
{
qDebug() << "initialGL" << endl;
initializeOpenGLFunctions();
qDebug() << program.addShaderFromSourceCode(QGLShader::Fragment, Tstring);
//顶点shader
qDebug() << program.addShaderFromSourceCode(QGLShader::Vertex, Vstring);
用QT封装的program加载shader脚本(顶点shader和片元shader)
Tsting和Vstring为指针,指向的空间中放有我们定义的着色器的功能(顶点着色器用于转发,片元着色器用于将YUV转换成RGB)
const char* Vstring = GET_STR(
attribute vec4 vertexIn;//顶点输入
attribute vec2 textureIn;//材质输入
varying vec2 textureOut;//顶点与片元shader共享变量
void main(void)
{
//传进来的坐标值只能在顶点中获取
gl_Position = vertexIn;
textureOut = textureIn;
}
);
为了设置顶点着色器的输出,我们必须把位置数据赋值给预定义的gl_Position变量,它在幕后是vec4类型的。
program.

最低0.47元/天 解锁文章
3592

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



