From c046565dd4c68263bf56c591c4761265b072fd0c Mon Sep 17 00:00:00 2001 From: Kimmo Hoikka Date: Wed, 26 Apr 2017 18:51:43 +0100 Subject: [PATCH] Cleanup: Remove handling for default shader as it has been long gone from dali-core Change-Id: I8fe8fe593b562e45f8c9a2730a81fdafdd224977 --- dali/internal/render/common/render-algorithms.cpp | 5 -- dali/internal/render/common/render-algorithms.h | 3 - dali/internal/render/common/render-manager.cpp | 96 +++++++++------------- dali/internal/render/common/render-manager.h | 9 +- dali/internal/render/renderers/render-renderer.cpp | 11 +-- dali/internal/render/renderers/render-renderer.h | 2 - dali/internal/update/manager/update-manager.cpp | 13 --- 7 files changed, 41 insertions(+), 98 deletions(-) diff --git a/dali/internal/render/common/render-algorithms.cpp b/dali/internal/render/common/render-algorithms.cpp index f85097e..660a9a6 100644 --- a/dali/internal/render/common/render-algorithms.cpp +++ b/dali/internal/render/common/render-algorithms.cpp @@ -293,7 +293,6 @@ inline void SetupDepthBuffer( const RenderItem& item, Context& context, bool dep * @brief Process a render-list. * @param[in] renderList The render-list to process. * @param[in] context The GL context. - * @param[in] defaultShader The default shader to use. * @param[in] buffer The current render buffer index (previous update buffer) * @param[in] viewMatrix The view matrix from the appropriate camera. * @param[in] projectionMatrix The projection matrix from the appropriate camera. @@ -301,7 +300,6 @@ inline void SetupDepthBuffer( const RenderItem& item, Context& context, bool dep inline void ProcessRenderList( const RenderList& renderList, Context& context, - SceneGraph::Shader& defaultShader, BufferIndex bufferIndex, const Matrix& viewMatrix, const Matrix& projectionMatrix ) @@ -339,7 +337,6 @@ inline void ProcessRenderList( item.mRenderer->Render( context, bufferIndex, *item.mNode, - defaultShader, item.mModelMatrix, item.mModelViewMatrix, viewMatrix, @@ -351,7 +348,6 @@ inline void ProcessRenderList( void ProcessRenderInstruction( const RenderInstruction& instruction, Context& context, - SceneGraph::Shader& defaultShader, BufferIndex bufferIndex ) { DALI_PRINT_RENDER_INSTRUCTION( instruction, bufferIndex ); @@ -376,7 +372,6 @@ void ProcessRenderInstruction( const RenderInstruction& instruction, { ProcessRenderList( *renderList, context, - defaultShader, bufferIndex, *viewMatrix, *projectionMatrix ); diff --git a/dali/internal/render/common/render-algorithms.h b/dali/internal/render/common/render-algorithms.h index b258dd6..0346ef7 100644 --- a/dali/internal/render/common/render-algorithms.h +++ b/dali/internal/render/common/render-algorithms.h @@ -30,7 +30,6 @@ class Context; namespace SceneGraph { class RenderInstruction; -class Shader; class TextureCache; } @@ -41,12 +40,10 @@ namespace Render * Process a render-instruction. * @param[in] instruction The render-instruction to process. * @param[in] context The GL context. - * @param[in] defaultShader The default shader. * @param[in] bufferIndex The current render buffer index (previous update buffer) */ void ProcessRenderInstruction( const SceneGraph::RenderInstruction& instruction, Context& context, - SceneGraph::Shader& defaultShader, BufferIndex bufferIndex ); } // namespace Render diff --git a/dali/internal/render/common/render-manager.cpp b/dali/internal/render/common/render-manager.cpp index e9f7b93..b44847d 100644 --- a/dali/internal/render/common/render-manager.cpp +++ b/dali/internal/render/common/render-manager.cpp @@ -90,8 +90,6 @@ struct RenderManager::Impl textureContainer(), frameBufferContainer(), renderersAdded( false ), - firstRenderCompleted( false ), - defaultShader( NULL ), programController( glAbstraction ) { } @@ -155,8 +153,6 @@ struct RenderManager::Impl RenderTrackerContainer mRenderTrackers; ///< List of render trackers - bool firstRenderCompleted; ///< False until the first render is done - Shader* defaultShader; ///< Default shader to use ProgramController programController; ///< Owner of the GL programs }; @@ -477,11 +473,6 @@ void RenderManager::RemoveRenderTracker( Render::RenderTracker* renderTracker ) mImpl->RemoveRenderTracker(renderTracker); } -void RenderManager::SetDefaultShader( Shader* shader ) -{ - mImpl->defaultShader = shader; -} - ProgramCache* RenderManager::GetProgramCache() { return &(mImpl->programController); @@ -500,56 +491,46 @@ bool RenderManager::Render( Integration::RenderStatus& status ) // Process messages queued during previous update mImpl->renderQueue.ProcessMessages( mImpl->renderBufferIndex ); - // No need to make any gl calls if we've done 1st glClear & don't have any renderers to render during startup. - if( !mImpl->firstRenderCompleted || mImpl->renderersAdded ) + // switch rendering to adaptor provided (default) buffer + mImpl->context.BindFramebuffer( GL_FRAMEBUFFER, 0 ); + + mImpl->context.Viewport( mImpl->defaultSurfaceRect.x, + mImpl->defaultSurfaceRect.y, + mImpl->defaultSurfaceRect.width, + mImpl->defaultSurfaceRect.height ); + + mImpl->context.ClearColor( mImpl->backgroundColor.r, + mImpl->backgroundColor.g, + mImpl->backgroundColor.b, + mImpl->backgroundColor.a ); + + mImpl->context.ClearStencil( 0 ); + + // Clear the entire color, depth and stencil buffers for the default framebuffer. + // It is important to clear all 3 buffers, for performance on deferred renderers like Mali + // e.g. previously when the depth & stencil buffers were NOT cleared, it caused the DDK to exceed a "vertex count limit", + // and then stall. That problem is only noticeable when rendering a large number of vertices per frame. + mImpl->context.SetScissorTest( false ); + mImpl->context.ColorMask( true ); + mImpl->context.DepthMask( true ); + mImpl->context.StencilMask( 0xFF ); // 8 bit stencil mask, all 1's + mImpl->context.Clear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT, Context::FORCE_CLEAR ); + + // reset the program matrices for all programs once per frame + // this ensures we will set view and projection matrix once per program per camera + mImpl->programController.ResetProgramMatrices(); + + size_t count = mImpl->instructions.Count( mImpl->renderBufferIndex ); + for ( size_t i = 0; i < count; ++i ) { - // switch rendering to adaptor provided (default) buffer - mImpl->context.BindFramebuffer( GL_FRAMEBUFFER, 0 ); - - mImpl->context.Viewport( mImpl->defaultSurfaceRect.x, - mImpl->defaultSurfaceRect.y, - mImpl->defaultSurfaceRect.width, - mImpl->defaultSurfaceRect.height ); - - mImpl->context.ClearColor( mImpl->backgroundColor.r, - mImpl->backgroundColor.g, - mImpl->backgroundColor.b, - mImpl->backgroundColor.a ); - - mImpl->context.ClearStencil( 0 ); - - // Clear the entire color, depth and stencil buffers for the default framebuffer. - // It is important to clear all 3 buffers, for performance on deferred renderers like Mali - // e.g. previously when the depth & stencil buffers were NOT cleared, it caused the DDK to exceed a "vertex count limit", - // and then stall. That problem is only noticeable when rendering a large number of vertices per frame. - mImpl->context.SetScissorTest( false ); - mImpl->context.ColorMask( true ); - mImpl->context.DepthMask( true ); - mImpl->context.StencilMask( 0xFF ); // 8 bit stencil mask, all 1's - mImpl->context.Clear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT, Context::FORCE_CLEAR ); - - // reset the program matrices for all programs once per frame - // this ensures we will set view and projection matrix once per program per camera - mImpl->programController.ResetProgramMatrices(); - - // if we don't have default shader, no point doing the render calls - if( mImpl->defaultShader ) - { - size_t count = mImpl->instructions.Count( mImpl->renderBufferIndex ); - for ( size_t i = 0; i < count; ++i ) - { - RenderInstruction& instruction = mImpl->instructions.At( mImpl->renderBufferIndex, i ); + RenderInstruction& instruction = mImpl->instructions.At( mImpl->renderBufferIndex, i ); - DoRender( instruction, *mImpl->defaultShader ); - } - GLenum attachments[] = { GL_DEPTH, GL_STENCIL }; - mImpl->context.InvalidateFramebuffer(GL_FRAMEBUFFER, 2, attachments); - - mImpl->UpdateTrackers(); - - mImpl->firstRenderCompleted = true; - } + DoRender( instruction ); } + GLenum attachments[] = { GL_DEPTH, GL_STENCIL }; + mImpl->context.InvalidateFramebuffer(GL_FRAMEBUFFER, 2, attachments); + + mImpl->UpdateTrackers(); //Notify RenderGeometries that rendering has finished for ( GeometryOwnerIter iter = mImpl->geometryContainer.Begin(); iter != mImpl->geometryContainer.End(); ++iter ) @@ -569,7 +550,7 @@ bool RenderManager::Render( Integration::RenderStatus& status ) return false; } -void RenderManager::DoRender( RenderInstruction& instruction, Shader& defaultShader ) +void RenderManager::DoRender( RenderInstruction& instruction ) { Rect viewportRect; Vector4 clearColor; @@ -634,7 +615,6 @@ void RenderManager::DoRender( RenderInstruction& instruction, Shader& defaultSha Render::ProcessRenderInstruction( instruction, mImpl->context, - defaultShader, mImpl->renderBufferIndex ); if( instruction.mRenderTracker && ( instruction.mFrameBuffer != NULL ) ) diff --git a/dali/internal/render/common/render-manager.h b/dali/internal/render/common/render-manager.h index 60c58f8..9d970cb 100644 --- a/dali/internal/render/common/render-manager.h +++ b/dali/internal/render/common/render-manager.h @@ -310,12 +310,6 @@ public: void RemoveRenderTracker( Render::RenderTracker* renderTracker ); /** - * Set the default shader that is to be used in absence of custom shader - * @param[in] shader that is the default one - */ - void SetDefaultShader( Shader* shader ); - - /** * returns the Program controller for sending program messages * @return the ProgramController */ @@ -335,9 +329,8 @@ private: /** * Helper to process a single RenderInstruction. * @param[in] instruction A description of the rendering operation. - * @param[in] defaultShader default shader to use. */ - void DoRender( RenderInstruction& instruction, Shader& defaultShader ); + void DoRender( RenderInstruction& instruction ); private: diff --git a/dali/internal/render/renderers/render-renderer.cpp b/dali/internal/render/renderers/render-renderer.cpp index b59eb20..97f45ee 100644 --- a/dali/internal/render/renderers/render-renderer.cpp +++ b/dali/internal/render/renderers/render-renderer.cpp @@ -524,7 +524,6 @@ StencilOperation::Type Renderer::GetStencilOperationOnZPass() const void Renderer::Render( Context& context, BufferIndex bufferIndex, const SceneGraph::NodeDataProvider& node, - SceneGraph::Shader& defaultShader, const Matrix& modelMatrix, const Matrix& modelViewMatrix, const Matrix& viewMatrix, @@ -536,14 +535,8 @@ void Renderer::Render( Context& context, Program* program = mRenderDataProvider->GetShader().GetProgram(); if( !program ) { - // if program is NULL it means this is a custom shader with non matching geometry type so we need to use default shaders program - program = defaultShader.GetProgram(); - DALI_ASSERT_DEBUG( program && "Default shader should always have a program available." ); - if( !program ) - { - DALI_LOG_ERROR( "Failed to get program for shader at address %p.\n", (void*)&mRenderDataProvider->GetShader() ); - return; - } + DALI_LOG_ERROR( "Failed to get program for shader at address %p.\n", (void*)&mRenderDataProvider->GetShader() ); + return; } //Set cull face mode diff --git a/dali/internal/render/renderers/render-renderer.h b/dali/internal/render/renderers/render-renderer.h index 6332d52..50a1d5d 100644 --- a/dali/internal/render/renderers/render-renderer.h +++ b/dali/internal/render/renderers/render-renderer.h @@ -345,7 +345,6 @@ public: * @param[in] context The context used for rendering * @param[in] bufferIndex The index of the previous update buffer. * @param[in] node The node using this renderer - * @param[in] defaultShader in case there is no custom shader * @param[in] modelViewMatrix The model-view matrix. * @param[in] viewMatrix The view matrix. * @param[in] projectionMatrix The projection matrix. @@ -355,7 +354,6 @@ public: void Render( Context& context, BufferIndex bufferIndex, const SceneGraph::NodeDataProvider& node, - SceneGraph::Shader& defaultShader, const Matrix& modelMatrix, const Matrix& modelViewMatrix, const Matrix& viewMatrix, diff --git a/dali/internal/update/manager/update-manager.cpp b/dali/internal/update/manager/update-manager.cpp index 39e8a31..224f972 100644 --- a/dali/internal/update/manager/update-manager.cpp +++ b/dali/internal/update/manager/update-manager.cpp @@ -509,19 +509,6 @@ void UpdateManager::AddShader( Shader* shader ) { DALI_ASSERT_DEBUG( NULL != shader ); - if( mImpl->shaders.Count() == 0 ) - { - // the first added shader becomes our default shader - // Construct message in the render queue memory; note that delete should not be called on the return value - typedef MessageValue1< RenderManager, Shader* > DerivedType; - - // Reserve some memory inside the render queue - unsigned int* slot = mImpl->renderQueue.ReserveMessageSlot( mSceneGraphBuffers.GetUpdateBufferIndex(), sizeof( DerivedType ) ); - - // Construct message in the render queue memory; note that delete should not be called on the return value - new (slot) DerivedType( &mImpl->renderManager, &RenderManager::SetDefaultShader, shader ); - } - mImpl->shaders.PushBack( shader ); } -- 2.7.4