From 0fb5f4124e065cb93c2278d96260759fc463a51b Mon Sep 17 00:00:00 2001 From: Ferran Sole Date: Mon, 14 Nov 2016 09:58:11 +0000 Subject: [PATCH] Check if number of textures match active samplers * Check was happening before the shader was loaded * Removed shader lazy compilation. (Now, program gets compiled as soon as it is created) * Check if number of textures match number of active samplers is done in Renderer::SetRenderDataProvider (Program should be already loaded at that point) Change-Id: Ic110f9ee9af7cd16f8a791923fd71e391a4dd176 --- dali/internal/render/renderers/render-renderer.cpp | 10 ++++++++++ dali/internal/render/shaders/program.cpp | 8 +------- dali/internal/update/rendering/scene-graph-renderer.cpp | 17 ++++------------- 3 files changed, 15 insertions(+), 20 deletions(-) diff --git a/dali/internal/render/renderers/render-renderer.cpp b/dali/internal/render/renderers/render-renderer.cpp index 2a15906..42d748a 100644 --- a/dali/internal/render/renderers/render-renderer.cpp +++ b/dali/internal/render/renderers/render-renderer.cpp @@ -176,6 +176,16 @@ void Renderer::SetRenderDataProvider( SceneGraph::RenderDataProvider* dataProvid { mRenderDataProvider = dataProvider; mUpdateAttributesLocation = true; + + //Check that the number of textures match the number of samplers in the shader + size_t textureCount = dataProvider->GetTextures().size() + dataProvider->GetNewTextures().size(); + Program* program = dataProvider->GetShader().GetProgram(); + if( program && program->GetActiveSamplerCount() != textureCount ) + { + DALI_LOG_ERROR("The number of active samplers in the shader(%lu) does not match the number of textures in the TextureSet(%lu)\n", + program->GetActiveSamplerCount(), + textureCount ); + } } void Renderer::SetGeometry( Render::Geometry* geometry ) diff --git a/dali/internal/render/shaders/program.cpp b/dali/internal/render/shaders/program.cpp index a41c694..e769a81 100644 --- a/dali/internal/render/shaders/program.cpp +++ b/dali/internal/render/shaders/program.cpp @@ -111,8 +111,7 @@ Program* Program::New( ProgramCache& cache, Internal::ShaderDataPtr shaderData, { // program not found so create it program = new Program( cache, shaderData, modifiesGeometry ); - - // we want to lazy load programs so dont do a Load yet, it gets done in Use() + program->Load(); cache.AddProgram( shaderHash, program ); } @@ -121,11 +120,6 @@ Program* Program::New( ProgramCache& cache, Internal::ShaderDataPtr shaderData, void Program::Use() { - if ( !mLinked ) - { - Load(); - } - if ( mLinked ) { if ( this != mCache.GetCurrentProgram() ) diff --git a/dali/internal/update/rendering/scene-graph-renderer.cpp b/dali/internal/update/rendering/scene-graph-renderer.cpp index 331a93d..f76b183 100644 --- a/dali/internal/update/rendering/scene-graph-renderer.cpp +++ b/dali/internal/update/rendering/scene-graph-renderer.cpp @@ -586,16 +586,6 @@ RenderDataProvider* Renderer::NewRenderDataProvider() if( mTextureSet ) { size_t textureCount = mTextureSet->GetTextureCount(); - size_t newTextureCount = mTextureSet->GetNewTextureCount(); - - Program* program = mShader->GetProgram(); - if( program && program->GetActiveSamplerCount() != textureCount + newTextureCount ) - { - DALI_LOG_ERROR("The number of active samplers in the shader(%lu) does not match the number of textures in the TextureSet(%lu)\n", - program->GetActiveSamplerCount(), - textureCount + newTextureCount ); - } - dataProvider->mTextures.resize( textureCount ); dataProvider->mSamplers.resize( textureCount ); for( unsigned int i(0); imSamplers[i] = mTextureSet->GetTextureSampler(i); } - dataProvider->mNewTextures.resize( newTextureCount ); - dataProvider->mSamplers.resize( newTextureCount ); - for( unsigned int i(0); iGetNewTextureCount(); + dataProvider->mNewTextures.resize( textureCount ); + dataProvider->mSamplers.resize( textureCount ); + for( unsigned int i(0); imNewTextures[i] = mTextureSet->GetNewTexture(i); dataProvider->mSamplers[i] = mTextureSet->GetTextureSampler(i); -- 2.7.4