Просмотр исходного кода

Don't completely destroy shader bindings of textures, etc when reloading shaders. just fix up the parameters. otherwise material texture settings get dropped and not recreated.

Bill Robinson 11 лет назад
Родитель
Сommit
9435b85adf
1 измененных файлов с 12 добавлено и 6 удалено
  1. 12 6
      Core/Contents/Source/PolyMaterial.cpp

+ 12 - 6
Core/Contents/Source/PolyMaterial.cpp

@@ -135,12 +135,18 @@ void Material::recreateRenderTarget(ShaderRenderTarget *renderTarget) {
 }
 
 void Material::handleEvent(Event *event) {
-	std::vector<Shader*> _materialShaders = materialShaders;
-	clearShaders();
-	for(int i=0; i < _materialShaders.size(); i++)	{
-		ShaderBinding *newShaderBinding = _materialShaders[i]->createBinding();				
-		addShader(_materialShaders[i], newShaderBinding);
-	}	
+	//Fix the bindings when we detect a reload
+	for (int i = 0; i < materialShaders.size(); i++) {
+		Shader* shader = materialShaders[i];
+		ShaderBinding* shaderBinding = shaderBindings[i];
+		CoreServices::getInstance()->getRenderer()->setRendererShaderParams(shader, shaderBinding);
+
+		for(int i=0; i < shader->expectedParams.size(); i++) {
+			if(!shaderBinding->getLocalParamByName(shader->expectedParams[i].name)) {
+				shaderBinding->addParam(shader->expectedParams[i].type, shader->expectedParams[i].name);
+			}
+		}
+	}
 	dispatchEvent(new Event(), Event::RESOURCE_RELOAD_EVENT);	
 }