TDME2  1.9.200
EntityShaderParameters.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <string>
4 #include <unordered_map>
5 
6 #include <tdme/tdme.h>
8 
9 using std::string;
10 using std::to_string;
11 using std::unordered_map;
12 
14 
15 /**
16  * TDME2 engine entity shader parameters
17  * @author Andreas Drewke
18  */
20 {
21 private:
22  unordered_map<string, ShaderParameter> parameters;
23  string shaderId;
24 
25  mutable string hash;
26  mutable bool changed { false };
27 
28  /**
29  * Compute shader parameters hash
30  */
31  void computeHash();
32 
33 public:
34  /**
35  * Public constructor
36  */
38  }
39 
40  /**
41  * Destructor
42  */
44  }
45 
46  /**
47  * Set shader
48  * @param shaderId shader id
49  */
50  void setShader(const string& shaderId) {
51  if (this->shaderId == shaderId) return;
52  parameters.clear();
53  hash = shaderId + ";";
54  changed = false;
55  this->shaderId = shaderId;
56  }
57 
58  /**
59  * Returns shader parameter for given parameter name, if the value does not exist, the default will be returned
60  * @param shaderId shader id
61  * @param parameterName parameter name
62  * @return shader parameter
63  */
64  const ShaderParameter getShaderParameter(const string& parameterName) const;
65 
66  /**
67  * Set shader parameter for given parameter name
68  * @param shaderId shader id
69  * @param parameterName parameter name
70  * @param paraemterValue parameter value
71  */
72  void setShaderParameter(const string& parameterName, const ShaderParameter& parameterValue);
73 
74  /**
75  * Set shader parameter for given parameter name
76  * @param shaderId shader id
77  * @param parameterName parameter name
78  * @param paraemterValue parameter value
79  */
80  void setShaderParameter(const string& parameterName, const string& parameterValueString);
81 
82  /**
83  * @return shader parameters hash
84  */
85  const string& getShaderParametersHash() const {
86  if (changed == true) {
87  // TODO: md5 or something
88  hash = shaderId + ";";
89  for (const auto& [parameterName, parameterValue]: parameters) {
90  switch (parameterValue.getType()) {
92  break;
94  hash+= to_string(parameterValue.getBooleanValue());
95  break;
97  hash+= to_string(parameterValue.getIntegerValue());
98  break;
100  hash+= to_string(static_cast<int>(parameterValue.getFloatValue() * 100.0f));
101  break;
103  {
104  const auto& shaderParameterArray = parameterValue.getVector2Value().getArray();
105  for (auto i = 0; i < shaderParameterArray.size(); i++) {
106  if (i != 0) hash+= ",";
107  hash+= to_string(static_cast<int>(shaderParameterArray[i] * 100.0f));
108  }
109  }
110  break;
112  {
113  const auto& shaderParameterArray = parameterValue.getVector3Value().getArray();
114  for (auto i = 0; i < shaderParameterArray.size(); i++) {
115  if (i != 0) hash+= ",";
116  hash+= to_string(static_cast<int>(shaderParameterArray[i] * 100.0f));
117  }
118  }
119  break;
122  {
123  const auto& shaderParameterArray = parameterValue.getVector4Value().getArray();
124  for (auto i = 0; i < shaderParameterArray.size(); i++) {
125  if (i != 0) hash+= ",";
126  hash+= to_string(static_cast<int>(shaderParameterArray[i] * 100.0f));
127  }
128  }
129  break;
130  default:
131  break;
132  }
133  hash+= ";";
134  }
135  changed = false;
136  }
137  return hash;
138  }
139 };
TDME2 engine entity shader parameters.
void computeHash()
Compute shader parameters hash.
void setShaderParameter(const string &parameterName, const ShaderParameter &parameterValue)
Set shader parameter for given parameter name.
unordered_map< string, ShaderParameter > parameters
void setShader(const string &shaderId)
Set shader.
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.