[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