Просмотр исходного кода

Merge pull request #143 from mcclure/shaderbinding

LocalShaderParam currently unusable from Lua
Ivan Safrin 13 лет назад
Родитель
Сommit
2ced7d55e6
2 измененных файлов с 15 добавлено и 2 удалено
  1. 13 1
      Core/Contents/Include/PolyShader.h
  2. 2 1
      Core/Contents/Source/PolyShader.cpp

+ 13 - 1
Core/Contents/Include/PolyShader.h

@@ -23,6 +23,8 @@ THE SOFTWARE.
 #pragma once
 #include "PolyString.h"
 #include "PolyGlobals.h"
+#include "PolyColor.h"
+#include "PolyVector2.h"
 #include "PolyVector3.h"
 #include "PolyResource.h"
 #include <string.h>
@@ -102,6 +104,16 @@ namespace Polycode {
 		public:	
 			String name;
 			void *data;
+		
+		// Convenience getters/setters for Lua users
+		Number getNumber()         { return *((Number *)data); }
+		Vector2 getVector2()       { return *((Vector2 *)data); }
+		Vector3 getVector3()       { return *((Vector3 *)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 setColor(Color x)     { memcpy(data, &x, sizeof(x)); }
 	};	
 	
 	class RenderTargetBinding : public PolyBase {
@@ -142,7 +154,7 @@ namespace Polycode {
 			unsigned int getNumOutTargetBindings();
 			RenderTargetBinding *getOutTargetBinding(unsigned int index);
 			
-			void addLocalParam(const String& name, void *ptr);
+			LocalShaderParam *addLocalParam(const String& name, void *ptr);
 		
 			Shader* shader;
 			std::vector<LocalShaderParam*> localParams;

+ 2 - 1
Core/Contents/Source/PolyShader.cpp

@@ -60,11 +60,12 @@ LocalShaderParam *ShaderBinding::getLocalParamByName(const String& name) {
 	return NULL;
 }
 
-void ShaderBinding::addLocalParam(const String& name, void *ptr) {
+LocalShaderParam *ShaderBinding::addLocalParam(const String& name, void *ptr) {
 	LocalShaderParam *newParam = new LocalShaderParam();
 	newParam->name = name;
 	newParam->data = ptr;
 	localParams.push_back(newParam);
+	return newParam;
 }
 
 void ShaderBinding::addRenderTargetBinding(RenderTargetBinding *binding) {