diff --git a/effects/dropshadow.frag b/effects/dropshadow.frag index dc41d000f..1bed6e491 100644 --- a/effects/dropshadow.frag +++ b/effects/dropshadow.frag @@ -4,7 +4,7 @@ uniform sampler2D image; uniform vec2 resolution; -uniform bool shadow; +uniform int shadow; uniform vec3 shadowcolor; uniform float shadowsoftness; uniform float shadowopacity; @@ -14,8 +14,7 @@ varying vec2 vTexCoord; void main(void) { vec4 master_px = texture2D(image, vTexCoord); - if (shadow) { - + if (shadow == 1) { vec2 shadow_dist = vec2(shadowdistance)/resolution; float shadow_opacity = 0.01*shadowopacity; diff --git a/project/effect.cpp b/project/effect.cpp index e1dd0942a..cf0c495ea 100644 --- a/project/effect.cpp +++ b/project/effect.cpp @@ -820,9 +820,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 { @@ -846,12 +855,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 7c48fd81f..d1a2cb4b2 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;