Skip to content

Commit 34e4701

Browse files
committed
LocalShaderParam data setters and getters will no longer crash if incorrect type is used
1 parent 5e62c0c commit 34e4701

File tree

2 files changed

+81
-11
lines changed

2 files changed

+81
-11
lines changed

Core/Contents/Include/PolyShader.h

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -147,17 +147,17 @@ namespace Polycode {
147147
bool ownsPointer;
148148

149149
// Convenience getters/setters for Lua users
150-
Number getNumber() { return *((Number *)data); }
151-
Vector2 getVector2() { return *((Vector2 *)data); }
152-
Vector3 getVector3() { return *((Vector3 *)data); }
153-
Matrix4 getMatrix4() { return *((Matrix4 *)data); }
154-
Color getColor() { return *((Color *)data); }
155-
void setNumber(Number x) { memcpy(data, &x, sizeof(x)); }
156-
void setVector2(Vector2 x) { memcpy(data, &x, sizeof(x)); }
157-
void setVector3(Vector3 x) { memcpy(data, &x, sizeof(x)); }
158-
void setMatrix4(Matrix4 x) { memcpy(data, &x, sizeof(x)); }
159-
void setColor(Color x) { static_cast<Color*>(data)->setColor(&x); }
160-
150+
Number getNumber();
151+
Vector2 getVector2();
152+
Vector3 getVector3();
153+
Matrix4 getMatrix4();
154+
Color getColor();
155+
void setNumber(Number x);
156+
void setVector2(Vector2 x);
157+
void setVector3(Vector3 x);
158+
void setMatrix4(Matrix4 x);
159+
void setColor(Color x);
160+
161161
void setParamValueFromString(int type, String pvalue);
162162
};
163163

Core/Contents/Source/PolyShader.cpp

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,76 @@ void Shader::setName(const String& name) {
275275
this->name = name;
276276
}
277277

278+
Number LocalShaderParam::getNumber() {
279+
if(type != ProgramParam::PARAM_NUMBER) {
280+
return 0.0;
281+
}
282+
return *((Number *)data);
283+
}
284+
285+
Vector2 LocalShaderParam::getVector2() {
286+
if(type != ProgramParam::PARAM_VECTOR2) {
287+
return Vector2();
288+
}
289+
return *((Vector2 *)data);
290+
}
291+
292+
Vector3 LocalShaderParam::getVector3() {
293+
if(type != ProgramParam::PARAM_VECTOR3) {
294+
return Vector3();
295+
}
296+
return *((Vector3 *)data);
297+
}
298+
299+
Matrix4 LocalShaderParam::getMatrix4() {
300+
if(type != ProgramParam::PARAM_MATRIX) {
301+
return Matrix4();
302+
}
303+
return *((Matrix4 *)data);
304+
}
305+
306+
Color LocalShaderParam::getColor() {
307+
if(type != ProgramParam::PARAM_COLOR) {
308+
return Color(0.0, 0.0, 0.0, 0.0);
309+
}
310+
return *((Color *)data);
311+
}
312+
313+
void LocalShaderParam::setNumber(Number x) {
314+
if(type != ProgramParam::PARAM_NUMBER) {
315+
return;
316+
}
317+
memcpy(data, &x, sizeof(x));
318+
}
319+
320+
void LocalShaderParam::setVector2(Vector2 x) {
321+
if(type != ProgramParam::PARAM_VECTOR2) {
322+
return;
323+
}
324+
memcpy(data, &x, sizeof(x));
325+
}
326+
327+
void LocalShaderParam::setVector3(Vector3 x) {
328+
if(type != ProgramParam::PARAM_VECTOR3) {
329+
return;
330+
}
331+
memcpy(data, &x, sizeof(x));
332+
}
333+
334+
void LocalShaderParam::setMatrix4(Matrix4 x) {
335+
if(type != ProgramParam::PARAM_MATRIX) {
336+
return;
337+
}
338+
memcpy(data, &x, sizeof(x));
339+
}
340+
341+
void LocalShaderParam::setColor(Color x) {
342+
if(type != ProgramParam::PARAM_COLOR) {
343+
return;
344+
}
345+
static_cast<Color*>(data)->setColor(&x);
346+
}
347+
278348
const String& Shader::getName() const {
279349
return name;
280350
}

0 commit comments

Comments
 (0)