فهرست منبع

LocalShaderParam data setters and getters will no longer crash if incorrect type is used

Ivan Safrin 11 سال پیش
والد
کامیت
34e47016f3
2فایلهای تغییر یافته به همراه81 افزوده شده و 11 حذف شده
  1. 11 11
      Core/Contents/Include/PolyShader.h
  2. 70 0
      Core/Contents/Source/PolyShader.cpp

+ 11 - 11
Core/Contents/Include/PolyShader.h

@@ -147,17 +147,17 @@ namespace Polycode {
             bool ownsPointer;
 		
             // Convenience getters/setters for Lua users
-            Number getNumber()         { return *((Number *)data); }
-            Vector2 getVector2()       { return *((Vector2 *)data); }
-            Vector3 getVector3()       { return *((Vector3 *)data); }
-            Matrix4 getMatrix4()       { return *((Matrix4 *)data); }
-            Color getColor()           { return *((Color *)data); }
-            void setNumber(Number x)   { memcpy(data, &x, sizeof(x)); }
-            void setVector2(Vector2 x) { memcpy(data, &x, sizeof(x)); }
-            void setVector3(Vector3 x) { memcpy(data, &x, sizeof(x)); }
-            void setMatrix4(Matrix4 x) { memcpy(data, &x, sizeof(x)); }
-            void setColor(Color x)     { static_cast<Color*>(data)->setColor(&x); }
-            
+            Number getNumber();
+            Vector2 getVector2();
+            Vector3 getVector3();
+            Matrix4 getMatrix4();
+            Color getColor();
+            void setNumber(Number x);
+            void setVector2(Vector2 x);
+            void setVector3(Vector3 x);
+            void setMatrix4(Matrix4 x);
+            void setColor(Color x);
+        
             void setParamValueFromString(int type, String pvalue);
 	};	
 	

+ 70 - 0
Core/Contents/Source/PolyShader.cpp

@@ -275,6 +275,76 @@ void Shader::setName(const String& name) {
 	this->name = name;
 }
 
+Number LocalShaderParam::getNumber() {
+    if(type != ProgramParam::PARAM_NUMBER) {
+        return 0.0;
+    }
+    return *((Number *)data);
+}
+
+Vector2 LocalShaderParam::getVector2() {
+    if(type != ProgramParam::PARAM_VECTOR2) {
+        return Vector2();
+    }
+    return *((Vector2 *)data);
+}
+
+Vector3 LocalShaderParam::getVector3() {
+    if(type != ProgramParam::PARAM_VECTOR3) {
+        return Vector3();
+    }
+    return *((Vector3 *)data);
+}
+
+Matrix4 LocalShaderParam::getMatrix4() {
+    if(type != ProgramParam::PARAM_MATRIX) {
+        return Matrix4();
+    }
+    return *((Matrix4 *)data);
+}
+
+Color LocalShaderParam::getColor() {
+    if(type != ProgramParam::PARAM_COLOR) {
+        return Color(0.0, 0.0, 0.0, 0.0);
+    }
+    return *((Color *)data);
+}
+
+void LocalShaderParam::setNumber(Number x) {
+    if(type != ProgramParam::PARAM_NUMBER) {
+        return;
+    }
+    memcpy(data, &x, sizeof(x));
+}
+
+void LocalShaderParam::setVector2(Vector2 x) {
+    if(type != ProgramParam::PARAM_VECTOR2) {
+        return;
+    }
+    memcpy(data, &x, sizeof(x));
+}
+
+void LocalShaderParam::setVector3(Vector3 x) {
+    if(type != ProgramParam::PARAM_VECTOR3) {
+        return;
+    }
+    memcpy(data, &x, sizeof(x));
+}
+
+void LocalShaderParam::setMatrix4(Matrix4 x) {
+    if(type != ProgramParam::PARAM_MATRIX) {
+        return;
+    }
+    memcpy(data, &x, sizeof(x));
+}
+
+void LocalShaderParam::setColor(Color x) {
+    if(type != ProgramParam::PARAM_COLOR) {
+        return;
+    }
+    static_cast<Color*>(data)->setColor(&x);
+}
+
 const String& Shader::getName() const {
 	return name;
 }