From 58ffb7b6274b0a470c2ae746216c01426b86e3a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Gr=C3=A4=C3=9Flin?= Date: Tue, 21 May 2013 10:39:21 +0200 Subject: [PATCH] GLSL 1.40 shader for invert effect REVIEW: 110573 --- effects/invert/CMakeLists.txt | 7 ++++-- effects/invert/data/{ => 1.10}/invert.frag | 0 effects/invert/data/1.40/invert.frag | 25 ++++++++++++++++++++++ effects/invert/invert.cpp | 7 +++++- 4 files changed, 36 insertions(+), 3 deletions(-) rename effects/invert/data/{ => 1.10}/invert.frag (100%) create mode 100644 effects/invert/data/1.40/invert.frag diff --git a/effects/invert/CMakeLists.txt b/effects/invert/CMakeLists.txt index 878a68ea39..a7d9443413 100644 --- a/effects/invert/CMakeLists.txt +++ b/effects/invert/CMakeLists.txt @@ -13,8 +13,11 @@ install( FILES # Data files install( FILES - invert/data/invert.frag - DESTINATION ${DATA_INSTALL_DIR}/kwin ) + invert/data/1.10/invert.frag + DESTINATION ${DATA_INSTALL_DIR}/kwin/shaders/1.10 ) +install( FILES + invert/data/1.40/invert.frag + DESTINATION ${DATA_INSTALL_DIR}/kwin/shaders/1.40 ) ####################################### # Config diff --git a/effects/invert/data/invert.frag b/effects/invert/data/1.10/invert.frag similarity index 100% rename from effects/invert/data/invert.frag rename to effects/invert/data/1.10/invert.frag diff --git a/effects/invert/data/1.40/invert.frag b/effects/invert/data/1.40/invert.frag new file mode 100644 index 0000000000..0b6d21951e --- /dev/null +++ b/effects/invert/data/1.40/invert.frag @@ -0,0 +1,25 @@ +#version 140 +uniform sampler2D sampler; +uniform vec4 modulation; +uniform float saturation; + +in vec2 varyingTexCoords; + +out vec4 fragColor; + +void main() +{ + vec4 tex = texture(sampler, varyingTexCoords); + + if (saturation != 1.0) { + vec3 desaturated = tex.rgb * vec3( 0.30, 0.59, 0.11 ); + desaturated = vec3( dot( desaturated, tex.rgb )); + tex.rgb = tex.rgb * vec3( saturation ) + desaturated * vec3( 1.0 - saturation ); + } + + tex *= modulation; + tex.rgb = vec3(1.0) - tex.rgb; + tex.rgb *= tex.a; + + fragColor = tex; +} diff --git a/effects/invert/invert.cpp b/effects/invert/invert.cpp index 487abbd8c4..ba453f63e1 100644 --- a/effects/invert/invert.cpp +++ b/effects/invert/invert.cpp @@ -72,7 +72,12 @@ bool InvertEffect::loadData() { m_inited = true; - const QString fragmentshader = KGlobal::dirs()->findResource("data", "kwin/invert.frag"); + QString shadersDir = "kwin/shaders/1.10/"; +#ifndef KWIN_HAVE_OPENGLES + if (GLPlatform::instance()->glslVersion() >= kVersionNumber(1, 40)) + shadersDir = "kwin/shaders/1.40/"; +#endif + const QString fragmentshader = KGlobal::dirs()->findResource("data", shadersDir + "invert.frag"); m_shader = ShaderManager::instance()->loadFragmentShader(ShaderManager::GenericShader, fragmentshader); if (!m_shader->isValid()) {