From: Michael R. <mic...@gm...> - 2015-03-27 09:02:39
|
<html><head></head><body><div style="font-family: Verdana;font-size: 12.0px;"><div>Hi,</div> <div> </div> <div>I found a bug related to the removal of uniforms.</div> <div> </div> <div>bool ShaderProgramVariables::subMapVariable(const Char8 *name,<br/> MFInt32 *pVarLoc,<br/> MFInt32 *pProcVarLoc)</div> <div> </div> <div>does not truely removed the uniform variables, it sets their slot NULL/-1. There's a #if 0 block which did a true erase operation but its not used at the moment.</div> <div>The next call to SimpleSHLChunk::updateVariableLocations crashes when trying to update the former removed uniform. Fix is attached.</div> <div> </div> <div>Thanks,</div> <div>Michael</div> <div> </div> <div> </div> <div> </div> <div> <div>@@ -1280,6 +1292,9 @@ void SimpleSHLChunk::updateVariableLocations(DrawEnv *pEnv,<br/> <br/> for(; mVarIt != mVarEnd; ++mVarIt, ++mLocIt)<br/> {<br/> + if( (*mVarIt) == NULL ) // empty slot; uniform was removed here..<br/> + continue;<br/> +<br/> *mLocIt = osgGlGetUniformLocation(uiProgram,<br/> (*mVarIt)->getName().c_str());<br/> }</div> <div> </div> </div> <div> </div> <div> </div></div></body></html> |