diff --git a/effects/startupfeedback/data/blinking-startup-fragment.glsl b/effects/startupfeedback/data/blinking-startup-fragment.glsl
index 72200c0c98..3229f58026 100644
--- a/effects/startupfeedback/data/blinking-startup-fragment.glsl
+++ b/effects/startupfeedback/data/blinking-startup-fragment.glsl
@@ -1,13 +1,13 @@
uniform sampler2D sampler;
-uniform vec4 u_color;
+uniform vec4 geometryColor;
-varying vec2 varyingTexCoords;
+varying vec2 texcoord0;
void main()
{
- vec4 tex = texture2D(sampler, varyingTexCoords);
+ vec4 tex = texture2D(sampler, texcoord0);
if (tex.a != 1.0) {
- tex = u_color;
+ tex = geometryColor;
}
gl_FragColor = tex;
}
diff --git a/effects/startupfeedback/startupfeedback.cpp b/effects/startupfeedback/startupfeedback.cpp
index 4084441156..3019a2fd7b 100644
--- a/effects/startupfeedback/startupfeedback.cpp
+++ b/effects/startupfeedback/startupfeedback.cpp
@@ -20,6 +20,7 @@ along with this program. If not, see .
#include "startupfeedback.h"
// Qt
#include
+#include
#include
#include
#include
@@ -131,11 +132,17 @@ void StartupFeedbackEffect::reconfigure(Effect::ReconfigureFlags flags)
delete m_blinkingShader;
m_blinkingShader = 0;
const QString shader = QStandardPaths::locate(QStandardPaths::GenericDataLocation, QStringLiteral("kwin/blinking-startup-fragment.glsl"));
- m_blinkingShader = ShaderManager::instance()->loadFragmentShader(ShaderManager::SimpleShader, shader);
- if (m_blinkingShader->isValid()) {
- qCDebug(KWINEFFECTS) << "Blinking Shader is valid";
+
+ QFile ff(shader);
+ if (ff.open(QIODevice::ReadOnly)) {
+ m_blinkingShader = ShaderManager::instance()->generateCustomShader(ShaderTrait::MapTexture, QByteArray(), ff.readAll());
+ if (m_blinkingShader->isValid()) {
+ qCDebug(KWINEFFECTS) << "Blinking Shader is valid";
+ } else {
+ qCDebug(KWINEFFECTS) << "Blinking Shader is not valid";
+ }
} else {
- qCDebug(KWINEFFECTS) << "Blinking Shader is not valid";
+ qCCritical(KWINEFFECTS) << "Couldn't open" << shader << "for reading!";
}
}
} else
@@ -187,27 +194,18 @@ void StartupFeedbackEffect::paintScreen(int mask, QRegion region, ScreenPaintDat
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
texture->bind();
- bool useShader = false;
- if (m_type == BlinkingFeedback) {
+ if (m_type == BlinkingFeedback && m_blinkingShader && m_blinkingShader->isValid()) {
const QColor& blinkingColor = BLINKING_COLORS[ FRAME_TO_BLINKING_COLOR[ m_frame ]];
- if (m_blinkingShader && m_blinkingShader->isValid()) {
- useShader = true;
- ShaderManager::instance()->pushShader(m_blinkingShader);
- m_blinkingShader->setUniform("u_color", blinkingColor);
- }
+ ShaderManager::instance()->pushShader(m_blinkingShader);
+ m_blinkingShader->setUniform(GLShader::Color, blinkingColor);
} else {
- useShader = true;
- auto s = ShaderManager::instance()->pushShader(ShaderTrait::MapTexture);
- QMatrix4x4 mvp;
- const QSize size = effects->virtualScreenSize();
- mvp.ortho(0, size.width(), size.height(), 0, 0, 65535);
- mvp.translate(m_currentGeometry.x(), m_currentGeometry.y());
- s->setUniform(GLShader::ModelViewProjectionMatrix, mvp);
+ ShaderManager::instance()->pushShader(ShaderTrait::MapTexture);
}
+ QMatrix4x4 mvp = data.projectionMatrix();
+ mvp.translate(m_currentGeometry.x(), m_currentGeometry.y());
+ ShaderManager::instance()->getBoundShader()->setUniform(GLShader::ModelViewProjectionMatrix, mvp);
texture->render(m_currentGeometry, m_currentGeometry);
- if (useShader) {
- ShaderManager::instance()->popShader();
- }
+ ShaderManager::instance()->popShader();
texture->unbind();
glDisable(GL_BLEND);
}