Browse Source

Minor optimization

Panagiotis Christopoulos Charitos 2 years ago
parent
commit
634051cdcb
2 changed files with 8 additions and 2 deletions
  1. 7 1
      AnKi/Renderer/Drawer.cpp
  2. 1 1
      AnKi/Scene/Components/DecalComponent.cpp

+ 7 - 1
AnKi/Renderer/Drawer.cpp

@@ -24,6 +24,7 @@ public:
 
 	Array<const RenderableQueueElement*, kMaxInstanceCount> m_cachedRenderElements;
 	U32 m_cachedRenderElementCount = 0;
+	ShaderProgram* m_lastBoundShaderProgram = nullptr;
 };
 
 RenderableDrawer::~RenderableDrawer()
@@ -115,7 +116,12 @@ void RenderableDrawer::flushDrawcall(Context& ctx)
 
 	// Set state
 	const RenderableQueueElement& firstElement = *ctx.m_cachedRenderElements[0];
-	cmdb->bindShaderProgram(ShaderProgramPtr(firstElement.m_program));
+
+	if(firstElement.m_program != ctx.m_lastBoundShaderProgram)
+	{
+		cmdb->bindShaderProgram(ShaderProgramPtr(firstElement.m_program));
+		ctx.m_lastBoundShaderProgram = firstElement.m_program;
+	}
 
 	if(firstElement.m_indexed)
 	{

+ 1 - 1
AnKi/Scene/Components/DecalComponent.cpp

@@ -12,8 +12,8 @@ namespace anki {
 
 DecalComponent::DecalComponent(SceneNode* node)
 	: SceneComponent(node, getStaticClassId())
-	, m_spatial(this)
 	, m_node(node)
+	, m_spatial(this)
 {
 }