From 5a7160e21fe17c2697c2b9d71c9e1f4bf65c9352 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Wed, 24 Feb 2016 20:21:11 +0000 Subject: slideshow: Move Vortex calculations to the geometry stage, fixes Intel Their Windows driver was failing due to too many varyings being used between the vertex and the geometry stages. (cherry-picked from the commit 06404309026b8e5aeb4c47ea68aea7ef21c6654e) Change-Id: Iec69a2ef29e6ed4ba5ce6e46c7a5eb7db5098d1b Reviewed-on: https://gerrit.libreoffice.org/22775 Tested-by: Jenkins Reviewed-by: jan iversen --- slideshow/opengl/vortexGeometryShader.glsl | 22 ++++++++++++++++++---- slideshow/opengl/vortexVertexShader.glsl | 14 -------------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/slideshow/opengl/vortexGeometryShader.glsl b/slideshow/opengl/vortexGeometryShader.glsl index 312babac1c2f..5d64a1249c90 100644 --- a/slideshow/opengl/vortexGeometryShader.glsl +++ b/slideshow/opengl/vortexGeometryShader.glsl @@ -12,11 +12,14 @@ layout(triangles) in; layout(triangle_strip, max_vertices=11) out; +uniform float shadow; +uniform mat4 u_projectionMatrix; +uniform mat4 orthoProjectionMatrix; +uniform mat4 orthoViewMatrix; + in vec2 g_texturePosition[]; in vec3 g_normal[]; -in mat4 projectionMatrix[]; in mat4 modelViewMatrix[]; -in mat4 shadowMatrix[]; in mat4 transform[]; in float nTime[]; in float startTime[]; @@ -52,6 +55,17 @@ mat4 translationMatrix(vec3 axis) void emitHexagonVertex(int index, vec3 translation, float fdsq) { + mat4 projectionMatrix; + mat4 shadowMatrix; + + if (shadow < 0.5) { + projectionMatrix = u_projectionMatrix; + shadowMatrix = orthoProjectionMatrix * orthoViewMatrix; + } else { + projectionMatrix = orthoProjectionMatrix * orthoViewMatrix; + shadowMatrix = mat4(0.0); + } + mat4 normalMatrix = transpose(inverse(modelViewMatrix[index])); vec4 pos = gl_in[index].gl_Position + vec4(translation, 0.0); @@ -62,8 +76,8 @@ void emitHexagonVertex(int index, vec3 translation, float fdsq) v_normal = normalize(vec3(normalMatrix * transform[index] * vec4(g_normal[index], 0.0))); v_normal.z *= fdsq; - gl_Position = projectionMatrix[index] * modelViewMatrix[index] * pos; - shadowCoordinate = translationMatrix(vec3(0.5, 0.5, 0.5)) * scaleMatrix(vec3(0.5, 0.5, 0.5)) * shadowMatrix[index] * modelViewMatrix[index] * pos; + gl_Position = projectionMatrix * modelViewMatrix[index] * pos; + shadowCoordinate = translationMatrix(vec3(0.5, 0.5, 0.5)) * scaleMatrix(vec3(0.5, 0.5, 0.5)) * shadowMatrix * modelViewMatrix[index] * pos; v_texturePosition = g_texturePosition[index]; EmitVertex(); } diff --git a/slideshow/opengl/vortexVertexShader.glsl b/slideshow/opengl/vortexVertexShader.glsl index 9bab2d9e0397..3d5838e5b9b3 100755 --- a/slideshow/opengl/vortexVertexShader.glsl +++ b/slideshow/opengl/vortexVertexShader.glsl @@ -16,7 +16,6 @@ in vec3 a_normal; in vec2 a_texCoord; in float tileInfo; -uniform mat4 u_projectionMatrix; uniform mat4 u_modelViewMatrix; uniform mat4 u_sceneTransformMatrix; uniform mat4 u_primitiveTransformMatrix; @@ -26,15 +25,10 @@ uniform float time; uniform ivec2 numTiles; uniform sampler2D permTexture; uniform float slide; -uniform float shadow; -uniform mat4 orthoProjectionMatrix; -uniform mat4 orthoViewMatrix; out vec2 g_texturePosition; out vec3 g_normal; -out mat4 projectionMatrix; out mat4 modelViewMatrix; -out mat4 shadowMatrix; out mat4 transform; out float nTime; out float startTime; @@ -142,14 +136,6 @@ void main( void ) * transform; } - if (shadow < 0.5) { - projectionMatrix = u_projectionMatrix; - shadowMatrix = orthoProjectionMatrix * orthoViewMatrix; - } else { - projectionMatrix = orthoProjectionMatrix * orthoViewMatrix; - shadowMatrix = mat4(0.0); - } - modelViewMatrix = u_modelViewMatrix * u_operationsTransformMatrix * u_sceneTransformMatrix * u_primitiveTransformMatrix; gl_Position = vec4(a_position, 1.0); -- cgit