[Libreoffice-commits] core.git: 2 commits - slideshow/opengl

Emmanuel Gil Peyrot emmanuel.peyrot at collabora.com
Sat Jan 16 12:01:46 PST 2016


 slideshow/opengl/glitterVertexShader.glsl     |    4 ++--
 slideshow/opengl/honeycombFragmentShader.glsl |   26 ++++++++++++++++++++------
 slideshow/opengl/honeycombGeometryShader.glsl |   22 ++++++++++++++++++++--
 slideshow/opengl/honeycombVertexShader.glsl   |    2 +-
 4 files changed, 43 insertions(+), 11 deletions(-)

New commits:
commit 7cca8d3b3f5a9eda0060342fd2576d08a874b1c3
Author: Emmanuel Gil Peyrot <emmanuel.peyrot at collabora.com>
Date:   Fri Jan 15 21:07:56 2016 +0000

    slideshow: Add some volume to the Honeycomb hexagons, making them look better
    
    Change-Id: Ic0f62f36faccb65ab4fbc7bb5553d096a2658f96

diff --git a/slideshow/opengl/honeycombFragmentShader.glsl b/slideshow/opengl/honeycombFragmentShader.glsl
index 25b3e2d..325e393 100644
--- a/slideshow/opengl/honeycombFragmentShader.glsl
+++ b/slideshow/opengl/honeycombFragmentShader.glsl
@@ -12,6 +12,7 @@
 in vec2 texturePosition;
 in float fuzz;
 in vec2 v_center;
+in vec3 normal;
 
 uniform sampler2D slideTexture;
 uniform float selectedTexture;
@@ -25,13 +26,15 @@ bool isBorder(vec2 point)
 
 void main()
 {
-    gl_FragColor = texture2D(slideTexture, texturePosition);
+    vec4 fragment = texture2D(slideTexture, texturePosition);
+    vec3 lightVector = vec3(0.0, 0.0, 1.0);
+    float light = max(dot(lightVector, normal), 0.0);
     if (hexagonSize > 1.0) {
         // The space in-between hexagons.
         if (selectedTexture > 0.5)
-            gl_FragColor.a = 1.0 - time * 8 + gl_FragCoord.x / 1024.;
+            fragment.a = 1.0 - time * 8 + gl_FragCoord.x / 1024.;
         else
-            gl_FragColor.a = time * 8 - 7.7 + gl_FragCoord.x / 1024.;
+            fragment.a = time * 8 - 7.3 + gl_FragCoord.x / 1024.;
     } else {
         // The hexagons themselves.
 
@@ -58,8 +61,17 @@ void main()
             if (time < 0.8)
                 actualTime *= time / 0.8;
         }
-        gl_FragColor.a = actualTime;
+
+        if (selectedTexture > 0.5) {
+            // Leaving texture needs to be transparent to see-through.
+            fragment.a = actualTime;
+        } else {
+            // Entering one though, would look weird with transparency.
+            fragment.rgb *= actualTime;
+        }
     }
+    vec4 black = vec4(0.0, 0.0, 0.0, fragment.a);
+    gl_FragColor = mix(black, fragment, light);
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/slideshow/opengl/honeycombGeometryShader.glsl b/slideshow/opengl/honeycombGeometryShader.glsl
index bb2b1f3..f1c0c70 100644
--- a/slideshow/opengl/honeycombGeometryShader.glsl
+++ b/slideshow/opengl/honeycombGeometryShader.glsl
@@ -10,7 +10,7 @@
 #version 150
 
 layout(triangles) in;
-layout(triangle_strip, max_vertices=13) out;
+layout(triangle_strip, max_vertices=27) out;
 
 in mat4 modelViewProjectionMatrix[];
 
@@ -20,6 +20,7 @@ uniform sampler2D permTexture;
 out vec2 texturePosition;
 out float fuzz;
 out vec2 v_center;
+out vec3 normal;
 
 const float expandFactor = 0.0318;
 
@@ -51,11 +52,28 @@ void main()
     v_center = (1 + center.xy) / 2;
     fuzz = snoise(center.xy);
 
