Fixed static analysis errors in UBO code
[platform/core/uifw/dali-adaptor.git] / dali / internal / graphics / gles-impl / gles-context.cpp
index a073193..569fdfc 100644 (file)
@@ -323,6 +323,12 @@ void Context::Flush(bool reset, const GLES::DrawCallDescriptor& drawCall, GLES::
   // elements. This avoids having to sort the bindings.
   for(const auto& binding : mImpl->mCurrentTextureBindings)
   {
+    if(currentSampler >= samplers.size())
+    {
+      // Don't bind more textures than there are active samplers.
+      break;
+    }
+
     auto texture = const_cast<GLES::Texture*>(static_cast<const GLES::Texture*>(binding.texture));
 
     // Texture may not have been initialized yet...(tbm_surface timing issue?)
@@ -349,11 +355,6 @@ void Context::Flush(bool reset, const GLES::DrawCallDescriptor& drawCall, GLES::
         currentElement = 0;
       }
     }
-    if(currentSampler >= samplers.size())
-    {
-      // Don't bind more textures than there are active samplers.
-      break;
-    }
   }
 
   const auto& pipelineState    = mImpl->mNewPipeline ? mImpl->mNewPipeline->GetCreateInfo() : mImpl->mCurrentPipeline->GetCreateInfo();
@@ -563,9 +564,9 @@ void Context::BindUniformBuffers(const UniformBufferBindingDescriptor* uboBindin
     mImpl->mCurrentStandaloneUBOBinding = standaloneBindings;
   }
 
-  if(uboCount >= mImpl->mCurrentUBOBindings.size())
+  if(uboCount && uboCount > mImpl->mCurrentUBOBindings.size())
   {
-    mImpl->mCurrentUBOBindings.resize(uboCount + 1);
+    mImpl->mCurrentUBOBindings.resize(uboCount);
   }
 
   auto it = uboBindings;
@@ -575,6 +576,7 @@ void Context::BindUniformBuffers(const UniformBufferBindingDescriptor* uboBindin
     {
       mImpl->mCurrentUBOBindings[i] = *it;
     }
+    ++it;
   }
 }
 
@@ -704,6 +706,20 @@ void Context::ResolveUniformBuffers()
   {
     ResolveStandaloneUniforms();
   }
+  if(!mImpl->mCurrentUBOBindings.empty())
+  {
+    ResolveGpuUniformBuffers();
+  }
+}
+
+void Context::ResolveGpuUniformBuffers()
+{
+  auto& gl = *mImpl->mController.GetGL();
+  auto  i  = 0u;
+  for(auto& binding : mImpl->mCurrentUBOBindings)
+  {
+    gl.BindBufferRange(GL_UNIFORM_BUFFER, i++, binding.buffer->GetGLBuffer(), GLintptr(binding.offset), binding.dataSize);
+  }
 }
 
 void Context::ResolveStandaloneUniforms()
@@ -850,6 +866,7 @@ void Context::EndRenderPass(GLES::TextureDependencyChecker& dependencyChecker)
 void Context::ClearState()
 {
   mImpl->mCurrentTextureBindings.clear();
+  mImpl->mCurrentUBOBindings.clear();
 }
 
 void Context::ColorMask(bool enabled)