diff options
author | Emmanuel Gil Peyrot <emmanuel.peyrot@collabora.com> | 2016-02-09 09:27:46 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@collabora.com> | 2016-02-09 12:15:57 +0000 |
commit | 0163501d57725b01037248922949029077b37530 (patch) | |
tree | 6e6ed85381929fe769f16533e6e24cba213078d1 /slideshow | |
parent | 00acf44e54d600a2051d7011dfaa408c2cd5060c (diff) |
slideshow: Only retrieve each uniform location once
Change-Id: I882b1cd55062f1e41f901bf77383f7f4bf9ec097
Diffstat (limited to 'slideshow')
-rw-r--r-- | slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx | 36 | ||||
-rw-r--r-- | slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.hxx | 4 |
2 files changed, 18 insertions, 22 deletions
diff --git a/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx b/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx index 7816ca9fca69..d5a56741edba 100644 --- a/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx +++ b/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.cxx @@ -169,6 +169,7 @@ bool OGLTransitionImpl::prepare( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteri m_nPrimitiveTransformLocation = glGetUniformLocation( m_nProgramObject, "u_primitiveTransformMatrix" ); m_nSceneTransformLocation = glGetUniformLocation( m_nProgramObject, "u_sceneTransformMatrix" ); m_nOperationsTransformLocation = glGetUniformLocation( m_nProgramObject, "u_operationsTransformMatrix" ); + m_nTimeLocation = glGetUniformLocation( m_nProgramObject, "time" ); glGenVertexArrays(1, &m_nVertexArrayObject); glBindVertexArray(m_nVertexArrayObject); @@ -250,9 +251,7 @@ void OGLTransitionImpl::displaySlides_( double nTime, sal_Int32 glLeavingSlideTe CHECK_GL_ERROR(); applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale ); - GLint location = glGetUniformLocation( m_nProgramObject, "time" ); - if( location != -1 ) - glUniform1f( location, nTime ); + glUniform1f( m_nTimeLocation, nTime ); glActiveTexture( GL_TEXTURE2 ); glBindTexture( GL_TEXTURE_2D, glEnteringSlideTex ); @@ -1547,8 +1546,6 @@ class VortexTransition : public PermTextureTransition public: VortexTransition(const TransitionScene& rScene, const TransitionSettings& rSettings, int nNX, int nNY) : PermTextureTransition(rScene, rSettings) - , mnTileInfoLocation(0) - , mnTileInfoBuffer(0) , maNumTiles(nNX,nNY) { mvTileInfo.resize(6*maNumTiles.x*maNumTiles.y); @@ -1563,8 +1560,9 @@ private: virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override; - GLint mnTileInfoLocation; - GLuint mnTileInfoBuffer; + GLint mnSlideLocation = -1; + GLint mnTileInfoLocation = -1; + GLuint mnTileInfoBuffer = 0u; glm::ivec2 maNumTiles; @@ -1595,6 +1593,9 @@ void VortexTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 PermTextureTransition::prepareTransition( glLeavingSlideTex, glEnteringSlideTex ); CHECK_GL_ERROR(); + mnSlideLocation = glGetUniformLocation(m_nProgramObject, "slide"); + CHECK_GL_ERROR(); + mnTileInfoLocation = glGetAttribLocation(m_nProgramObject, "tileInfo"); CHECK_GL_ERROR(); @@ -1640,18 +1641,11 @@ void VortexTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlideTex { CHECK_GL_ERROR(); applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale ); + glUniform1f( m_nTimeLocation, nTime ); - GLint location = glGetUniformLocation( m_nProgramObject, "time" ); - if( location != -1 ) - glUniform1f( location, nTime ); - - location = glGetUniformLocation( m_nProgramObject, "slide" ); - - if( location != -1 ) - glUniform1f( location, 0.0 ); + glUniform1f( mnSlideLocation, 0.0 ); displaySlide( nTime, glLeavingSlideTex, getScene().getLeavingSlide(), SlideWidthScale, SlideHeightScale ); - if( location != -1 ) - glUniform1f( location, 1.0 ); + glUniform1f( mnSlideLocation, 1.0 ); displaySlide( nTime, glEnteringSlideTex, getScene().getEnteringSlide(), SlideWidthScale, SlideHeightScale ); CHECK_GL_ERROR(); } @@ -1910,9 +1904,8 @@ private: virtual void prepareTransition( sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex ) override; virtual void displaySlides_( double nTime, sal_Int32 glLeavingSlideTex, sal_Int32 glEnteringSlideTex, double SlideWidthScale, double SlideHeightScale ) override; - GLint maHexagonSizeLocation = 0; - GLint maTimeLocation = 0; - GLint maSelectedTextureLocation = 0; + GLint maHexagonSizeLocation = -1; + GLint maSelectedTextureLocation = -1; }; GLuint HoneycombTransition::makeShader() const @@ -1927,7 +1920,6 @@ void HoneycombTransition::prepareTransition( sal_Int32 glLeavingSlideTex, sal_In CHECK_GL_ERROR(); maHexagonSizeLocation = glGetUniformLocation(m_nProgramObject, "hexagonSize"); - maTimeLocation = glGetUniformLocation( m_nProgramObject, "time" ); maSelectedTextureLocation = glGetUniformLocation( m_nProgramObject, "selectedTexture" ); CHECK_GL_ERROR(); @@ -1942,7 +1934,7 @@ void HoneycombTransition::displaySlides_( double nTime, sal_Int32 glLeavingSlide { CHECK_GL_ERROR(); applyOverallOperations( nTime, SlideWidthScale, SlideHeightScale ); - glUniform1f( maTimeLocation, nTime ); + glUniform1f( m_nTimeLocation, nTime ); // The back (entering) slide needs to be drawn before the front (leaving) one in order for blending to work. diff --git a/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.hxx b/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.hxx index d8cbbfeeb102..449a72fc81f5 100644 --- a/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.hxx +++ b/slideshow/source/engine/OGLTrans/generic/OGLTrans_TransitionImpl.hxx @@ -240,6 +240,10 @@ protected: /** VBO in which to put primitive data */ GLuint m_nVertexBufferObject = 0u; + + /** Location of the "time" uniform + */ + GLint m_nTimeLocation = -1; }; |