Browse Source

V0.7.15
1、完成了OpenGLWidegt动态库

Apple 1 week ago
parent
commit
3520626f53

+ 1 - 1
demo/OpenGLWidget/GLShader/ShaderBase.cpp

@@ -161,7 +161,7 @@ int ShaderBase::createTexture(const QString uniformName, int textureUnit)
     {
         /* 没有分配编号,手动分配 */
         texUnit = 0;
-        for(int i = 0; i < m_mapTexture.size(); i++)
+        for(int i = 0; i < maxTextureUnits; i++)
         {
             if(!m_mapTexture.contains(i))
             {

+ 14 - 0
demo/OpenGLWidget/GLWidget/PlayerGLWidget.cpp

@@ -23,12 +23,19 @@ PlayerGLWidget::~PlayerGLWidget()
 /* 显示RGBA图片 */
 void PlayerGLWidget::showOneRGBAImage(const QImage& image)
 {
+    if(!m_isInit)
+    {
+        SPDLOG_WARN("OpenGLWidget未初始化");
+        return;
+    }
     if(image.format() == QImage::Format_RGBA8888)
     {
         m_shaderRGBA->refreshFrameRGBA(image);
     } else 
     {
         QImage imageRGBA = image.convertToFormat(QImage::Format_RGBA8888);
+        // SPDLOG_DEBUG("image format {}", (int)image.format());
+        // SPDLOG_DEBUG("{}", imageRGBA.isNull());
         m_shaderRGBA->refreshFrameRGBA(imageRGBA);
     }
 
@@ -39,6 +46,12 @@ void PlayerGLWidget::showOneRGBAImage(const QImage& image)
 /* 显示一张YUV420的图片 */
 void PlayerGLWidget::showOneYUV420Image(const Image_YUV420& yuvData)
 {
+    if(!m_isInit)
+    {
+        SPDLOG_WARN("OpenGLWidget未初始化");
+        return;
+    }
+    
     if(!yuvData.isValid()) {
         SPDLOG_WARN("YUV420数据无效");
         return;
@@ -118,6 +131,7 @@ void PlayerGLWidget::initializeGL()
 
 
     SPDLOG_DEBUG("着色器编译完成");
+    m_isInit = true; // 标记OpenGL已经初始化完成
 }
 
 void PlayerGLWidget::resizeGL(int w, int h)

+ 1 - 1
demo/OpenGLWidget/GLWidget/PlayerGLWidget.h

@@ -44,7 +44,7 @@ protected:
 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图片的着色器对象 */

+ 2 - 1
demo/OpenGLWidgetTest/widget.cpp

@@ -25,9 +25,10 @@ Widget::Widget(QWidget *parent)
     palette.setColor(QPalette::Window, Qt::black); // 设置背景颜色为黑色
     this->setPalette(palette);
 
-    QImage image = QImage(":/image/1.jpg");
+    
     connect(&m_timer, &QTimer::timeout, this, [&]() {
         // SPDLOG_DEBUG("刷新一帧");
+        QImage image = QImage(":/image/1.jpg");
         if(image.isNull()) {
             SPDLOG_WARN("Image is null, cannot refresh.");
             return;