+    // Draw “walls” to the hexagons.
+    if (hexagonSize < 1.0) {
+        vec3 rearCenter = vec3(center.xy, -0.3);
+        normal = vec3(0.0, 0.0, 0.3);
+        emitHexagonVertex(center, translateVectors[5]);
+        emitHexagonVertex(rearCenter, translateVectors[5]);
+
+        for (int i = 0; i < 6; ++i) {
+            emitHexagonVertex(center, translateVectors[i]);
+            emitHexagonVertex(rearCenter, translateVectors[i]);
+        }
+
+        EndPrimitive();
+    }
+
+    // Draw the main hexagon part.
+    normal = vec3(0.0, 0.0, 1.0);
     emitHexagonVertex(center, translateVectors[5]);
 
     for (int i = 0; i < 6; ++i) {
         emitHexagonVertex(center, translateVectors[i]);
-        emitHexagonVertex(center, vec2(0, 0));
+        emitHexagonVertex(center, vec2(0.0, 0.0));
     }
 
     EndPrimitive();
commit 0fe5a3069b83d6a5e83c6c4df5d874c8802b7f52
Author: Emmanuel Gil Peyrot <emmanuel.peyrot at collabora.com>
Date:   Wed Jan 13 23:18:32 2016 +0000

    slideshow: Tweak a few constants to make Glitter and Honeycomb look nicer
    
    Change-Id: I5dd15f3d483caaedbf58a7ad12bf24798694524f

diff --git a/slideshow/opengl/glitterVertexShader.glsl b/slideshow/opengl/glitterVertexShader.glsl
index 3704efd..00ae568 100644
--- a/slideshow/opengl/glitterVertexShader.glsl
+++ b/slideshow/opengl/glitterVertexShader.glsl
@@ -111,9 +111,9 @@ void main( void )
     // Scale the transition time to minimize the time a tile will stay black.
     float transitionTime = clamp((time - startTime) / (endTime - startTime), 0.0, 1.0);
     if (transitionTime < 0.5)
-        transitionTime = transitionTime * 0.3 / 0.5;
+        transitionTime = transitionTime / 2.0;
     else
-        transitionTime = (transitionTime * 0.3 / 0.5) + 0.4;
+        transitionTime = (transitionTime / 2.0) + 0.5;
     angle = transitionTime * M_PI * 2.0;
 
     mat4 modelViewMatrix = u_modelViewMatrix * u_operationsTransformMatrix * u_sceneTransformMatrix * u_primitiveTransformMatrix;
diff --git a/slideshow/opengl/honeycombFragmentShader.glsl b/slideshow/opengl/honeycombFragmentShader.glsl
index 607e83d..25b3e2d 100644
--- a/slideshow/opengl/honeycombFragmentShader.glsl
+++ b/slideshow/opengl/honeycombFragmentShader.glsl
@@ -43,7 +43,7 @@ void main()
                 // If the center is “outside” of the canvas, clear it first.
                 startTime = 0.15;
             else
-                startTime = 0.15 + fuzz * 0.3;
+                startTime = 0.15 + fuzz * 0.4;
             float endTime = startTime + 0.05;
             actualTime = 1.0 - clamp((time - startTime) / (endTime - startTime), 0, 1);
         } else {
@@ -52,9 +52,11 @@ void main()
                 // If the center is “outside” of the canvas, clear it first.
                 startTime = 0.85;
             else
-                startTime = 0.5 + fuzz * 0.3;
+                startTime = 0.3 + fuzz * 0.4;
             float endTime = startTime + 0.05;
             actualTime = clamp((time - startTime) / (endTime - startTime), 0, 1);
+            if (time < 0.8)
+                actualTime *= time / 0.8;
         }
         gl_FragColor.a = actualTime;
     }
diff --git a/slideshow/opengl/honeycombVertexShader.glsl b/slideshow/opengl/honeycombVertexShader.glsl
index b54efbd..d54783b 100644
--- a/slideshow/opengl/honeycombVertexShader.glsl
+++ b/slideshow/opengl/honeycombVertexShader.glsl
@@ -73,7 +73,7 @@ void main( void )
         // Entering texture
         transformMatrix = translationMatrix(vec3(0, 0, 28 * (sqrt(time) - 1)))
             * slideScaleMatrix
-            * rotationMatrix(vec3(0.0, 0.0, 1.0), pow(time - 1, 2) * M_PI)
+            * rotationMatrix(vec3(0.0, 0.0, 1.0), pow(0.8 * (time - 1.0), 2.0) * M_PI)
             * invertSlideScaleMatrix;
     }
     modelViewProjectionMatrix = u_projectionMatrix * modelViewMatrix * transformMatrix;


More information about the Libreoffice-commits mailing list