1 /***************************************************************************
3 * Copyright 2010,2011 BMW Car IT GmbH
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 ****************************************************************************/
19 #include "SurfaceSetShaderCommand.h"
20 #include "ICommandExecutor.h"
22 #include "ShaderMap.h"
25 unsigned int SurfaceSetShaderCommand::getID() const
30 unsigned int SurfaceSetShaderCommand::getShaderID() const
35 ExecutionResult SurfaceSetShaderCommand::execute(ICommandExecutor* executor)
37 Scene& scene = *(executor->getScene());
39 ExecutionResult result = ExecutionFailed;
41 GraphicalObject* object = scene.getSurface(m_id);
45 Shader* shader = NULL;
47 // get shader by its ID
48 ShaderMap &shaderMap = scene.m_shaderMap;
49 ShaderMapIterator iter = shaderMap.find(m_shaderid);
50 ShaderMapIterator iterEnd = shaderMap.end();
53 shader = (*iter).second;
56 if (shader || m_shaderid == 0)
58 // shaderId==0 detaches the custom shader
59 // (shader is supposed to be NULL in this case)
61 result = object->setShader(shader) ? ExecutionSuccessRedraw : ExecutionSuccess;
66 LOG_ERROR("SurfaceSetShaderCommand", "shader ID " << m_shaderid << " not found");
72 LOG_ERROR("SurfaceSetShaderCommand", "object ID " << m_id << " not found");
78 const std::string SurfaceSetShaderCommand::getString()
80 std::stringstream description;
81 description << "SurfaceSetShaderCommand("
82 << "id=" << m_id << "(0x" << std::hex << m_id << ")" << std::dec
83 << ", shaderid=" << m_shaderid
85 return description.str();