From 2f668d94e545b206dd10237c7c71f8e7939a4790 Mon Sep 17 00:00:00 2001 From: Michael Schuldt Date: Fri, 23 Dec 2011 10:59:54 +0100 Subject: [PATCH] LayerManagerCommands: Creating Shader moved to Renderer - If a shader has to be created, the instantiation should be done by the Renderer. --- LayerManagerCommands/src/ShaderCreateCommand.cpp | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/LayerManagerCommands/src/ShaderCreateCommand.cpp b/LayerManagerCommands/src/ShaderCreateCommand.cpp index 8239f96..e36c54d 100644 --- a/LayerManagerCommands/src/ShaderCreateCommand.cpp +++ b/LayerManagerCommands/src/ShaderCreateCommand.cpp @@ -20,6 +20,7 @@ #include "ICommandExecutor.h" #include "Scene.h" #include "Log.h" +#include "RendererList.h" ShaderCreateCommand::ShaderCreateCommand(const std::string& vertName, const std::string& fragName, unsigned int* id) : m_vertName(vertName) @@ -31,19 +32,26 @@ ShaderCreateCommand::ShaderCreateCommand(const std::string& vertName, const std: ExecutionResult ShaderCreateCommand::execute(ICommandExecutor* executor) { Scene& scene = *(executor->getScene()); - ExecutionResult result = ExecutionFailed; - Shader* shader; - - // create new shader instance - shader = Shader::createShader(m_vertName, m_fragName); - + Shader* shader = NULL; + RendererListIterator iter = executor->getRendererList()->begin(); + RendererListIterator iterEnd = executor->getRendererList()->end(); + for (; iter != iterEnd; ++iter) + { + IRenderer* renderer = *iter; + if (renderer) + { + shader = renderer->createShader(&m_vertName, &m_fragName); + } + break; + } if (shader) { // insert shader to shader map int id = shader->getId(); - ShaderMap shaderMap = scene.m_shaderMap; + LOG_DEBUG("CreateShaderCommand","Shader with shader id : " << id << " successfully created"); + ShaderMap &shaderMap = scene.m_shaderMap; shaderMap[id] = shader; *m_returnID = id; result = ExecutionSuccessRedraw; -- 2.7.4