播放器实战14 显示YUV

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.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值