Jelajahi Sumber

Add methods so that shader binding params can be used with Lua

mcc 14 tahun lalu
induk
melakukan
4fc918057f

+ 1 - 0
Bindings/Contents/LUA/API/Polycode.lua

@@ -67,6 +67,7 @@ require "Polycode/ScreenShape"
 require "Polycode/ScreenSoundListener"
 require "Polycode/ScreenSound"
 require "Polycode/ScreenSprite"
+require "Polycode/LocalShaderParam"
 require "Polycode/Shader"
 require "Polycode/ShaderBinding"
 require "Polycode/SkeletonAnimation"

+ 8 - 0
Bindings/Contents/LUA/API/Polycode/ShaderBinding.lua

@@ -124,6 +124,14 @@ function ShaderBinding:addLocalParam(name, ptr)
 	local retVal = Polycore.ShaderBinding_addLocalParam(self.__ptr, name, ptr.__ptr)
 end
 
+function ShaderBinding:addLocalParamNumber(name, n)
+	local retVal = Polycore.ShaderBinding_addLocalParamNumber(self.__ptr, name, n)
+end
+
+function ShaderBinding:addLocalParamVector3(name, v)
+	local retVal = Polycore.ShaderBinding_addLocalParamVector3(self.__ptr, name, v.__ptr)
+end
+
 
 
 function ShaderBinding:__delete()

TEMPAT SAMPAH
Bindings/Contents/LUA/API/api.pak


+ 62 - 0
Bindings/Contents/LUA/Include/PolycodeLUAWrappers.h

@@ -9678,6 +9678,46 @@ static int Polycore_delete_ScreenSprite(lua_State *L) {
 	return 0;
 }
 
