#ifndef PLAYEROPENGLWIDGET_H
#define PLAYEROPENGLWIDGET_H


#include <QOpenGLWidget>
#include <QOpenGLFunctions_3_3_Core>
#include <GL/gl.h>

#include "ShaderRect.h"
#include "ShaderYUV420.h"

/**
 * @brief 
 * 
 */


class PlayerGLWidget : public QOpenGLWidget, protected QOpenGLFunctions_3_3_Core
{
    Q_OBJECT

public:
    explicit PlayerGLWidget(QWidget *parent = nullptr);
    ~PlayerGLWidget();

    /* 显示RGBA图片 */
    void showOneRGBAImage(const QImage& image);
    /* 显示一张YUV420的图片 */
    void showOneYUV420Image(const Image_YUV420P& yuvData);
    
    void testShowYUV420Image(const QImage& image);

private:
    /* 初始化RGBA的Shader */
    void initShaderRGBA();
    /* 初始化YUV420的Shader */
    void initShaderYUV420();
 
protected:
    void initializeGL() override;
    void resizeGL(int w, int h) override;
    void paintGL() override;

private:

    // GLuint m_VAO1 = 0; // 顶点数组对象的ID
    bool m_isInit = false; // 是否初始化过OpenGL
    ShaderBase* m_shaderCurr = nullptr;     /* 当前使用的着色器对象 */
    ShaderRect* m_shaderRGBA = nullptr;     /* 显示RGBA图片的着色器对象 */
    ShaderYUV420* m_shaderYUV420 = nullptr; /* 显示YUV420图片的着色器对象 */

};

#endif /* PLAYEROPENGLWIDGET_H */
