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

Merge pull request #490 from wivlaro/fix-shader-reload-texture-bindings

Don't completely destroy shader bindings of textures, etc when reloading...
Ivan Safrin 11 лет назад
Родитель
Сommit
e0ffb0250f
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);	
 }