Add IMaterialRendererServices::startUseProgram/stopUseProgram
This makes it possible to set high-level shader constants (which are attached to shader programs) to be set outside of OnSetConstants. IShaderConstantSetCallBack::OnCreate has it set automatically now so it works the same as OnSetConstants. D3D9 and burnings both work different, so there hadn't been a problem with those. git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6469 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
@@ -237,13 +237,10 @@ void COpenGLSLMaterialRenderer::OnSetMaterial(const video::SMaterial& material,
|
||||
|
||||
COpenGLCacheHandler* cacheHandler = Driver->getCacheHandler();
|
||||
|
||||
if (material.MaterialType != lastMaterial.MaterialType || resetAllRenderstates)
|
||||
{
|
||||
if (Program2)
|
||||
Driver->irrGlUseProgram(Program2);
|
||||
else if (Program)
|
||||
Driver->extGlUseProgramObject(Program);
|
||||
}
|
||||
if (Program2)
|
||||
Driver->irrGlUseProgram(Program2);
|
||||
else if (Program)
|
||||
Driver->extGlUseProgramObject(Program);
|
||||
|
||||
Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);
|
||||
|
||||
@@ -572,6 +569,23 @@ void COpenGLSLMaterialRenderer::setBasicRenderStates(const SMaterial& material,
|
||||
Driver->setBasicRenderStates(material, lastMaterial, resetAllRenderstates);
|
||||
}
|
||||
|
||||
void COpenGLSLMaterialRenderer::startUseProgram()
|
||||
{
|
||||
if (Program2)
|
||||
Driver->irrGlUseProgram(Program2);
|
||||
else if (Program)
|
||||
Driver->extGlUseProgramObject(Program);
|
||||
}
|
||||
|
||||
void COpenGLSLMaterialRenderer::stopUseProgram()
|
||||
{
|
||||
// Not going to reset irrGlUseProgram/extGlUseProgramObject as it shouldn't really matter
|
||||
|
||||
// Force reset of material to ensure OnSetMaterial will be called or we can miss
|
||||
// the next UseProgram call
|
||||
Driver->DoResetRenderStates();
|
||||
}
|
||||
|
||||
s32 COpenGLSLMaterialRenderer::getVertexShaderConstantID(const c8* name)
|
||||
{
|
||||
return getPixelShaderConstantID(name);
|
||||
|
Reference in New Issue
Block a user