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

slideshow: Make SimpleTransition inherit from ShaderTransition

Many transitions don’t like the simplistic default shader, especially
since it doesn’t handle lighting or reflections properly.

Those issues are addressed in the following commits.  TODO: except
lighting.

Change-Id: Ia99308deb87c97d9bbe1da32aac64d0437061a84
üst a37364a0
...@@ -11,6 +11,7 @@ $(eval $(call gb_Package_Package,slideshow_opengl_shader,$(SRCDIR)/slideshow/ope ...@@ -11,6 +11,7 @@ $(eval $(call gb_Package_Package,slideshow_opengl_shader,$(SRCDIR)/slideshow/ope
$(eval $(call gb_Package_add_files,slideshow_opengl_shader,$(LIBO_ETC_FOLDER)/opengl,\ $(eval $(call gb_Package_add_files,slideshow_opengl_shader,$(LIBO_ETC_FOLDER)/opengl,\
basicVertexShader.glsl \ basicVertexShader.glsl \
basicFragmentShader.glsl \
dissolveFragmentShader.glsl \ dissolveFragmentShader.glsl \
staticFragmentShader.glsl \ staticFragmentShader.glsl \
vortexFragmentShader.glsl \ vortexFragmentShader.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 slideTexture;
varying vec2 v_texturePosition;
void main() {
// TODO: handle lighting.
gl_FragColor = texture2D(slideTexture, v_texturePosition);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -397,24 +397,137 @@ void Iris::finish() ...@@ -397,24 +397,137 @@ void Iris::finish()
namespace namespace
{ {
class SimpleTransition : public OGLTransitionImpl class ShaderTransition : public OGLTransitionImpl
{ {
public: protected:
SimpleTransition() ShaderTransition(const TransitionScene& rScene, const TransitionSettings& rSettings)
: OGLTransitionImpl() : OGLTransitionImpl(rScene, rSettings)
{ {}
private:
virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override;
virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) override;
virtual void finishTransition() override;
virtual GLuint makeShader() const;
void impl_setTextureUniforms();
virtual void impl_prepareTransition() = 0;
virtual void impl_finishTransition() = 0;
protected:
/** GLSL program object
*/
GLuint m_nProgramObject = 0;
};
void ShaderTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex,
double SlideWidthScale, double SlideHeightScale )
{
CHECK_GL_ERROR();
applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale );
if( m_nProgramObject ) {
GLint location = glGetUniformLocation( m_nProgramObject, "time" );
if( location != -1 ) {
glUniform1f( location, nTime );
}
} }
glActiveTexture( GL_TEXTURE2 );
glBindTexture( GL_TEXTURE_2D, glEnteringSlideTex );
glActiveTexture( GL_TEXTURE0 );
displaySlide( nTime, glLeavingSlideTex, getScene().getLeavingSlide(), SlideWidthScale, SlideHeightScale );
CHECK_GL_ERROR();
}
GLuint ShaderTransition::makeShader() const
{
return OpenGLHelper::LoadShaders( "basicVertexShader", "basicFragmentShader" );
}
void ShaderTransition::prepareTransition( sal_Int32 /* glLeavingSlideTex */, sal_Int32 /* glEnteringSlideTex */ )
{
m_nProgramObject = makeShader();
impl_setTextureUniforms();
impl_prepareTransition();
}
void ShaderTransition::finishTransition()
{
CHECK_GL_ERROR();
impl_finishTransition();
CHECK_GL_ERROR();
if( m_nProgramObject ) {
glDeleteProgram( m_nProgramObject );
m_nProgramObject = 0;
}
CHECK_GL_ERROR();
}
void ShaderTransition::impl_setTextureUniforms()
{
CHECK_GL_ERROR();
if( m_nProgramObject ) {
glUseProgram( m_nProgramObject );
CHECK_GL_ERROR();
GLint location = glGetUniformLocation( m_nProgramObject, "leavingSlideTexture" );
if( location != -1 ) {
glUniform1i( location, 0 ); // texture unit 0
CHECK_GL_ERROR();
}
location = glGetUniformLocation( m_nProgramObject, "enteringSlideTexture" );
if( location != -1 ) {
glUniform1i( location, 2 ); // texture unit 2
CHECK_GL_ERROR();
}
}
CHECK_GL_ERROR();
}
}
namespace
{
class SimpleTransition : public ShaderTransition
{
public:
SimpleTransition(const TransitionScene& rScene, const TransitionSettings& rSettings) SimpleTransition(const TransitionScene& rScene, const TransitionSettings& rSettings)
: OGLTransitionImpl(rScene, rSettings) : ShaderTransition(rScene, rSettings)
{ {
} }
private:
virtual void impl_finishTransition() override {}
virtual void impl_prepareTransition() override {}
virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override;
}; };
std::shared_ptr<OGLTransitionImpl> void SimpleTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex,
makeSimpleTransition() double SlideWidthScale, double SlideHeightScale )
{ {
return std::make_shared<SimpleTransition>(); CHECK_GL_ERROR();
applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale );
glActiveTexture( GL_TEXTURE2 );
glBindTexture( GL_TEXTURE_2D, glEnteringSlideTex );
glActiveTexture( GL_TEXTURE0 );
GLint location = -1;
if( m_nProgramObject )
location = glGetUniformLocation( m_nProgramObject, "slideTexture" );
if( location != -1 )
glUniform1f( location, 2 );
displaySlide( nTime, glLeavingSlideTex, getScene().getLeavingSlide(), SlideWidthScale, SlideHeightScale );
if( location != -1 )
glUniform1f( location, 0 );
displaySlide( nTime, glEnteringSlideTex, getScene().getEnteringSlide(), SlideWidthScale, SlideHeightScale );
CHECK_GL_ERROR();
} }
std::shared_ptr<OGLTransitionImpl> std::shared_ptr<OGLTransitionImpl>
...@@ -642,11 +755,11 @@ std::shared_ptr<OGLTransitionImpl> makeIris() ...@@ -642,11 +755,11 @@ std::shared_ptr<OGLTransitionImpl> makeIris()
namespace namespace
{ {
class RochadeTransition : public OGLTransitionImpl class RochadeTransition : public SimpleTransition
{ {
public: public:
RochadeTransition(const TransitionScene& rScene, const TransitionSettings& rSettings) RochadeTransition(const TransitionScene& rScene, const TransitionSettings& rSettings)
: OGLTransitionImpl(rScene, rSettings) : SimpleTransition(rScene, rSettings)
{} {}
private: private:
...@@ -735,10 +848,7 @@ std::shared_ptr<OGLTransitionImpl> makeRevolvingCircles( sal_uInt16 nCircles , s ...@@ -735,10 +848,7 @@ std::shared_ptr<OGLTransitionImpl> makeRevolvingCircles( sal_uInt16 nCircles , s
{ {
double dAngle(2*3.1415926/static_cast<double>( nPointsOnCircles )); double dAngle(2*3.1415926/static_cast<double>( nPointsOnCircles ));
if(nCircles < 2 || nPointsOnCircles < 4) if(nCircles < 2 || nPointsOnCircles < 4)
{ return makeNByMTileFlip(1,1);
makeNByMTileFlip(1,1);
return makeSimpleTransition();
}
float Radius(1.0/static_cast<double>( nCircles )); float Radius(1.0/static_cast<double>( nCircles ));
float dRadius(Radius); float dRadius(Radius);
float LastRadius(0.0); float LastRadius(0.0);
...@@ -1155,16 +1265,15 @@ void Primitive::pushTriangle(const glm::vec2& SlideLocation0,const glm::vec2& Sl ...@@ -1155,16 +1265,15 @@ void Primitive::pushTriangle(const glm::vec2& SlideLocation0,const glm::vec2& Sl
namespace namespace
{ {
class DiamondTransition : public OGLTransitionImpl class DiamondTransition : public SimpleTransition
{ {
public: public:
DiamondTransition(const TransitionScene& rScene, const TransitionSettings& rSettings) DiamondTransition(const TransitionScene& rScene, const TransitionSettings& rSettings)
: OGLTransitionImpl(rScene, rSettings) : SimpleTransition(rScene, rSettings)
{} {}
private: private:
virtual void prepare( double nTime, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight ) override; virtual void prepare( double nTime, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight ) override;
// mmPrepare = &OGLTransitionImpl::prepareDiamond;
}; };
void DiamondTransition::prepare( double nTime, double /* SlideWidth */, double /* SlideHeight */, double /* DispWidth */, double /* DispHeight */ ) void DiamondTransition::prepare( double nTime, double /* SlideWidth */, double /* SlideHeight */, double /* DispWidth */, double /* DispHeight */ )
...@@ -1258,11 +1367,11 @@ std::shared_ptr<OGLTransitionImpl> makeVenetianBlinds( bool vertical, int parts ...@@ -1258,11 +1367,11 @@ std::shared_ptr<OGLTransitionImpl> makeVenetianBlinds( bool vertical, int parts
namespace namespace
{ {
class FadeSmoothlyTransition : public OGLTransitionImpl class FadeSmoothlyTransition : public SimpleTransition
{ {
public: public:
FadeSmoothlyTransition(const TransitionScene& rScene, const TransitionSettings& rSettings) FadeSmoothlyTransition(const TransitionScene& rScene, const TransitionSettings& rSettings)
: OGLTransitionImpl(rScene, rSettings) : SimpleTransition(rScene, rSettings)
{} {}
private: private:
...@@ -1339,11 +1448,11 @@ std::shared_ptr<OGLTransitionImpl> makeFadeSmoothly() ...@@ -1339,11 +1448,11 @@ std::shared_ptr<OGLTransitionImpl> makeFadeSmoothly()
namespace namespace
{ {
class FadeThroughBlackTransition : public OGLTransitionImpl class FadeThroughBlackTransition : public SimpleTransition
{ {
public: public:
FadeThroughBlackTransition(const TransitionScene& rScene, const TransitionSettings& rSettings) FadeThroughBlackTransition(const TransitionScene& rScene, const TransitionSettings& rSettings)
: OGLTransitionImpl(rScene, rSettings) : SimpleTransition(rScene, rSettings)
{} {}
private: private:
...@@ -1410,67 +1519,25 @@ std::shared_ptr<OGLTransitionImpl> makeFadeThroughBlack() ...@@ -1410,67 +1519,25 @@ std::shared_ptr<OGLTransitionImpl> makeFadeThroughBlack()
namespace namespace
{ {
class ShaderTransition : public OGLTransitionImpl class PermTextureTransition : public ShaderTransition
{ {
protected: protected:
ShaderTransition(const TransitionScene& rScene, const TransitionSettings& rSettings) PermTextureTransition(const TransitionScene& rScene, const TransitionSettings& rSettings)
: OGLTransitionImpl(rScene, rSettings) : ShaderTransition(rScene, rSettings)
, m_nProgramObject(0)
, m_nHelperTexture(0) , m_nHelperTexture(0)
{} {}
private: virtual void impl_finishTransition() override;
virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override; virtual void impl_prepareTransition() override;
virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) override;
virtual void finishTransition() override;
virtual GLuint makeShader() = 0;
void impl_preparePermShader();
private: private:
/** GLSL program object
*/
GLuint m_nProgramObject;
/** various data */ /** various data */
GLuint m_nHelperTexture; GLuint m_nHelperTexture;
}; };
void ShaderTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, void PermTextureTransition::impl_finishTransition()
double SlideWidthScale, double SlideHeightScale )
{ {
CHECK_GL_ERROR(); CHECK_GL_ERROR();
applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale );
if( m_nProgramObject ) {
GLint location = glGetUniformLocation( m_nProgramObject, "time" );
if( location != -1 ) {
glUniform1f( location, nTime );
}
}
glActiveTexture( GL_TEXTURE2 );
glBindTexture( GL_TEXTURE_2D, glEnteringSlideTex );
glActiveTexture( GL_TEXTURE0 );
displaySlide( nTime, glLeavingSlideTex, getScene().getLeavingSlide(), SlideWidthScale, SlideHeightScale );
CHECK_GL_ERROR();
}
void ShaderTransition::prepareTransition( sal_Int32 /* glLeavingSlideTex */, sal_Int32 /* glEnteringSlideTex */ )
{
m_nProgramObject = makeShader();
impl_preparePermShader();
}
void ShaderTransition::finishTransition()
{
CHECK_GL_ERROR();
if( m_nProgramObject ) {
glDeleteProgram( m_nProgramObject );
m_nProgramObject = 0;
}
if ( m_nHelperTexture ) if ( m_nHelperTexture )
{ {
glDeleteTextures( 1, &m_nHelperTexture ); glDeleteTextures( 1, &m_nHelperTexture );
...@@ -1514,7 +1581,7 @@ int permutation256 [256]= { ...@@ -1514,7 +1581,7 @@ int permutation256 [256]= {
116, 171, 99, 202, 7, 107, 253, 108 116, 171, 99, 202, 7, 107, 253, 108
}; };
void initPermTexture(GLuint *texID) static void initPermTexture(GLuint *texID)
{ {
CHECK_GL_ERROR(); CHECK_GL_ERROR();
glGenTextures(1, texID); glGenTextures(1, texID);
...@@ -1538,20 +1605,11 @@ void initPermTexture(GLuint *texID) ...@@ -1538,20 +1605,11 @@ void initPermTexture(GLuint *texID)
CHECK_GL_ERROR(); CHECK_GL_ERROR();
} }
void ShaderTransition::impl_preparePermShader() void PermTextureTransition::impl_prepareTransition()
{ {
CHECK_GL_ERROR(); CHECK_GL_ERROR();
if( m_nProgramObject ) { if( m_nProgramObject ) {
glUseProgram( m_nProgramObject ); GLint location = glGetUniformLocation( m_nProgramObject, "permTexture" );
CHECK_GL_ERROR();
GLint location = glGetUniformLocation( m_nProgramObject, "leavingSlideTexture" );
if( location != -1 ) {
glUniform1i( location, 0 ); // texture unit 0
CHECK_GL_ERROR();
}
location = glGetUniformLocation( m_nProgramObject, "permTexture" );
if( location != -1 ) { if( location != -1 ) {
glActiveTexture(GL_TEXTURE1); glActiveTexture(GL_TEXTURE1);
CHECK_GL_ERROR(); CHECK_GL_ERROR();
...@@ -1564,12 +1622,6 @@ void ShaderTransition::impl_preparePermShader() ...@@ -1564,12 +1622,6 @@ void ShaderTransition::impl_preparePermShader()
glUniform1i( location, 1 ); // texture unit 1 glUniform1i( location, 1 ); // texture unit 1
CHECK_GL_ERROR(); CHECK_GL_ERROR();
} }
location = glGetUniformLocation( m_nProgramObject, "enteringSlideTexture" );
if( location != -1 ) {
glUniform1i( location, 2 ); // texture unit 2
CHECK_GL_ERROR();
}
} }
CHECK_GL_ERROR(); CHECK_GL_ERROR();
} }
...@@ -1579,18 +1631,18 @@ void ShaderTransition::impl_preparePermShader() ...@@ -1579,18 +1631,18 @@ void ShaderTransition::impl_preparePermShader()
namespace namespace
{ {
class StaticNoiseTransition : public ShaderTransition class StaticNoiseTransition : public PermTextureTransition
{ {
public: public:
StaticNoiseTransition(const TransitionScene& rScene, const TransitionSettings& rSettings) StaticNoiseTransition(const TransitionScene& rScene, const TransitionSettings& rSettings)
: ShaderTransition(rScene, rSettings) : PermTextureTransition(rScene, rSettings)
{} {}
private: private:
virtual GLuint makeShader() override; virtual GLuint makeShader() const override;
}; };
GLuint StaticNoiseTransition::makeShader() GLuint StaticNoiseTransition::makeShader() const
{ {
return OpenGLHelper::LoadShaders( "basicVertexShader", "staticFragmentShader" ); return OpenGLHelper::LoadShaders( "basicVertexShader", "staticFragmentShader" );
} }
...@@ -1630,18 +1682,18 @@ std::shared_ptr<OGLTransitionImpl> makeStatic() ...@@ -1630,18 +1682,18 @@ std::shared_ptr<OGLTransitionImpl> makeStatic()
namespace namespace
{ {
class DissolveTransition : public ShaderTransition class DissolveTransition : public PermTextureTransition
{ {
public: public:
DissolveTransition(const TransitionScene& rScene, const TransitionSettings& rSettings) DissolveTransition(const TransitionScene& rScene, const TransitionSettings& rSettings)
: ShaderTransition(rScene, rSettings) : PermTextureTransition(rScene, rSettings)
{} {}
private: private:
virtual GLuint makeShader() override; virtual GLuint makeShader() const override;
}; };
GLuint DissolveTransition::makeShader() GLuint DissolveTransition::makeShader() const
{ {
return OpenGLHelper::LoadShaders( "basicVertexShader", "dissolveFragmentShader" ); return OpenGLHelper::LoadShaders( "basicVertexShader", "dissolveFragmentShader" );
} }
...@@ -1681,11 +1733,11 @@ std::shared_ptr<OGLTransitionImpl> makeDissolve() ...@@ -1681,11 +1733,11 @@ std::shared_ptr<OGLTransitionImpl> makeDissolve()
namespace namespace
{ {
class VortexTransition : public ShaderTransition class VortexTransition : public PermTextureTransition
{ {
public: public:
VortexTransition(const TransitionScene& rScene, const TransitionSettings& rSettings, int nNX, int nNY) VortexTransition(const TransitionScene& rScene, const TransitionSettings& rSettings, int nNX, int nNY)
: ShaderTransition(rScene, rSettings) : PermTextureTransition(rScene, rSettings)
, mnTileInfoLocation(0) , mnTileInfoLocation(0)
, mnTileInfoBuffer(0) , mnTileInfoBuffer(0)
, maNumTiles(nNX,nNY) , maNumTiles(nNX,nNY)
...@@ -1698,7 +1750,9 @@ private: ...@@ -1698,7 +1750,9 @@ private:
virtual void finish( double nTime, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight ) override; virtual void finish( double nTime, double SlideWidth, double SlideHeight, double DispWidth, double DispHeight ) override;
virtual GLuint makeShader() override; virtual GLuint makeShader() const override;
virtual void impl_prepareTransition() override;
GLint mnTileInfoLocation; GLint mnTileInfoLocation;
GLuint mnTileInfoBuffer; GLuint mnTileInfoBuffer;
...@@ -1728,19 +1782,26 @@ void VortexTransition::finish( double, double, double, double, double ) ...@@ -1728,19 +1782,26 @@ void VortexTransition::finish( double, double, double, double, double )
glEnable(GL_CULL_FACE); glEnable(GL_CULL_FACE);
} }
GLuint VortexTransition::makeShader() GLuint VortexTransition::makeShader() const
{ {
GLuint nProgram = OpenGLHelper::LoadShaders( "vortexVertexShader", "vortexFragmentShader" ); return OpenGLHelper::LoadShaders( "vortexVertexShader", "vortexFragmentShader" );
}
if (nProgram) void VortexTransition::impl_prepareTransition()
{
CHECK_GL_ERROR();
PermTextureTransition::impl_prepareTransition();
CHECK_GL_ERROR();
if (m_nProgramObject)
{ {
mnTileInfoLocation = glGetAttribLocation(nProgram, "tileInfo"); mnTileInfoLocation = glGetAttribLocation(m_nProgramObject, "tileInfo");
CHECK_GL_ERROR(); CHECK_GL_ERROR();
glUseProgram(nProgram); glUseProgram(m_nProgramObject);
CHECK_GL_ERROR(); CHECK_GL_ERROR();
GLint nNumTilesLocation = glGetUniformLocation(nProgram, "numTiles"); GLint nNumTilesLocation = glGetUniformLocation(m_nProgramObject, "numTiles");
CHECK_GL_ERROR(); CHECK_GL_ERROR();
glUniform2iv(nNumTilesLocation, 1, glm::value_ptr(maNumTiles)); glUniform2iv(nNumTilesLocation, 1, glm::value_ptr(maNumTiles));
...@@ -1777,8 +1838,6 @@ GLuint VortexTransition::makeShader() ...@@ -1777,8 +1838,6 @@ GLuint VortexTransition::makeShader()
glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ARRAY_BUFFER, 0);
CHECK_GL_ERROR(); CHECK_GL_ERROR();
return nProgram;
} }
std::shared_ptr<OGLTransitionImpl> std::shared_ptr<OGLTransitionImpl>
...@@ -1833,28 +1892,31 @@ public: ...@@ -1833,28 +1892,31 @@ public:
} }
private: private:
virtual GLuint makeShader() override; virtual GLuint makeShader() const override;
virtual void impl_prepareTransition() override;
virtual void impl_finishTransition() override {}
glm::vec2 maCenter; glm::vec2 maCenter;
}; };
GLuint RippleTransition::makeShader() GLuint RippleTransition::makeShader() const
{ {
GLuint nProgram = OpenGLHelper::LoadShaders( "basicVertexShader", "rippleFragmentShader" ); return OpenGLHelper::LoadShaders( "basicVertexShader", "rippleFragmentShader" );
}
if (nProgram) void RippleTransition::impl_prepareTransition()
{
if (m_nProgramObject)
{ {
glUseProgram(nProgram); glUseProgram(m_nProgramObject);
CHECK_GL_ERROR(); CHECK_GL_ERROR();
GLint nCenterLocation = glGetUniformLocation(nProgram, "center"); GLint nCenterLocation = glGetUniformLocation(m_nProgramObject, "center");
CHECK_GL_ERROR(); CHECK_GL_ERROR();
glUniform2fv(nCenterLocation, 1, glm::value_ptr(maCenter)); glUniform2fv(nCenterLocation, 1, glm::value_ptr(maCenter));
CHECK_GL_ERROR(); CHECK_GL_ERROR();
} }
return nProgram;
} }
std::shared_ptr<OGLTransitionImpl> std::shared_ptr<OGLTransitionImpl>
......
...@@ -168,8 +168,6 @@ protected: ...@@ -168,8 +168,6 @@ protected:
, maSettings(rSettings) , maSettings(rSettings)
{} {}
OGLTransitionImpl() {}
TransitionScene const& getScene() const TransitionScene const& getScene() const
{ {
return maScene; return maScene;
......
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