From 72df21e57ccefdf749fa9f56d48b8997e50963c7 Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Wed, 9 Jan 2019 12:22:50 +1100 Subject: [PATCH] don't bind shaders if they didn't compile --- project/effect.cpp | 21 +++++++++++++++++---- project/effect.h | 1 + ui/viewerwidget.cpp | 4 ++-- 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/project/effect.cpp b/project/effect.cpp index 6315ade00..add2c2a5b 100644 --- a/project/effect.cpp +++ b/project/effect.cpp @@ -800,9 +800,18 @@ void Effect::open() { } else { glslProgram = new QOpenGLShaderProgram(); validate_meta_path(); - if (!vertPath.isEmpty()) glslProgram->addShaderFromSourceFile(QOpenGLShader::Vertex, meta->path + "/" + vertPath); - if (!fragPath.isEmpty()) glslProgram->addShaderFromSourceFile(QOpenGLShader::Fragment, meta->path + "/" + fragPath); - glslProgram->link(); + bool glsl_compiled = true; + if (!vertPath.isEmpty()) { + if (!glslProgram->addShaderFromSourceFile(QOpenGLShader::Vertex, meta->path + "/" + vertPath)) { + glsl_compiled = false; + } + } + if (!fragPath.isEmpty()) { + if (!glslProgram->addShaderFromSourceFile(QOpenGLShader::Fragment, meta->path + "/" + fragPath)) { + glsl_compiled = false; + } + } + if (glsl_compiled) glslProgram->link(); isOpen = true; } } else { @@ -826,12 +835,16 @@ void Effect::close() { isOpen = false; } +bool Effect::is_glsl_linked() { + return glslProgram != NULL && glslProgram->isLinked(); +} + void Effect::startEffect() { if (!isOpen) { open(); dout << "[WARNING] Tried to start a closed effect - opening"; } - if (enable_shader) bound = glslProgram->bind(); + if (enable_shader && glslProgram->isLinked()) bound = glslProgram->bind(); } void Effect::endEffect() { diff --git a/project/effect.h b/project/effect.h index 284bd9678..b11bf8fae 100644 --- a/project/effect.h +++ b/project/effect.h @@ -142,6 +142,7 @@ public: bool is_open(); void open(); void close(); + bool is_glsl_linked(); virtual void startEffect(); virtual void endEffect(); diff --git a/ui/viewerwidget.cpp b/ui/viewerwidget.cpp index 659b344f9..f46b8c1c3 100644 --- a/ui/viewerwidget.cpp +++ b/ui/viewerwidget.cpp @@ -189,7 +189,7 @@ void ViewerWidget::initializeGL() { //} void ViewerWidget::paintEvent(QPaintEvent *e) { - if (!rendering && context()->thread() == this->thread()) { + if (!rendering && context()->thread() == this->thread()) { makeCurrent(); QOpenGLWidget::paintEvent(e); } @@ -429,7 +429,7 @@ void ViewerWidget::process_effect(Clip* c, Effect* e, double timecode, GLTexture } if (e->enable_shader || e->enable_superimpose) { e->startEffect(); - if (e->enable_shader) { + if (e->enable_shader && e->is_glsl_linked()) { e->process_shader(timecode, coords); composite_texture = draw_clip(c->fbo[fbo_switcher], composite_texture, true); fbo_switcher = !fbo_switcher;