TDME2  1.9.200
EntityShaderParameters.cpp
Go to the documentation of this file.
2 
3 #include <map>
4 #include <string>
5 
6 #include <tdme/tdme.h>
7 #include <tdme/engine/Color4.h>
8 #include <tdme/engine/Engine.h>
10 #include <tdme/math/Vector2.h>
11 #include <tdme/math/Vector3.h>
12 #include <tdme/math/Vector4.h>
13 #include <tdme/utilities/Float.h>
14 #include <tdme/utilities/Integer.h>
16 
18 
19 using std::map;
20 using std::string;
21 
31 
32 const ShaderParameter EntityShaderParameters::getShaderParameter(const string& parameterName) const {
33  auto shaderParameterIt = parameters.find(parameterName);
34  if (shaderParameterIt == parameters.end()) {
35  auto defaultShaderParameter = Engine::getDefaultShaderParameter(shaderId, parameterName);
36  if (defaultShaderParameter == nullptr) return ShaderParameter();
37  return defaultShaderParameter->value;
38  }
39  return shaderParameterIt->second;
40 }
41 
42 void EntityShaderParameters::setShaderParameter(const string& parameterName, const ShaderParameter& parameterValue) {
43  auto currentShaderParameter = getShaderParameter(parameterName);
44  if (currentShaderParameter.getType() == ShaderParameter::TYPE_NONE) {
45  Console::println("EntityShaderParameters::setShaderParameter(): no parameter for shader registered with id: " + shaderId + ", and parameter name: " + parameterName);
46  return;
47  }
48  if (currentShaderParameter.getType() != parameterValue.getType()) {
49  Console::println("EntityShaderParameters::setShaderParameter(): parameter type mismatch for shader registered with id: " + shaderId + ", and parameter name: " + parameterName);
50  }
51  parameters[parameterName] = parameterValue;
52  changed = true;
53 }
54 
55 void EntityShaderParameters::setShaderParameter(const string& parameterName, const string& parameterValueString) {
56  auto currentShaderParameter = getShaderParameter(parameterName);
57  if (currentShaderParameter.getType() == ShaderParameter::TYPE_NONE) {
58  Console::println("EntityShaderParameters::setShaderParameter(): no parameter for shader registered with id: " + shaderId + ", and parameter name: " + parameterName);
59  return;
60  }
61  ShaderParameter parameterValue;
62  switch(currentShaderParameter.getType()) {
64  break;
66  parameterValue = ShaderParameter(StringTools::toLowerCase(StringTools::trim(parameterValueString)) == "true");
67  break;
69  parameterValue = ShaderParameter(Integer::parse(StringTools::trim(parameterValueString)));
70  break;
72  parameterValue = ShaderParameter(Float::parse(StringTools::trim(parameterValueString)));
73  break;
75  {
76  auto parameterValueStringArray = StringTools::tokenize(parameterValueString, ",");
77  if (parameterValueStringArray.size() != 2) break;
78  parameterValue = ShaderParameter(
79  Vector2(
80  Float::parse(StringTools::trim(parameterValueStringArray[0])),
81  Float::parse(StringTools::trim(parameterValueStringArray[1]))
82  )
83  );
84  }
85  break;
87  {
88  auto parameterValueStringArray = StringTools::tokenize(parameterValueString, ",");
89  if (parameterValueStringArray.size() != 3) break;
90  parameterValue = ShaderParameter(
91  Vector3(
92  Float::parse(StringTools::trim(parameterValueStringArray[0])),
93  Float::parse(StringTools::trim(parameterValueStringArray[1])),
94  Float::parse(StringTools::trim(parameterValueStringArray[2]))
95  )
96  );
97  }
98  break;
100  {
101  auto parameterValueStringArray = StringTools::tokenize(parameterValueString, ",");
102  if (parameterValueStringArray.size() != 4) break;
103  parameterValue = ShaderParameter(
104  Vector4(
105  Float::parse(StringTools::trim(parameterValueStringArray[0])),
106  Float::parse(StringTools::trim(parameterValueStringArray[1])),
107  Float::parse(StringTools::trim(parameterValueStringArray[2])),
108  Float::parse(StringTools::trim(parameterValueStringArray[3]))
109  )
110  );
111  }
112  break;
114  {
115  auto parameterValueStringArray = StringTools::tokenize(parameterValueString, ",");
116  if (parameterValueStringArray.size() != 3 && parameterValueStringArray.size() != 4) break;
117  parameterValue = ShaderParameter(
118  Color4(
119  Float::parse(StringTools::trim(parameterValueStringArray[0])),
120  Float::parse(StringTools::trim(parameterValueStringArray[1])),
121  Float::parse(StringTools::trim(parameterValueStringArray[2])),
122  parameterValueStringArray.size() == 4?Float::parse(StringTools::trim(parameterValueStringArray[3])):1.0f
123  )
124  );
125  }
126  break;
127  default:
128  break;
129  }
130  if (currentShaderParameter.getType() != parameterValue.getType()) {
131  Console::println("EntityShaderParameters::setShaderParameter(): parameter type mismatch for shader registered with id: " + shaderId + ", and parameter name: " + parameterName);
132  }
133  parameters[parameterName] = parameterValue;
134  changed = true;
135 }
Color 4 definition class.
Definition: Color4.h:18
Engine main class.
Definition: Engine.h:131
static const Shader::ParameterDefaults * getDefaultShaderParameter(const string &shaderId, const string &parameterName)
Returns shader parameter default value for given shader id and parameter name.
Definition: Engine.h:915
TDME2 engine entity shader parameters.
void setShaderParameter(const string &parameterName, const ShaderParameter &parameterValue)
Set shader parameter for given parameter name.
unordered_map< string, ShaderParameter > parameters
const ShaderParameter getShaderParameter(const string &parameterName) const
Returns shader parameter for given parameter name, if the value does not exist, the default will be r...
Shader parameter model class.
Vector2 class representing vector2 mathematical structure and operations with x, y components.
Definition: Vector2.h:20
Vector3 class representing vector3 mathematical structure and operations with x, y,...
Definition: Vector3.h:20
Vector4 class representing vector4 mathematical structure and operations with x, y,...
Definition: Vector4.h:22
Float class.
Definition: Float.h:27
Integer class.
Definition: Integer.h:25
String tools class.
Definition: StringTools.h:22