summaryrefslogtreecommitdiff
path: root/slideshow
diff options
context:
space:
mode:
authorEmmanuel Gil Peyrot <emmanuel.peyrot@collabora.com>2015-11-20 20:13:04 +0000
committerTomaž Vajngerl <tomaz.vajngerl@collabora.com>2015-11-20 21:48:57 +0100
commitf62990a835e4751366f0e499f2f9c9b92889c039 (patch)
treed2200efafd025f262874c8621a2c2dbf1be47d65 /slideshow
parent1f91c05c55a32375d27eb23219928d0f01d4bc00 (diff)
slideshow: Reimplement both Fade transitions in shaders
Change-Id: I94187b9316a206578bb738411053afe070703f09
Diffstat (limited to 'slideshow')
-rw-r--r--slideshow/Package_opengl.mk2
-rw-r--r--slideshow/opengl/fadeBlackFragmentShader.glsl50
-rw-r--r--slideshow/opengl/fadeFragmentShader.glsl42
-rw-r--r--slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx76
4 files changed, 108 insertions, 62 deletions
diff --git a/slideshow/Package_opengl.mk b/slideshow/Package_opengl.mk
index dc03ff655fb0..82fb3b937f18 100644
--- a/slideshow/Package_opengl.mk
+++ b/slideshow/Package_opengl.mk
@@ -13,6 +13,8 @@ $(eval $(call gb_Package_add_files,slideshow_opengl_shader,$(LIBO_ETC_FOLDER)/op
basicVertexShader.glsl \
basicFragmentShader.glsl \
dissolveFragmentShader.glsl \
+ fadeBlackFragmentShader.glsl \
+ fadeFragmentShader.glsl \
staticFragmentShader.glsl \
vortexFragmentShader.glsl \
vortexVertexShader.glsl \
diff --git a/slideshow/opengl/fadeBlackFragmentShader.glsl b/slideshow/opengl/fadeBlackFragmentShader.glsl
new file mode 100644
index 000000000000..7f80cc55adcb
--- /dev/null
+++ b/slideshow/opengl/fadeBlackFragmentShader.glsl
@@ -0,0 +1,50 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2015 by Collabora, Ltd.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#version 120
+
+uniform sampler2D leavingSlideTexture;
+uniform sampler2D enteringSlideTexture;
+uniform float time;
+varying vec2 v_texturePosition;
+
+void main() {
+ vec4 black = vec4(0.0, 0.0, 0.0, 1.0);
+ vec4 texel;
+ float amount;
+ if (time < 0.5) {
+ texel = texture2D(leavingSlideTexture, v_texturePosition);
+ amount = time * 2;
+ } else {
+ texel = texture2D(enteringSlideTexture, v_texturePosition);
+ amount = (1.0 - time) * 2;
+ }
+ gl_FragColor = mix(texel, black, amount);
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/slideshow/opengl/fadeFragmentShader.glsl b/slideshow/opengl/fadeFragmentShader.glsl
new file mode 100644
index 000000000000..aab848e3c917
--- /dev/null
+++ b/slideshow/opengl/fadeFragmentShader.glsl
@@ -0,0 +1,42 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2015 by Collabora, Ltd.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#version 120
+
+uniform sampler2D leavingSlideTexture;
+uniform sampler2D enteringSlideTexture;
+uniform float time;
+varying vec2 v_texturePosition;
+
+void main() {
+ vec4 leavingFragment = texture2D(leavingSlideTexture, v_texturePosition);
+ vec4 enteringFragment = texture2D(enteringSlideTexture, v_texturePosition);
+ gl_FragColor = mix(leavingFragment, enteringFragment, time);
+}
+
+/* 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 6575da2ad948..1f4cf9fdb782 100644
--- a/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx
+++ b/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx
@@ -1367,51 +1367,22 @@ std::shared_ptr<OGLTransitionImpl> makeVenetianBlinds( bool vertical, int parts
namespace
{
-class FadeSmoothlyTransition : public SimpleTransition
+class FadeSmoothlyTransition : public ShaderTransition
{
public:
FadeSmoothlyTransition(const TransitionScene& rScene, const TransitionSettings& rSettings)
- : SimpleTransition(rScene, rSettings)
+ : ShaderTransition(rScene, rSettings)
{}
private:
- virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override;
+ virtual GLuint makeShader() const override;
+ virtual void impl_prepareTransition() override {}
+ virtual void impl_finishTransition() override {}
};
-void FadeSmoothlyTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale )
+GLuint FadeSmoothlyTransition::makeShader() const
{
- CHECK_GL_ERROR();
- applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale );
-
- CHECK_GL_ERROR();
- glDisable(GL_DEPTH_TEST);
-
- CHECK_GL_ERROR();
- displaySlide( nTime, glLeavingSlideTex, getScene().getLeavingSlide(), SlideWidthScale, SlideHeightScale );
- CHECK_GL_ERROR();
-
- CHECK_GL_ERROR();
- glDisable(GL_LIGHTING);
- CHECK_GL_ERROR();
- glEnable(GL_BLEND);
- CHECK_GL_ERROR();
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- CHECK_GL_ERROR();
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- CHECK_GL_ERROR();
- glColor4f( 1, 1, 1, nTime );
- CHECK_GL_ERROR();
- displaySlide( nTime, glEnteringSlideTex, getScene().getEnteringSlide(), SlideWidthScale, SlideHeightScale );
- CHECK_GL_ERROR();
- glDisable(GL_BLEND);
- CHECK_GL_ERROR();
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
- CHECK_GL_ERROR();
- glEnable(GL_LIGHTING);
- CHECK_GL_ERROR();
-
- glEnable(GL_DEPTH_TEST);
- CHECK_GL_ERROR();
+ return OpenGLHelper::LoadShaders( "basicVertexShader", "fadeFragmentShader" );
}
std::shared_ptr<OGLTransitionImpl>
@@ -1448,41 +1419,22 @@ std::shared_ptr<OGLTransitionImpl> makeFadeSmoothly()
namespace
{
-class FadeThroughBlackTransition : public SimpleTransition
+class FadeThroughBlackTransition : public ShaderTransition
{
public:
FadeThroughBlackTransition(const TransitionScene& rScene, const TransitionSettings& rSettings)
- : SimpleTransition(rScene, rSettings)
+ : ShaderTransition(rScene, rSettings)
{}
private:
- virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override;
+ virtual GLuint makeShader() const override;
+ virtual void impl_prepareTransition() override {}
+ virtual void impl_finishTransition() override {}
};
-void FadeThroughBlackTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale )
+GLuint FadeThroughBlackTransition::makeShader() const
{
- CHECK_GL_ERROR();
- applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale );
-
- glDisable(GL_DEPTH_TEST);
-
- glDisable(GL_LIGHTING);
- glEnable(GL_BLEND);
- glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
- if( nTime < 0.5 ) {
- glColor4f( 1, 1, 1, 1 - nTime*2 );
- displaySlide( nTime, glLeavingSlideTex, getScene().getLeavingSlide(), SlideWidthScale, SlideHeightScale );
- } else {
- glColor4f( 1, 1, 1, (nTime - 0.5)*2 );
- displaySlide( nTime, glEnteringSlideTex, getScene().getEnteringSlide(), SlideWidthScale, SlideHeightScale );
- }
- glDisable(GL_BLEND);
- glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
- glEnable(GL_LIGHTING);
-
- glEnable(GL_DEPTH_TEST);
- CHECK_GL_ERROR();
+ return OpenGLHelper::LoadShaders( "basicVertexShader", "fadeBlackFragmentShader" );
}
std::shared_ptr<OGLTransitionImpl>