一.效果
左边是QWidget渲染,右边是QOpenGLWidget渲染。
二.实现
熟悉着色器的话,渲染RGB要比渲染YUV方便得多
QHOpenGLVideoWidget.h
#ifndef QHOPENGLVIDEOWIDGET_H
#define QHOPENGLVIDEOWIDGET_H
#include <QOpenGLWidget>
#include <QOpenGLShaderProgram>
#include <QOpenGLVertexArrayObject>
#include <QOpenGLBuffer>
#include <QOpenGLFunctions>
#include <QOpenGLTexture>
class QHOpenGLVideoWidget : public QOpenGLWidget, public QOpenGLFunctions
{
Q_OBJECT
public:
explicit QHOpenGLVideoWidget(QWidget *parent = nullptr);
~QHOpenGLVideoWidget();
protected:
void initializeGL();
void resizeGL(int h, int w);
void paintGL();
private:
GLuint m_texture;
QOpenGLBuffer m_vbo; // 缓冲区对象.
QOpenGLShaderProgram m_shaderProgram; //着色器程序容器.
uint8_t *m_buffer;
int m_w