TDME2  1.9.200
GUIShader.cpp
Go to the documentation of this file.
2 
3 #include <array>
4 
5 #include <tdme/tdme.h>
7 
9 #include <tdme/math/Math.h>
10 #include <tdme/math/Matrix3x3.h>
11 #include <tdme/utilities/Console.h>
12 
14 
15 using std::array;
16 
19 using tdme::math::Math;
22 
23 GUIShader::GUIShader(Renderer* renderer)
24 {
25  this->renderer = renderer;
26  initialized = false;
27  isRunning = false;
28 }
29 
31 {
32  return initialized;
33 }
34 
36 {
37  auto shaderVersion = renderer->getShaderVersion();
40  "shader/" + shaderVersion + "/gui",
41  "render_vertexshader.vert"
42  );
43  if (vertexShaderId == 0) return;
44 
47  "shader/" + shaderVersion + "/gui",
48  "render_fragmentshader.frag"
49  );
50  if (fragmentShaderId == 0) return;
51 
57  renderer->setProgramAttributeLocation(programId, 1, "inSolidColor");
60  }
61  if (renderer->linkProgram(programId) == false) return;
62 
64  if (uniformDiffuseTextureUnit == -1) return;
65 
67  if (uniformDiffuseTextureAvailable == -1) return;
68 
70  if (uniformMaskTextureUnit == -1) return;
71 
73  if (uniformMaskTextureAvailable == -1) return;
74 
76  if (uniformMaskMaxValue == -1) return;
77 
79  if (uniformEffectColorMul == -1) return;
80 
82  if (uniformEffectColorAdd == -1) return;
83 
84  // texture matrix
86  if (uniformTextureMatrix == -1) return;
87 
88  // gradients
90  if (uniformGradientAvailable == -1) return;
91  for (auto i = 0; i < uniformGradientColors.size(); i++) {
92  uniformGradientColors[i] = renderer->getProgramUniformLocation(programId, "gradientColors[" + to_string(i) + "]");
93  if (uniformGradientColors[i] == -1) return;
94  }
96  if (uniformGradientColorCount == -1) return;
97  for (auto i = 0; i < uniformGradientColorStarts.size(); i++) {
98  uniformGradientColorStarts[i] = renderer->getProgramUniformLocation(programId, "gradientColorStarts[" + to_string(i) + "]");
99  if (uniformGradientColorStarts[i] == -1) return;
100  }
102  if (uniformInverseGradientTextureMatrix == -1) return;
103 
104  //
105  initialized = true;
106 }
107 
109 {
110  auto contextIdx = renderer->CONTEXTINDEX_DEFAULT;
111  renderer->useProgram(contextIdx, programId);
118  isRunning = true;
119 }
120 
122 {
123  isRunning = false;
124 }
125 
126 void GUIShader::bindTexture(int32_t textureId)
127 {
128  if (isRunning == false) return;
130  case 0:
132  break;
133  case 1:
136  break;
137  }
138 }
139 
141 {
142  if (isRunning == false) return;
143 
144  // use default context
145  auto contextIdx = renderer->CONTEXTINDEX_DEFAULT;
146 
147  //
150 }
151 
152 
154  if (isRunning == false) return;
155 
156  // use default context
157  auto contextIdx = renderer->CONTEXTINDEX_DEFAULT;
158 
159  //
161 }
162 
163 void GUIShader::setGradient(int count, array<GUIColor, 10>& colors, array<float, 10>& colorStarts, float rotationAngle) {
164  // use default context
165  auto contextIdx = renderer->CONTEXTINDEX_DEFAULT;
166 
167  //
168  count = Math::clamp(count, 0, 10);
169  renderer->setProgramUniformInteger(contextIdx, uniformGradientAvailable, count > 0?1:0);
170  if (count == 0) return;
171  for (auto i = 0; i < count; i++) renderer->setProgramUniformFloatVec4(contextIdx, uniformGradientColors[i], colors[i].getArray());
173  for (auto i = 0; i < count; i++) renderer->setProgramUniformFloat(contextIdx, uniformGradientColorStarts[i], colorStarts[i]);
174  renderer->setProgramUniformFloatMatrix3x3(contextIdx, uniformInverseGradientTextureMatrix, Matrix3x3::rotateAroundTextureCenter(-rotationAngle).getArray());
175 }
176 
178  // use default context
179  auto contextIdx = renderer->CONTEXTINDEX_DEFAULT;
180 
181  //
183 }
virtual int32_t loadShader(int32_t type, const string &pathName, const string &fileName, const string &definitions=string(), const string &functions=string())=0
Loads a shader.
array< float, 4 > & getEffectColorAdd(int contextIdx)
Get effect color add.
Definition: Renderer.h:1141
Matrix3x3 & getTextureMatrix(int contextIdx)
Get texture matrix.
Definition: Renderer.h:579
virtual void setProgramUniformFloatVec4(int contextIdx, int32_t uniformId, const array< float, 4 > &data)=0
Set up a float vec4 uniform value.
array< float, 4 > & getEffectColorMul(int contextIdx)
Get effect color mul.
Definition: Renderer.h:1131
virtual int32_t createProgram(int type)=0
Creates a shader program.
virtual int32_t getTextureUnit(int contextIdx)=0
Get texture unit.
virtual void setProgramAttributeLocation(int32_t programId, int32_t location, const string &name)=0
Bind attribute to a input location.
float getMaskMaxValue(int contextIdx)
Get mask max value.
Definition: Renderer.h:1340
virtual void setProgramUniformInteger(int contextIdx, int32_t uniformId, int32_t value)=0
Set up a integer uniform value.
virtual bool linkProgram(int32_t programId)=0
Links attached shaders to a program.
virtual void setProgramUniformFloatMatrix3x3(int contextIdx, int32_t uniformId, const array< float, 9 > &value)=0
Set up a float matrix 3x3 uniform value.
void setLighting(int contextIdx, int32_t lighting)
Set current lighting model.
Definition: Renderer.h:504
virtual void attachShaderToProgram(int32_t programId, int32_t shaderId)=0
Attaches a shader to a program.
virtual int32_t getProgramUniformLocation(int32_t programId, const string &name)=0
Returns location of given uniform variable.
virtual void useProgram(int contextIdx, int32_t programId)=0
Use shader program.
virtual void setProgramUniformFloat(int contextIdx, int32_t uniformId, float value)=0
Set up a float uniform value.
array< int32_t, 10 > uniformGradientColors
Definition: GUIShader.h:37
void updateEffect()
Update effect to program.
Definition: GUIShader.cpp:140
void setGradient(int count, array< GUIColor, 10 > &colors, array< float, 10 > &colorStarts, float rotationAngle)
Set gradient properties.
Definition: GUIShader.cpp:163
void initialize()
Init shadow mapping.
Definition: GUIShader.cpp:35
int32_t uniformInverseGradientTextureMatrix
Definition: GUIShader.h:40
void unsetGradient()
Disable gradient.
Definition: GUIShader.cpp:177
void bindTexture(int32_t textureId)
Bind texture.
Definition: GUIShader.cpp:126
void useProgram()
Use render GUI program.
Definition: GUIShader.cpp:108
void updateTextureMatrix()
Update texure matrix to program.
Definition: GUIShader.cpp:153
array< int32_t, 10 > uniformGradientColorStarts
Definition: GUIShader.h:39
void unUseProgram()
Un use render GUI program.
Definition: GUIShader.cpp:121
Standard math functions.
Definition: Math.h:19
Matrix3x3 class representing matrix3x3 mathematical structure and operations for 2d space.
Definition: Matrix3x3.h:20
const array< float, 9 > & getArray() const
Definition: Matrix3x3.h:369
Console class.
Definition: Console.h:29