+static int Polycore_LocalShaderParam_get_name(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	LocalShaderParam *inst = (LocalShaderParam*)lua_topointer(L, 1);
+	lua_pushstring(L, inst->name.c_str());
+	return 1;
+}
+
+static int Polycore_LocalShaderParam_set_name(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	LocalShaderParam *inst = (LocalShaderParam*)lua_topointer(L, 1);
+	String param = lua_tostring(L, 2);
+	inst->name = param;
+	return 0;
+}
+
+static int Polycore_LocalShaderParam_setNumber(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	LocalShaderParam *inst = (LocalShaderParam*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TNUMBER);
+	Number n = lua_tonumber(L, 2);
+	inst->setNumber(n);
+	return 0;
+}
+
+static int Polycore_LocalShaderParam_setVector3(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	LocalShaderParam *inst = (LocalShaderParam*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TLIGHTUSERDATA);
+	Vector3 v = *(Vector3*)lua_topointer(L, 2);
+	inst->setVector3(v);
+	return 0;
+}
+
+static int Polycore_delete_LocalShaderParam(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	LocalShaderParam *inst = (LocalShaderParam*)lua_topointer(L, 1);
+	delete inst;
+	return 0;
+}
+
 static int Polycore_Shader_get_numSpotLights(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	Shader *inst = (Shader*)lua_topointer(L, 1);
@@ -9929,6 +9969,28 @@ static int Polycore_ShaderBinding_addLocalParam(lua_State *L) {
 	return 0;
 }
 
+static int Polycore_ShaderBinding_addLocalParamNumber(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	ShaderBinding *inst = (ShaderBinding*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TSTRING);
+	String name = String(lua_tostring(L, 2));
+	luaL_checktype(L, 3, LUA_TNUMBER);
+	Number n = lua_tonumber(L, 3);
+	inst->addLocalParamNumber(name, n);
+	return 0;
+}
+
+static int Polycore_ShaderBinding_addLocalParamVector3(lua_State *L) {
+	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
+	ShaderBinding *inst = (ShaderBinding*)lua_topointer(L, 1);
+	luaL_checktype(L, 2, LUA_TSTRING);
+	String name = String(lua_tostring(L, 2));
+	luaL_checktype(L, 3, LUA_TLIGHTUSERDATA);
+	Vector3 v = *(Vector3*)lua_topointer(L, 3);
+	inst->addLocalParamVector3(name, v);
+	return 0;
+}
+
 static int Polycore_delete_ShaderBinding(lua_State *L) {
 	luaL_checktype(L, 1, LUA_TLIGHTUSERDATA);
 	ShaderBinding *inst = (ShaderBinding*)lua_topointer(L, 1);

+ 7 - 0
Bindings/Contents/LUA/Source/PolycodeLUA.cpp

@@ -1016,6 +1016,11 @@ int luaopen_Polycode(lua_State *L) {
 		{"ScreenSprite_Update", Polycore_ScreenSprite_Update},
 		{"ScreenSprite_Pause", Polycore_ScreenSprite_Pause},
 		{"delete_ScreenSprite", Polycore_delete_ScreenSprite},
+		{"LocalShaderParam_get_name", Polycore_LocalShaderParam_get_name},
+		{"LocalShaderParam_set_name", Polycore_LocalShaderParam_set_name},
+		{"LocalShaderParam_setNumber", Polycore_LocalShaderParam_setNumber},
+		{"LocalShaderParam_setVector3", Polycore_LocalShaderParam_setVector3},
+		{"delete_LocalShaderParam", Polycore_delete_LocalShaderParam},
 		{"Shader_get_numSpotLights", Polycore_Shader_get_numSpotLights},
 		{"Shader_get_numAreaLights", Polycore_Shader_get_numAreaLights},
 		{"Shader_set_numSpotLights", Polycore_Shader_set_numSpotLights},
@@ -1042,6 +1047,8 @@ int luaopen_Polycode(lua_State *L) {
 		{"ShaderBinding_getNumOutTargetBindings", Polycore_ShaderBinding_getNumOutTargetBindings},
 		{"ShaderBinding_getOutTargetBinding", Polycore_ShaderBinding_getOutTargetBinding},
 		{"ShaderBinding_addLocalParam", Polycore_ShaderBinding_addLocalParam},
+		{"ShaderBinding_addLocalParamNumber", Polycore_ShaderBinding_addLocalParamNumber},
+		{"ShaderBinding_addLocalParamVector3", Polycore_ShaderBinding_addLocalParamVector3},
 		{"delete_ShaderBinding", Polycore_delete_ShaderBinding},
 		{"SkeletonAnimation", Polycore_SkeletonAnimation},
 		{"SkeletonAnimation_addBoneTrack", Polycore_SkeletonAnimation_addBoneTrack},

+ 8 - 2
Core/Contents/Include/PolyShader.h

@@ -23,6 +23,7 @@ THE SOFTWARE.
 #pragma once
 #include "PolyString.h"
 #include "PolyGlobals.h"
+#include "PolyVector3.h"
 #include "PolyResource.h"
 
 namespace Polycode {
@@ -71,7 +72,10 @@ namespace Polycode {
 	class LocalShaderParam {
 		public:	
 			String name;
-			void *data;		
+			void *data;
+			
+			void setNumber(Number n) { memcpy(data, &n, sizeof(n)); }
+			void setVector3(Vector3 v) { memcpy(data, &v, sizeof(v)); }
 	};	
 	
 	class RenderTargetBinding {
@@ -112,7 +116,9 @@ namespace Polycode {
 			RenderTargetBinding *getOutTargetBinding(unsigned int index);
 			
 			void addLocalParam(const String& name, void *ptr);
-			
+			void addLocalParamNumber(const String& name, Number n);
+			void addLocalParamVector3(const String& name, Vector3 v);
+		
 			Shader* shader;
 			std::vector<LocalShaderParam*> localParams;
 			std::vector<RenderTargetBinding*> renderTargetBindings;

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

@@ -56,6 +56,18 @@ void ShaderBinding::addLocalParam(const String& name, void *ptr) {
 	localParams.push_back(newParam);
 }
 
+void ShaderBinding::addLocalParamNumber(const String& name, Number n) {
+	Number *value = new Number;
+	*value = n;
+	addLocalParam(name, value);
+}
+
+void ShaderBinding::addLocalParamVector3(const String& name, Vector3 v) {
+	Vector3 *value = new Vector3;
+	memcpy(value, &v, sizeof(v));
+	addLocalParam(name, value);
+}
+
 void ShaderBinding::addRenderTargetBinding(RenderTargetBinding *binding) {
 	renderTargetBindings.push_back(binding);
 	if(binding->mode == RenderTargetBinding::MODE_IN) {