diff --git a/effects/cube/cube.cpp b/effects/cube/cube.cpp
index 40f6767f54..bd9409f055 100644
--- a/effects/cube/cube.cpp
+++ b/effects/cube/cube.cpp
@@ -120,7 +120,6 @@ CubeEffect::CubeEffect()
connect(effects, SIGNAL(tabBoxAdded(int)), this, SLOT(slotTabBoxAdded(int)));
connect(effects, SIGNAL(tabBoxClosed()), this, SLOT(slotTabBoxClosed()));
connect(effects, SIGNAL(tabBoxUpdated()), this, SLOT(slotTabBoxUpdated()));
- connect(effects, SIGNAL(screenGeometryChanged(const QSize&)), this, SLOT(slotResetShaders()));
reconfigure(ReconfigureAll);
}
@@ -296,11 +295,6 @@ void CubeEffect::slotWallPaperLoaded()
watcher->deleteLater();
}
-void CubeEffect::slotResetShaders()
-{
- ShaderManager::instance()->resetShader(sphereShader, ShaderManager::GenericShader);
-}
-
bool CubeEffect::loadShader()
{
effects->makeOpenGLContextCurrent();
@@ -330,33 +324,19 @@ bool CubeEffect::loadShader()
QRect rect = effects->clientArea(FullArea, activeScreen, effects->currentDesktop());
cylinderShader->setUniform("width", (float)rect.width() * 0.5f);
}
- sphereShader = ShaderManager::instance()->loadVertexShader(ShaderManager::GenericShader, sphereVertexshader);
+
+ QFile svf(sphereVertexshader);
+ if (!svf.open(QIODevice::ReadOnly)) {
+ qCCritical(KWINEFFECTS) << "The sphere shader couldn't be opened!";
+ return false;
+ }
+ sphereShader = ShaderManager::instance()->generateCustomShader(ShaderTrait::MapTexture | ShaderTrait::AdjustSaturation | ShaderTrait::Modulate, svf.readAll(), QByteArray());
if (!sphereShader->isValid()) {
qCCritical(KWINEFFECTS) << "The sphere shader failed to load!";
return false;
} else {
ShaderBinder binder(sphereShader);
sphereShader->setUniform("sampler", 0);
- QMatrix4x4 projection;
- float fovy = 60.0f;
- float aspect = 1.0f;
- float zNear = 0.1f;
- float zFar = 100.0f;
- float ymax = zNear * tan(fovy * M_PI / 360.0f);
- float ymin = -ymax;
- float xmin = ymin * aspect;
- float xmax = ymax * aspect;
- projection.frustum(xmin, xmax, ymin, ymax, zNear, zFar);
- sphereShader->setUniform(GLShader::ProjectionMatrix, projection);
- QMatrix4x4 modelview;
- float scaleFactor = 1.1 * tan(fovy * M_PI / 360.0f) / ymax;
- modelview.translate(xmin * scaleFactor, ymax * scaleFactor, -1.1);
- const QSize screenSize = effects->virtualScreenSize();
- modelview.scale((xmax - xmin)*scaleFactor / screenSize.width(), -(ymax - ymin)*scaleFactor / screenSize.height(), 0.001);
- sphereShader->setUniform(GLShader::ModelViewMatrix, modelview);
- const QMatrix4x4 identity;
- sphereShader->setUniform(GLShader::ScreenTransformation, identity);
- sphereShader->setUniform(GLShader::WindowTransformation, identity);
QRect rect = effects->clientArea(FullArea, activeScreen, effects->currentDesktop());
sphereShader->setUniform("width", (float)rect.width() * 0.5f);
sphereShader->setUniform("height", (float)rect.height() * 0.5f);
diff --git a/effects/cube/cube.h b/effects/cube/cube.h
index 272e3ce3d6..3a01cbfc86 100644
--- a/effects/cube/cube.h
+++ b/effects/cube/cube.h
@@ -140,7 +140,6 @@ private Q_SLOTS:
void slotTabBoxClosed();
void slotCubeCapLoaded();
void slotWallPaperLoaded();
- void slotResetShaders();
private:
enum RotationDirection {
Left,
diff --git a/effects/cube/data/1.10/sphere.vert b/effects/cube/data/1.10/sphere.vert
index 8cf3a07b03..35f65499ea 100644
--- a/effects/cube/data/1.10/sphere.vert
+++ b/effects/cube/data/1.10/sphere.vert
@@ -17,25 +17,22 @@ GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
*********************************************************************/
-uniform mat4 projection;
-uniform mat4 modelview;
-uniform mat4 screenTransformation;
-uniform mat4 windowTransformation;
+uniform mat4 modelViewProjectionMatrix;
uniform float width;
uniform float height;
uniform float cubeAngle;
uniform vec2 u_offset;
uniform float timeLine;
-attribute vec4 vertex;
-attribute vec2 texCoord;
+attribute vec4 position;
+attribute vec4 texcoord;
-varying vec2 varyingTexCoords;
+varying vec2 texcoord0;
void main()
{
- varyingTexCoords = texCoord;
- vec4 transformedVertex = vertex;
+ texcoord0 = texcoord.st;
+ vec4 transformedVertex = position;
transformedVertex.x = transformedVertex.x - width;
transformedVertex.y = transformedVertex.y - height;
transformedVertex.xy = transformedVertex.xy + u_offset;
@@ -48,8 +45,8 @@ void main()
transformedVertex.xy += vec2( width - u_offset.x, height - u_offset.y );
- vec3 diff = (vertex.xyz - transformedVertex.xyz)*timeLine;
+ vec3 diff = (position.xyz - transformedVertex.xyz)*timeLine;
transformedVertex.xyz += diff;
- gl_Position = projection*(modelview*screenTransformation*windowTransformation)*transformedVertex;
+ gl_Position = modelViewProjectionMatrix*transformedVertex;
}
diff --git a/effects/cube/data/1.40/sphere.vert b/effects/cube/data/1.40/sphere.vert
index f74a9b8a5e..28975ed862 100644
--- a/effects/cube/data/1.40/sphere.vert
+++ b/effects/cube/data/1.40/sphere.vert
@@ -18,25 +18,22 @@ You should have received a copy of the GNU General Public License
along with this program. If not, see .
*********************************************************************/
#version 140
-uniform mat4 projection;
-uniform mat4 modelview;
-uniform mat4 screenTransformation;
-uniform mat4 windowTransformation;
+uniform mat4 modelViewProjectionMatrix;
uniform float width;
uniform float height;
uniform float cubeAngle;
uniform vec2 u_offset;
uniform float timeLine;
-in vec4 vertex;
-in vec2 texCoord;
+in vec4 position;
+in vec4 texcoord;
-out vec2 varyingTexCoords;
+out vec2 texcoord0;
void main()
{
- varyingTexCoords = texCoord;
- vec4 transformedVertex = vertex;
+ texcoord0 = texcoord.st;
+ vec4 transformedVertex = position;
transformedVertex.x = transformedVertex.x - width;
transformedVertex.y = transformedVertex.y - height;
transformedVertex.xy = transformedVertex.xy + u_offset;
@@ -49,8 +46,8 @@ void main()
transformedVertex.xy += vec2( width - u_offset.x, height - u_offset.y );
- vec3 diff = (vertex.xyz - transformedVertex.xyz)*timeLine;
+ vec3 diff = (position.xyz - transformedVertex.xyz)*timeLine;
transformedVertex.xyz += diff;
- gl_Position = projection*(modelview*screenTransformation*windowTransformation)*transformedVertex;
+ gl_Position = modelViewProjectionMatrix*transformedVertex;
}