diff --git a/source/Irrlicht/COpenGLSLMaterialRenderer.cpp b/source/Irrlicht/COpenGLSLMaterialRenderer.cpp index f506a458..df2cb060 100644 --- a/source/Irrlicht/COpenGLSLMaterialRenderer.cpp +++ b/source/Irrlicht/COpenGLSLMaterialRenderer.cpp @@ -237,10 +237,13 @@ void COpenGLSLMaterialRenderer::OnSetMaterial(const video::SMaterial& material, COpenGLCacheHandler* cacheHandler = Driver->getCacheHandler(); - if (Program2) - Driver->irrGlUseProgram(Program2); - else if (Program) - Driver->extGlUseProgramObject(Program); + if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates) // each program has it's own type + { + if (Program2) + Driver->irrGlUseProgram(Program2); + else if (Program) + Driver->extGlUseProgramObject(Program); + } Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);