[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