From dd37b3f1ee1f625bb7cb59bf96c7d8d93feb4cab Mon Sep 17 00:00:00 2001 From: Martin Piatka Date: Tue, 31 May 2022 14:15:31 +0200 Subject: [PATCH] GUI/preview: Split frame loading into a function --- gui/QT/widget/previewWidget.cpp | 30 +++++++++++++++++++----------- gui/QT/widget/previewWidget.hpp | 2 ++ 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/gui/QT/widget/previewWidget.cpp b/gui/QT/widget/previewWidget.cpp index 4dff46170..a91bc78f6 100644 --- a/gui/QT/widget/previewWidget.cpp +++ b/gui/QT/widget/previewWidget.cpp @@ -178,6 +178,24 @@ void PreviewWidget::setVidSize(int w, int h){ calculateScale(); } +bool PreviewWidget::loadFrame(){ + auto f = getOpenGLFuncs(); + + f->glBindTexture(GL_TEXTURE_2D, texture); + struct Shared_mem_frame *sframe = shared_mem.get_frame_and_lock(); + if(sframe){ + f->glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, sframe->width, sframe->height, 0, GL_RGB, GL_UNSIGNED_BYTE, sframe->pixels); + setVidSize(sframe->width, sframe->height); + shared_mem.unlock(); + //Detach to prevent deadlocks + shared_mem.detach(); + } else { + f->glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 4, 4, 0, GL_RGB, GL_UNSIGNED_BYTE, pixels); + } + + return true; +} + void PreviewWidget::paintGL(){ auto f = getOpenGLFuncs(); @@ -214,17 +232,7 @@ void PreviewWidget::paintGL(){ loc = f->glGetUniformLocation(program, "scale_vec"); f->glUniform2fv(loc, 1, scaleVec); - f->glBindTexture(GL_TEXTURE_2D, texture); - struct Shared_mem_frame *sframe = shared_mem.get_frame_and_lock(); - if(sframe){ - f->glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, sframe->width, sframe->height, 0, GL_RGB, GL_UNSIGNED_BYTE, sframe->pixels); - setVidSize(sframe->width, sframe->height); - shared_mem.unlock(); - //Detach to prevent deadlocks - shared_mem.detach(); - } else { - f->glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 4, 4, 0, GL_RGB, GL_UNSIGNED_BYTE, pixels); - } + loadFrame(); f->glDrawArrays(GL_TRIANGLES, 0, 6); diff --git a/gui/QT/widget/previewWidget.hpp b/gui/QT/widget/previewWidget.hpp index 0ba405a50..0d46ef645 100644 --- a/gui/QT/widget/previewWidget.hpp +++ b/gui/QT/widget/previewWidget.hpp @@ -24,6 +24,8 @@ protected: void paintGL(); private: + bool loadFrame(); + GLuint vertexBuffer = 0; GLuint program = 0; GLuint texture = 0;