From b1cd99a08bc3521b2b2a9aabc6bce81366365cdf Mon Sep 17 00:00:00 2001 From: Lynix Date: Wed, 28 Aug 2013 03:06:25 +0200 Subject: [PATCH] No more useless shaders will be generated Former-commit-id: 9bc30fc69aac0c3c531b9fc56dd204ee70bfdf3f --- src/Nazara/Graphics/ForwardRenderQueue.cpp | 31 ++++++++++++++++------ 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/Nazara/Graphics/ForwardRenderQueue.cpp b/src/Nazara/Graphics/ForwardRenderQueue.cpp index 5fe692197..f46248b98 100644 --- a/src/Nazara/Graphics/ForwardRenderQueue.cpp +++ b/src/Nazara/Graphics/ForwardRenderQueue.cpp @@ -293,11 +293,19 @@ bool NzForwardRenderQueue::OnResourceDestroy(const NzResource* resource, int ind bool NzForwardRenderQueue::BatchedModelMaterialComparator::operator()(const NzMaterial* mat1, const NzMaterial* mat2) { - const NzShaderProgram* program1 = mat1->GetShaderProgram(nzShaderTarget_Model, 0); - const NzShaderProgram* program2 = mat2->GetShaderProgram(nzShaderTarget_Model, 0); + nzUInt32 possibleFlags[] = { + nzShaderFlags_None, + nzShaderFlags_Instancing + }; - if (program1 != program2) - return program1 < program2; + for (nzUInt32 flag : possibleFlags) + { + const NzShaderProgram* program1 = mat1->GetShaderProgram(nzShaderTarget_Model, flag); + const NzShaderProgram* program2 = mat2->GetShaderProgram(nzShaderTarget_Model, flag); + + if (program1 != program2) + return program1 < program2; + } const NzTexture* diffuseMap1 = mat1->GetDiffuseMap(); const NzTexture* diffuseMap2 = mat2->GetDiffuseMap(); @@ -309,11 +317,18 @@ bool NzForwardRenderQueue::BatchedModelMaterialComparator::operator()(const NzMa bool NzForwardRenderQueue::BatchedSpriteMaterialComparator::operator()(const NzMaterial* mat1, const NzMaterial* mat2) { - const NzShaderProgram* program1 = mat1->GetShaderProgram(nzShaderTarget_Sprite, 0); - const NzShaderProgram* program2 = mat2->GetShaderProgram(nzShaderTarget_Sprite, 0); + nzUInt32 possibleFlags[] = { + nzShaderFlags_None + }; - if (program1 != program2) - return program1 < program2; + for (nzUInt32 flag : possibleFlags) + { + const NzShaderProgram* program1 = mat1->GetShaderProgram(nzShaderTarget_Model, flag); + const NzShaderProgram* program2 = mat2->GetShaderProgram(nzShaderTarget_Model, flag); + + if (program1 != program2) + return program1 < program2; + } const NzTexture* diffuseMap1 = mat1->GetDiffuseMap(); const NzTexture* diffuseMap2 = mat2->GetDiffuseMap();