[Libreoffice-commits] core.git: officecfg/registry sd/xml slideshow/opengl slideshow/Package_opengl.mk slideshow/source
Tor Lillqvist
tml at collabora.com
Thu Nov 5 15:03:22 PST 2015
officecfg/registry/data/org/openoffice/Office/UI/Effects.xcu | 13 +
sd/xml/transitions-ogl.xml | 3
slideshow/Package_opengl.mk | 1
slideshow/opengl/rippleFragmentShader.glsl | 33 ++++
slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx | 70 ++++++++++
slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.hxx | 1
slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionerImpl.cxx | 4
7 files changed, 125 insertions(+)
New commits:
commit 75465aadff0272fd49d302ed8f77da7e709bd90d
Author: Tor Lillqvist <tml at collabora.com>
Date: Thu Nov 5 23:31:35 2015 +0200
Add a 'Ripple' transition
Change-Id: I18efe35c299bc3a4a2a5e449021323fc1f53f378
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/Effects.xcu b/officecfg/registry/data/org/openoffice/Office/UI/Effects.xcu
index a7a1bfd..ad52853 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/Effects.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/Effects.xcu
@@ -1597,6 +1597,14 @@
<value xml:lang="en-US">Vortex</value>
</prop>
</node>
+ <node oor:name="ripple" oor:op="replace">
+ <prop oor:name="Group" oor:type="xs:string">
+ <value>exciting</value>
+ </prop>
+ <prop oor:name="Label" oor:type="xs:string">
+ <value xml:lang="en-US">Ripple</value>
+ </prop>
+ </node>
</node>
<node oor:name="TransitionVariants">
<node oor:name="plain" oor:op="replace">
@@ -2335,6 +2343,11 @@
<value>vortex</value>
</prop>
</node>
+ <node oor:name="ripple" oor:op="replace">
+ <prop oor:name="Set" oor:type="xs:string">
+ <value>ripple</value>
+ </prop>
+ </node>
</node>
</node>
<node oor:name="Presets">
diff --git a/sd/xml/transitions-ogl.xml b/sd/xml/transitions-ogl.xml
index 26de569..d541133 100644
--- a/sd/xml/transitions-ogl.xml
+++ b/sd/xml/transitions-ogl.xml
@@ -62,6 +62,9 @@
<anim:par pres:preset-id="vortex">
<anim:transitionFilter smil:type="miscShapeWipe" smil:subtype="vertical"/>
</anim:par>
+ <anim:par pres:preset-id="ripple">
+ <anim:transitionFilter smil:type="miscShapeWipe" smil:subtype="horizontal"/>
+ </anim:par>
<anim:par pres:preset-id="zoom-rotate-in">
<anim:transitionFilter smil:type="zoom" smil:subtype="rotateIn"/>
</anim:par>
diff --git a/slideshow/Package_opengl.mk b/slideshow/Package_opengl.mk
index 440c03d..a312622 100644
--- a/slideshow/Package_opengl.mk
+++ b/slideshow/Package_opengl.mk
@@ -15,6 +15,7 @@ $(eval $(call gb_Package_add_files,slideshow_opengl_shader,$(LIBO_ETC_FOLDER)/op
staticFragmentShader.glsl \
vortexFragmentShader.glsl \
vortexVertexShader.glsl \
+ rippleFragmentShader.glsl \
))
# vim: set noet sw=4 ts=4:
diff --git a/slideshow/opengl/rippleFragmentShader.glsl b/slideshow/opengl/rippleFragmentShader.glsl
new file mode 100644
index 0000000..83677e4
--- /dev/null
+++ b/slideshow/opengl/rippleFragmentShader.glsl
@@ -0,0 +1,33 @@
+/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+
+#define M_PI 3.1415926535897932384626433832795
+
+uniform sampler2D leavingSlideTexture;
+uniform sampler2D enteringSlideTexture;
+uniform float time;
+uniform vec2 center;
+varying vec2 v_texturePosition;
+
+void main()
+{
+ float d = length(v_texturePosition - center);
+ float w = 0;
+ w = max(w, length(center - vec2(0, 0)));
+ w = max(w, length(center - vec2(1, 0)));
+ w = max(w, length(center - vec2(1, 1)));
+ w = max(w, length(center - vec2(0, 1)));
+ float v = 0.2;
+ float smoothtime = smoothstep(0, 1, time);
+ float a = smoothstep(smoothtime*w-v, smoothtime*w+v, d);
+ a += (0.5 - abs(a-0.5))*sin(d*M_PI*30);
+ gl_FragColor = mix(texture2D(enteringSlideTexture, v_texturePosition), texture2D(leavingSlideTexture, v_texturePosition), a);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx b/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx
index 963397c..a3183c6 100644
--- a/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx
+++ b/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx
@@ -27,6 +27,7 @@
************************************************************************/
#include <GL/glew.h>
+#include <glm/gtc/type_ptr.hpp>
#include <vcl/opengl/OpenGLHelper.hxx>
#include <algorithm>
@@ -1845,6 +1846,75 @@ std::shared_ptr<OGLTransitionImpl> makeVortex()
return makeVortexTransition(aLeavingSlide, aEnteringSlide, aSettings, NX, NY);
}
+namespace
+{
+
+class RippleTransition : public ShaderTransition
+{
+public:
+ RippleTransition(const TransitionScene& rScene, const TransitionSettings& rSettings, const glm::vec2& rCenter)
+ : ShaderTransition(rScene, rSettings),
+ maCenter(rCenter)
+ {
+ }
+
+private:
+ virtual GLuint makeShader() override;
+
+ glm::vec2 maCenter;
+};
+
+GLuint RippleTransition::makeShader()
+{
+ GLuint nProgram = OpenGLHelper::LoadShaders( "basicVertexShader", "rippleFragmentShader" );
+
+ if (nProgram)
+ {
+ glUseProgram(nProgram);
+
+ GLint nCenterLocation = glGetUniformLocation(nProgram, "center");
+ CHECK_GL_ERROR();
+
+ glUniform2fv(nCenterLocation, 1, glm::value_ptr(maCenter));
+ CHECK_GL_ERROR();
+ }
+
+ return nProgram;
+}
+
+std::shared_ptr<OGLTransitionImpl>
+makeRippleTransition(const Primitives_t& rLeavingSlidePrimitives,
+ const Primitives_t& rEnteringSlidePrimitives,
+ const TransitionSettings& rSettings)
+{
+ // The center point should be adjustable by the user, but we have no way to do that in the UI
+ return std::make_shared<RippleTransition>(TransitionScene(rLeavingSlidePrimitives, rEnteringSlidePrimitives),
+ rSettings,
+ glm::vec2(0.5, 0.5));
+}
+
+}
+
+std::shared_ptr<OGLTransitionImpl> makeRipple()
+{
+ Primitive Slide;
+
+ Slide.pushTriangle (glm::vec2 (0,0), glm::vec2 (1,0), glm::vec2 (0,1));
+ Slide.pushTriangle (glm::vec2 (1,0), glm::vec2 (0,1), glm::vec2 (1,1));
+
+ Primitives_t aLeavingSlide;
+ aLeavingSlide.push_back (Slide);
+
+ Primitives_t aEnteringSlide;
+ aEnteringSlide.push_back (Slide);
+
+ TransitionSettings aSettings;
+ aSettings.mbUseMipMapLeaving = aSettings.mbUseMipMapEntering = false;
+ aSettings.mnRequiredGLVersion = 2.0;
+
+ return makeRippleTransition(aLeavingSlide, aEnteringSlide, aSettings);
+}
+
std::shared_ptr<OGLTransitionImpl> makeNewsflash()
{
Primitive Slide;
diff --git a/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.hxx b/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.hxx
index a9e4791..7193b6d 100644
--- a/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.hxx
+++ b/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.hxx
@@ -235,6 +235,7 @@ std::shared_ptr<OGLTransitionImpl> makeVenetianBlinds( bool vertical, int parts
std::shared_ptr<OGLTransitionImpl> makeStatic();
std::shared_ptr<OGLTransitionImpl> makeDissolve();
std::shared_ptr<OGLTransitionImpl> makeVortex();
+std::shared_ptr<OGLTransitionImpl> makeRipple();
std::shared_ptr<OGLTransitionImpl> makeNewsflash();
/** 2D replacements
diff --git a/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionerImpl.cxx b/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionerImpl.cxx
index 4dec125..3c970e9 100644
--- a/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionerImpl.cxx
+++ b/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionerImpl.cxx
@@ -1431,6 +1431,7 @@ public:
case animations::TransitionSubType::CORNERSIN: // 11
case animations::TransitionSubType::CORNERSOUT: // 12
case animations::TransitionSubType::VERTICAL: // 13
+ case animations::TransitionSubType::HORIZONTAL: // 14
case animations::TransitionSubType::CIRCLE: // 27
case animations::TransitionSubType::FANOUTHORIZONTAL: // 55
case animations::TransitionSubType::ACROSS: // 108
@@ -1507,6 +1508,9 @@ public:
case animations::TransitionSubType::VERTICAL:
pTransition = makeVortex();
break;
+ case animations::TransitionSubType::HORIZONTAL:
+ pTransition = makeRipple();
+ break;
case animations::TransitionSubType::CIRCLE:
pTransition = makeRevolvingCircles(8,128);
break;
More information about the Libreoffice-commits
mailing list