GUI/preview: Split frame loading into a function

This commit is contained in:
Martin Piatka
2022-05-31 14:15:31 +02:00
parent 597cd2bb8c
commit dd37b3f1ee
2 changed files with 21 additions and 11 deletions

View File

@@ -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);

View File

@@ -24,6 +24,8 @@ protected:
void paintGL();
private:
bool loadFrame();
GLuint vertexBuffer = 0;
GLuint program = 0;
GLuint texture = 0;