Kaydet (Commit) f62990a8 authored tarafından Emmanuel Gil Peyrot's avatar Emmanuel Gil Peyrot Kaydeden (comit) Tomaž Vajngerl

slideshow: Reimplement both Fade transitions in shaders

Change-Id: I94187b9316a206578bb738411053afe070703f09
üst 1f91c05c
......@@ -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 \
......
/* -*- 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: */
/* -*- 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: */
......@@ -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>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment