Forráskód Böngészése

Binds implemented, FIX: taking address of temporary in mat4 get_scale and get_translation

mikymod 12 éve
szülő
commit
988c705c2c
6 módosított fájl, 251 hozzáadás és 172 törlés
  1. 69 9
      lua/LuaStack.cpp
  2. 35 2
      lua/LuaStack.h
  3. 55 61
      lua/Mat4Binds.cpp
  4. 27 27
      lua/QuatBinds.cpp
  5. 32 36
      lua/Vec2Binds.cpp
  6. 33 37
      lua/Vec3Binds.cpp

+ 69 - 9
lua/LuaStack.cpp

@@ -35,9 +35,32 @@ void LuaStack::push_string(const char* str, size_t len)
 }
 
 //-------------------------------------------------------
-void LuaStack::push_lightudata(void* ptr)
+void LuaStack::push_vec2(Vec2* v)
 {
-	lua_pushlightuserdata(m_state, ptr);
+	assert(v >= &vec2_buffer[0] && v <= &vec2_buffer[LUA_VEC2_BUFFER_SIZE-1]);
+
+	lua_pushlightuserdata(m_state, v);
+}
+
+void LuaStack::push_vec3(Vec3* v)
+{
+	assert(v >= &vec3_buffer[0] && v <= &vec3_buffer[LUA_VEC3_BUFFER_SIZE-1]);
+
+	lua_pushlightuserdata(m_state, v);
+}
+
+void LuaStack::push_mat4(Mat4* m)
+{
+	assert(m >= &mat4_buffer[0] && m <= &mat4_buffer[LUA_MAT4_BUFFER_SIZE-1]);
+
+	lua_pushlightuserdata(m_state, m);
+}
+
+void LuaStack::push_quat(Quat* q)
+{
+	assert(q >= &quat_buffer[0] && q <= &quat_buffer[LUA_MAT4_BUFFER_SIZE-1]);
+
+	lua_pushlightuserdata(m_state, q);
 }
 
 //-------------------------------------------------------
@@ -64,15 +87,52 @@ const char* LuaStack::get_string(int32_t index)
 	return luaL_checkstring(m_state, index);
 }
 
-const void* LuaStack::get_lightudata(int32_t index)
+Vec2* LuaStack::get_vec2(int32_t index)
 {
-	if (!lua_islightuserdata(m_state, index))
-	{
-		assert(0);
-	}
+	assert(lua_islightuserdata(m_state, index));
+
+	Vec2* v = (Vec2*)lua_touserdata(m_state, index);
+
+	assert(v >= &vec2_buffer[0] && v <= &vec2_buffer[LUA_VEC2_BUFFER_SIZE-1]);
 
-	return lua_touserdata(m_state, index);
-}	
+	return v;
+}
+
+//-------------------------------------------------------
+Vec3* LuaStack::get_vec3(int32_t index)
+{
+	assert(lua_islightuserdata(m_state, index));
+
+	Vec3* v = (Vec3*)lua_touserdata(m_state, index);
+
+	assert(v >= &vec3_buffer[0] && v <= &vec3_buffer[LUA_VEC3_BUFFER_SIZE-1]);
+
+	return v;
+}
+
+//-------------------------------------------------------
+Mat4* LuaStack::get_mat4(int32_t index)
+{
+	assert(lua_islightuserdata(m_state, index));
+
+	Mat4* m = (Mat4*)lua_touserdata(m_state, index);
+
+	assert(m >= &mat4_buffer[0] && m <= &mat4_buffer[LUA_MAT4_BUFFER_SIZE-1]);
+
+	return m;
+}
+
+//-------------------------------------------------------
+Quat* LuaStack::get_quat(int32_t index)
+{
+	assert(lua_islightuserdata(m_state, index));
+
+	Quat* q = (Quat*)lua_touserdata(m_state, index);
+
+	assert(q >= &quat_buffer[0] && q <= &quat_buffer[LUA_QUAT_BUFFER_SIZE-1]);
+
+	return q;
+}
 
 
 } // namespace crown

+ 35 - 2
lua/LuaStack.h

@@ -2,10 +2,31 @@
 
 #include "lua.hpp"
 #include "Types.h"
+#include "Vec2.h"
+#include "Vec3.h"
+#include "Mat4.h"
+#include "Quat.h"
 
 namespace crown
 {
 
+const int32_t 	LUA_VEC2_BUFFER_SIZE = 4096;
+Vec2 			vec2_buffer[LUA_VEC2_BUFFER_SIZE];
+uint32_t 		vec2_used = 0;
+
+const int32_t 	LUA_VEC3_BUFFER_SIZE = 4096;
+Vec3 			vec3_buffer[LUA_VEC3_BUFFER_SIZE];
+uint32_t 		vec3_used = 0;
+
+const int32_t 	LUA_MAT4_BUFFER_SIZE = 4096;
+Mat4 			mat4_buffer[LUA_MAT4_BUFFER_SIZE];
+uint32_t 		mat4_used = 0;
+
+const int32_t 	LUA_QUAT_BUFFER_SIZE = 4096;
+Quat 			quat_buffer[LUA_QUAT_BUFFER_SIZE];
+uint32_t 		quat_used = 0;
+
+///
 class LuaStack
 {
 public:
@@ -20,7 +41,13 @@ public:
 
 	void 					push_string(const char* str, size_t len);
 
-	void					push_lightudata(void* ptr);
+	void					push_vec2(Vec2* v);
+
+	void					push_vec3(Vec3* v);
+
+	void					push_mat4(Mat4* m);
+
+	void					push_quat(Quat* q);
 
 	bool 					get_bool(int32_t index);
 
@@ -30,7 +57,13 @@ public:
 
 	const char*				get_string(int32_t index);
 
-	const void*				get_lightudata(int32_t index);
+	Vec2*					get_vec2(int32_t index);
+
+	Vec3*					get_vec3(int32_t index);
+
+	Mat4*					get_mat4(int32_t index);
+
+	Quat*					get_quat(int32_t index);
 
 private:
 

+ 55 - 61
lua/Mat4Binds.cpp

@@ -10,9 +10,6 @@ namespace crown
 extern "C"
 {
 
-const int32_t 	LUA_MAT4_BUFFER_SIZE = 4096;
-Mat4 			mat4_buffer[LUA_MAT4_BUFFER_SIZE];
-uint32_t 		mat4_used = 0;
 
 int32_t mat4(lua_State* L)
 {
@@ -38,7 +35,7 @@ int32_t mat4(lua_State* L)
 	mat4_buffer[mat4_used].m[9] = m9;
 	mat4_buffer[mat4_used].m[10] = m10;
 
-	stack.push_lightudata(&mat4_buffer[mat4_used]);
+	stack.push_mat4(&mat4_buffer[mat4_used]);
 
 	mat4_used++;
 
@@ -49,12 +46,12 @@ int32_t mat4_add(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
-	Mat4* b = (Mat4*)stack.get_lightudata(2);
+	Mat4* a = stack.get_mat4(1);
+	Mat4* b = stack.get_mat4(2);
 
 	*a += *b;
 
-	stack.push_lightudata(a);
+	stack.push_mat4(a);
 
 	return 1;
 }
@@ -63,12 +60,12 @@ int32_t mat4_subtract(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
-	Mat4* b = (Mat4*)stack.get_lightudata(2);
+	Mat4* a = (Mat4*)stack.get_mat4(1);
+	Mat4* b = (Mat4*)stack.get_mat4(2);
 
 	*a -= *b;
 
-	stack.push_lightudata(a);
+	stack.push_mat4(a);
 
 	return 1;
 }
@@ -77,12 +74,12 @@ int32_t mat4_multiply(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
-	Mat4* b = (Mat4*)stack.get_lightudata(2);
+	Mat4* a = stack.get_mat4(1);
+	Mat4* b = stack.get_mat4(2);
 
 	*a *= *b;
 
-	stack.push_lightudata(a);
+	stack.push_mat4(a);
 
 	return 1;
 }	
@@ -91,12 +88,12 @@ int32_t mat4_multiply_by_scalar(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = (Mat4*)stack.get_mat4(1);
 	float k = stack.get_float(2);
 
 	*a *= k;
 
-	stack.push_lightudata(a);
+	stack.push_mat4(a);
 
 	return 1;
 }
@@ -105,12 +102,12 @@ int32_t mat4_divide_by_scalar(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = (Mat4*)stack.get_mat4(1);
 	float k = stack.get_float(2);
 
 	*a /= k;
 
-	stack.push_lightudata(a);
+	stack.push_mat4(a);
 
 	return 1;
 }
@@ -119,7 +116,7 @@ int32_t mat4_build_rotation_x(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = (Mat4*)stack.get_mat4(1);
 	float k = stack.get_float(2);
 
 	a->build_rotation_x(k);
@@ -131,7 +128,7 @@ int32_t mat4_build_rotation_y(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = stack.get_mat4(1);
 	float k = stack.get_float(2);
 
 	a->build_rotation_y(k);
@@ -143,7 +140,7 @@ int32_t mat4_build_rotation_z(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = (Mat4*)stack.get_mat4(1);
 	float k = stack.get_float(2);
 
 	a->build_rotation_z(k);
@@ -155,8 +152,8 @@ int32_t mat4_build_rotation(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
-	Vec3* d = (Vec3*)stack.get_lightudata(2);
+	Mat4* a = (Mat4*)stack.get_mat4(1);
+	Vec3* d = (Vec3*)stack.get_vec3(2);
 	float k = stack.get_float(3);
 
 	a->build_rotation(*d, k);
@@ -168,7 +165,7 @@ int32_t mat4_build_projection_perspective_rh(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = stack.get_mat4(1);
 	float fovy = stack.get_float(2);
 	float aspect = stack.get_float(3);
 	float near = stack.get_float(4);
@@ -183,7 +180,7 @@ int32_t mat4_build_projection_perspective_lh(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = stack.get_mat4(1);
 	float fovy = stack.get_float(2);
 	float aspect = stack.get_float(3);
 	float near = stack.get_float(4);
@@ -198,7 +195,7 @@ int32_t mat4_build_projection_ortho_rh(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = stack.get_mat4(1);
 	float width = stack.get_float(2);
 	float height = stack.get_float(3);
 	float near = stack.get_float(4);
@@ -213,7 +210,7 @@ int32_t mat4_build_projection_ortho_lh(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = stack.get_mat4(1);
 	float width = stack.get_float(2);
 	float height = stack.get_float(3);
 	float near = stack.get_float(4);
@@ -228,7 +225,7 @@ int32_t mat4_build_projection_ortho_2d_rh(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = stack.get_mat4(1);
 	float width = stack.get_float(2);
 	float height = stack.get_float(3);
 	float near = stack.get_float(4);
@@ -243,10 +240,10 @@ int32_t mat4_build_look_at_rh(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
-	Vec3* pos = (Vec3*)stack.get_lightudata(2);
-	Vec3* target = (Vec3*)stack.get_lightudata(3);
-	Vec3* up = (Vec3*)stack.get_lightudata(4);
+	Mat4* a = stack.get_mat4(1);
+	Vec3* pos = stack.get_vec3(2);
+	Vec3* target = stack.get_vec3(3);
+	Vec3* up = stack.get_vec3(4);
 
 	a->build_look_at_rh(*pos, *target, *up);
 
@@ -257,10 +254,10 @@ int32_t mat4_build_look_at_lh(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
-	Vec3* pos = (Vec3*)stack.get_lightudata(2);
-	Vec3* target = (Vec3*)stack.get_lightudata(3);
-	Vec3* up = (Vec3*)stack.get_lightudata(4);
+	Mat4* a = stack.get_mat4(1);
+	Vec3* pos = stack.get_vec3(2);
+	Vec3* target = stack.get_vec3(3);
+	Vec3* up = stack.get_vec3(4);
 
 	a->build_look_at_lh(*pos, *target, *up);
 
@@ -271,10 +268,10 @@ int32_t mat4_build_viewpoint_billboard(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
-	Vec3* pos = (Vec3*)stack.get_lightudata(2);
-	Vec3* target = (Vec3*)stack.get_lightudata(3);
-	Vec3* up = (Vec3*)stack.get_lightudata(4);
+	Mat4* a = stack.get_mat4(1);
+	Vec3* pos = stack.get_vec3(2);
+	Vec3* target = stack.get_vec3(3);
+	Vec3* up = stack.get_vec3(4);
 
 	a->build_viewpoint_billboard(*pos, *target, *up);
 
@@ -285,10 +282,10 @@ int32_t mat4_build_axis_billboard(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
-	Vec3* pos = (Vec3*)stack.get_lightudata(2);
-	Vec3* target = (Vec3*)stack.get_lightudata(3);
-	Vec3* up = (Vec3*)stack.get_lightudata(4);
+	Mat4* a = stack.get_mat4(1);
+	Vec3* pos = stack.get_vec3(2);
+	Vec3* target = stack.get_vec3(3);
+	Vec3* up = stack.get_vec3(4);
 
 	a->build_axis_billboard(*pos, *target, *up);
 
@@ -299,11 +296,11 @@ int32_t mat4_transpose(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = stack.get_mat4(1);
 
 	a->transpose();
 
-	stack.push_lightudata(a);
+	stack.push_mat4(a);
 
 	return 1;
 }
@@ -312,7 +309,7 @@ int32_t mat4_determinant(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = stack.get_mat4(1);
 
 	stack.push_float(a->get_determinant());
 
@@ -323,11 +320,11 @@ int32_t mat4_invert(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = stack.get_mat4(1);
 
 	a->invert();
 
-	stack.push_lightudata(a);
+	stack.push_mat4(a);
 
 	return 1;
 }
@@ -336,7 +333,7 @@ int32_t mat4_load_identity(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = stack.get_mat4(1);
 
 	a->load_identity();
 
@@ -347,11 +344,9 @@ int32_t mat4_get_translation(lua_State* L)
 {	
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = stack.get_mat4(1);
 
-	Vec3 trans = a->get_translation();
-
-	stack.push_lightudata(&trans);
+	stack.push_vec3(&a->get_translation());
 
 	return 1;
 }
@@ -360,8 +355,8 @@ int32_t mat4_set_translation(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
-	Vec3* trans = (Vec3*)stack.get_lightudata(2);
+	Mat4* a = stack.get_mat4(1);
+	Vec3* trans = stack.get_vec3(2);
 
 	a->set_translation(*trans);
 
@@ -372,11 +367,10 @@ int32_t mat4_get_scale(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = stack.get_mat4(1);
 
-	Vec3 scale = a->get_scale();
 
-	stack.push_lightudata(&scale);
+	stack.push_vec3(&a->get_scale());
 
 	return 1;
 }
@@ -385,8 +379,8 @@ int32_t mat4_set_scale(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
-	Vec3* scale = (Vec3*)stack.get_lightudata(2);
+	Mat4* a = stack.get_mat4(1);
+	Vec3* scale = stack.get_vec3(2);
 
 	a->set_scale(*scale);
 
@@ -397,7 +391,7 @@ int32_t mat4_print(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Mat4* a = (Mat4*)stack.get_lightudata(1);
+	Mat4* a = stack.get_mat4(1);
 
 	os::printf("|%.1f|%.1f|%.1f|%.1f|\n", a->m[0], a->m[4], a->m[8], a->m[12]);
 	os::printf("|%.1f|%.1f|%.1f|%.1f|\n", a->m[1], a->m[5], a->m[9], a->m[13]);

+ 27 - 27
lua/QuatBinds.cpp

@@ -9,21 +9,17 @@ namespace crown
 extern "C"
 {
 
-const int32_t 	LUA_QUAT_BUFFER_SIZE = 4096;
-Quat 			quat_buffer[LUA_QUAT_BUFFER_SIZE];
-uint32_t 		quat_used = 0;
-
 int32_t quat(lua_State* L)
 {
 	LuaStack stack(L);
 
 	float w = stack.get_float(1);
-	Vec3* v = (Vec3*)stack.get_lightudata(2);
+	Vec3* v = stack.get_vec3(2);
 
 	quat_buffer[quat_used].w = w;
 	quat_buffer[quat_used].v = *v;
 
-	stack.push_lightudata(&quat_buffer[quat_used]);
+	stack.push_quat(&quat_buffer[quat_used]);
 
 	quat_used++;
 
@@ -34,7 +30,7 @@ int32_t quat_negate(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Quat* q = (Quat*)stack.get_lightudata(1);
+	Quat* q = stack.get_quat(1);
 
 	q->negate();
 
@@ -45,7 +41,7 @@ int32_t quat_load_identity(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Quat* q = (Quat*)stack.get_lightudata(1);
+	Quat* q = stack.get_quat(1);
 
 	q->load_identity();
 
@@ -56,7 +52,7 @@ int32_t quat_length(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Quat* q = (Quat*)stack.get_lightudata(1);
+	Quat* q = stack.get_quat(1);
 
 	stack.push_float(q->length());
 
@@ -67,11 +63,9 @@ int32_t quat_conjugate(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Quat* q = (Quat*)stack.get_lightudata(1);
-
-	Quat r = q->get_conjugate();
+	Quat* q = stack.get_quat(1);
 
-	stack.push_lightudata(&r);
+	stack.push_quat(&q->get_conjugate());
 
 	return 1;
 }
@@ -80,11 +74,9 @@ int32_t quat_inverse(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Quat* q = (Quat*)stack.get_lightudata(1);
-
-	Quat r = q->get_inverse();
+	Quat* q = stack.get_quat(1);
 
-	stack.push_lightudata(&r);
+	stack.push_quat(&q->get_inverse());
 
 	return 1;
 }
@@ -93,12 +85,12 @@ int32_t quat_cross(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Quat* q1 = (Quat*)stack.get_lightudata(1);
-	Quat* q2 = (Quat*)stack.get_lightudata(2);
+	Quat* q1 = stack.get_quat(1);
+	Quat* q2 = stack.get_quat(2);
 
-	Quat r = *q1 * (*q2);
+	*q1 *= (*q2)
 
-	stack.push_lightudata(&r);
+	stack.push_quat(q1);
 
 	return 1;
 }
@@ -107,12 +99,12 @@ int32_t quat_multiply(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Quat* q = (Quat*)stack.get_lightudata(1);
+	Quat* q = stack.get_quat(1);
 	float k = stack.get_float(2);
 
-	Quat r = *q * k;
+	*q = (*q) * k;
 
-	stack.push_lightudata(&r);
+	stack.push_lightudata(q);
 
 	return 1;
 }
@@ -124,9 +116,9 @@ int32_t quat_power(lua_State* L)
 	Quat* q = (Quat*)stack.get_lightudata(1);
 	float k = stack.get_float(2);
 
-	Quat r = q->power(k);
+	q->power(k);
 
-	stack.push_lightudata(&r);
+	stack.push_lightudata(q);
 
 	return 1;
 }
@@ -135,7 +127,15 @@ int32_t quat_power(lua_State* L)
 
 void load_quat(LuaEnvironment& env)
 {
-
+	env.load_module_function("Quat", "new", quat);
+	env.load_module_function("Quat", "negate", quat_negate);
+	env.load_module_function("Quat", "load_identity", quat_load_identity);
+	env.load_module_function("Quat", "length", quat_length);
+	env.load_module_function("Quat", "conjugate", quat_conjugate);
+	env.load_module_function("Quat", "inverse", quat_inverse);
+	env.load_module_function("Quat", "cross", quat_cross);
+	env.load_module_function("Quat", "mul", quat_multiply);
+	env.load_module_function("Quat", "pow", quat_power);
 }
 
 } //namespace crown

+ 32 - 36
lua/Vec2Binds.cpp

@@ -9,10 +9,6 @@ namespace crown
 extern "C"
 {
 
-const int32_t 	LUA_VEC2_BUFFER_SIZE = 4096;
-Vec2 			vec2_buffer[LUA_VEC2_BUFFER_SIZE];
-uint32_t 		vec2_used = 0;
-
 Vec2* next_vec2()
 {
 	return &vec2_buffer[vec2_used++];
@@ -28,7 +24,7 @@ int32_t	vec2(lua_State* L)
 	vec2_buffer[vec2_used].x = x;
 	vec2_buffer[vec2_used].y = y;
 
-	stack.push_lightudata(&vec2_buffer[vec2_used]);
+	stack.push_vec2(&vec2_buffer[vec2_used]);
 
 	vec2_used++;
 
@@ -39,7 +35,7 @@ int32_t vec2_values(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec2* a = (Vec2*)stack.get_lightudata(1);
+	Vec2* a = (Vec2*)stack.get_vec2(1);
 
 	float x = a->x;
 	float y = a->y;
@@ -55,12 +51,12 @@ int32_t vec2_add(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec2* a = (Vec2*)stack.get_lightudata(1);
-	Vec2* b = (Vec2*)stack.get_lightudata(2);
+	Vec2* a = (Vec2*)stack.get_vec2(1);
+	Vec2* b = (Vec2*)stack.get_vec2(2);
 
 	*a += *b;
 
-	stack.push_lightudata(a);
+	stack.push_vec2(a);
 
 	return 1;
 }
@@ -69,12 +65,12 @@ int32_t vec2_subtract(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec2* a = (Vec2*) stack.get_lightudata(1);
-	Vec2* b = (Vec2*) stack.get_lightudata(2);
+	Vec2* a = (Vec2*) stack.get_vec2(1);
+	Vec2* b = (Vec2*) stack.get_vec2(2);
 
 	*a -= *b;
 
-	stack.push_lightudata(a);
+	stack.push_vec2(a);
 
 	return 1;
 }
@@ -83,12 +79,12 @@ int32_t vec2_multiply(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec2* a = (Vec2*) stack.get_lightudata(1);
+	Vec2* a = (Vec2*) stack.get_vec2(1);
 	float k = stack.get_float(2);
 
 	*a *= k;
 
-	stack.push_lightudata(a);
+	stack.push_vec2(a);
 
 	return 1;
 }			
@@ -97,12 +93,12 @@ int32_t vec2_divide(lua_State* L)
 {
 	LuaStack stack(L);
 	
-	Vec2* a = (Vec2*) stack.get_lightudata(1);
+	Vec2* a = (Vec2*) stack.get_vec2(1);
 	float k = stack.get_float(2);
 
 	*a /= k;
 
-	stack.push_lightudata(a);
+	stack.push_vec2(a);
 
 	return 1;
 }
@@ -111,8 +107,8 @@ int32_t vec2_dot(lua_State* L)
 {
 	LuaStack stack(L);
 	
-	Vec2* a = (Vec2*) stack.get_lightudata(1);
-	Vec2* b = (Vec2*) stack.get_lightudata(2);
+	Vec2* a = (Vec2*) stack.get_vec2(1);
+	Vec2* b = (Vec2*) stack.get_vec2(2);
 
 	stack.push_float(a->dot(*b));
 
@@ -123,8 +119,8 @@ int32_t vec2_equals(lua_State* L)
 {
 	LuaStack stack(L);
 	
-	Vec2* a = (Vec2*) stack.get_lightudata(1);
-	Vec2* b = (Vec2*) stack.get_lightudata(2);
+	Vec2* a = (Vec2*) stack.get_vec2(1);
+	Vec2* b = (Vec2*) stack.get_vec2(2);
 
 	stack.push_bool(*a == *b);
 
@@ -135,8 +131,8 @@ int32_t vec2_lower(lua_State* L)
 {
 	LuaStack stack(L);
 	
-	Vec2* a = (Vec2*) stack.get_lightudata(1);
-	Vec2* b = (Vec2*) stack.get_lightudata(2);
+	Vec2* a = (Vec2*) stack.get_vec2(1);
+	Vec2* b = (Vec2*) stack.get_vec2(2);
 
 	stack.push_bool(*a < *b);
 
@@ -147,8 +143,8 @@ int32_t vec2_greater(lua_State* L)
 {
 	LuaStack stack(L);
 	
-	Vec2* a = (Vec2*) stack.get_lightudata(1);
-	Vec2* b = (Vec2*) stack.get_lightudata(2);
+	Vec2* a = (Vec2*) stack.get_vec2(1);
+	Vec2* b = (Vec2*) stack.get_vec2(2);
 	
 	stack.push_bool(*a > *b);
 
@@ -159,7 +155,7 @@ int32_t vec2_length(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec2* a = (Vec2*) stack.get_lightudata(1);
+	Vec2* a = (Vec2*) stack.get_vec2(1);
 
 	stack.push_float(a->length());
 
@@ -170,7 +166,7 @@ int32_t vec2_squared_length(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec2* a = (Vec2*) stack.get_lightudata(1);
+	Vec2* a = (Vec2*) stack.get_vec2(1);
 
 	stack.push_float(a->squared_length());
 
@@ -181,7 +177,7 @@ int32_t vec2_set_length(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec2* a = (Vec2*) stack.get_lightudata(1);
+	Vec2* a = (Vec2*) stack.get_vec2(1);
 	float len = stack.get_float(2);
 
 	a->set_length(len);
@@ -193,11 +189,11 @@ int32_t	vec2_normalize(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec2* a = (Vec2*) stack.get_lightudata(1);
+	Vec2* a = (Vec2*) stack.get_vec2(1);
 
 	a->normalize();
 
-	stack.push_lightudata(a);
+	stack.push_vec2(a);
 
 	return 1;
 }
@@ -206,11 +202,11 @@ int32_t	vec2_negate(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec2* a = (Vec2*) stack.get_lightudata(1);
+	Vec2* a = (Vec2*) stack.get_vec2(1);
 
 	a->negate();
 
-	stack.push_lightudata(a);
+	stack.push_vec2(a);
 
 	return 1;
 }
@@ -219,8 +215,8 @@ int32_t	vec2_get_distance_to(lua_State* L)
 {
 	LuaStack stack(L);
 	
-	Vec2* a = (Vec2*) stack.get_lightudata(1);
-	Vec2* b = (Vec2*) stack.get_lightudata(2);
+	Vec2* a = (Vec2*) stack.get_vec2(1);
+	Vec2* b = (Vec2*) stack.get_vec2(2);
 
 	stack.push_float(a->get_distance_to(*b));
 
@@ -231,8 +227,8 @@ int32_t	vec2_get_angle_between(lua_State* L)
 {
 	LuaStack stack(L);
 	
-	Vec2* a = (Vec2*) stack.get_lightudata(1);
-	Vec2* b = (Vec2*) stack.get_lightudata(2);
+	Vec2* a = (Vec2*) stack.get_vec2(1);
+	Vec2* b = (Vec2*) stack.get_vec2(2);
 
 	stack.push_float(a->get_angle_between(*b));
 
@@ -243,7 +239,7 @@ int32_t	vec2_zero(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec2* a = (Vec2*) stack.get_lightudata(1);
+	Vec2* a = (Vec2*) stack.get_vec2(1);
 
 	a->zero();
 

+ 33 - 37
lua/Vec3Binds.cpp

@@ -10,10 +10,6 @@ namespace crown
 extern "C"
 {
 
-const int32_t 	LUA_VEC3_BUFFER_SIZE = 4096;
-Vec3 			vec3_buffer[LUA_VEC3_BUFFER_SIZE];
-uint32_t 		vec3_used = 0;
-
 Vec3* next_vec3()
 {
 	return &vec3_buffer[vec3_used++];
@@ -32,7 +28,7 @@ int32_t vec3(lua_State* L)
 	vec3_buffer[vec3_used].y = y;
 	vec3_buffer[vec3_used].z = z;
 
-	stack.push_lightudata(&vec3_buffer[vec3_used]);
+	stack.push_vec3(&vec3_buffer[vec3_used]);
 
 	vec3_used++;
 
@@ -44,7 +40,7 @@ int32_t vec3_values(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec3* a = (Vec3*)stack.get_lightudata(1);
+	Vec3* a = stack.get_vec3(1);
 
 	float x = a->x;
 	float y = a->y;
@@ -62,12 +58,12 @@ int32_t vec3_add(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
-	Vec3* b = (Vec3*) stack.get_lightudata(2);
+	Vec3* a = stack.get_vec3(1);
+	Vec3* b = stack.get_vec3(2);
 
 	*a += *b;
 
-	stack.push_lightudata(a);
+	stack.push_vec3(a);
 
 	return 1;
 }
@@ -77,12 +73,12 @@ int32_t vec3_subtract(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
-	Vec3* b = (Vec3*) stack.get_lightudata(2);
+	Vec3* a = stack.get_vec3(1);
+	Vec3* b = stack.get_vec3(2);
 
 	*a -= *b;
 
-	stack.push_lightudata(a);
+	stack.push_vec3(a);
 
 	return 1;
 }
@@ -92,12 +88,12 @@ int32_t vec3_multiply(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
+	Vec3* a = stack.get_vec3(1);
 	float b = stack.get_float(2);
 
 	*a *= b;
 
-	stack.push_lightudata(a);
+	stack.push_vec3(a);
 
 	return 1;
 }
@@ -107,12 +103,12 @@ int32_t vec3_divide(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
+	Vec3* a = stack.get_vec3(1);
 	float b = stack.get_float(2);
 
 	*a /= b;
 
-	stack.push_lightudata(a);
+	stack.push_vec3(a);
 
 	return 1;
 }
@@ -122,8 +118,8 @@ int32_t vec3_dot(lua_State* L)
 {
 	LuaStack stack(L);
 	
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
-	Vec3* b = (Vec3*) stack.get_lightudata(2);
+	Vec3* a = stack.get_vec3(1);
+	Vec3* b = stack.get_vec3(2);
 
 	stack.push_float(a->dot(*b));
 
@@ -135,13 +131,13 @@ int32_t vec3_cross(lua_State* L)
 {
 	LuaStack stack(L);
 	
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
-	Vec3* b = (Vec3*) stack.get_lightudata(2);
+	Vec3* a = stack.get_vec3(1);
+	Vec3* b = stack.get_vec3(2);
 
 	/// CHECK CHECK CHECK
 	*a = a->cross(*b);
 
-	stack.push_lightudata(a);
+	stack.push_vec3(a);
 
 	return 1;
 }
@@ -151,8 +147,8 @@ int32_t vec3_equals(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
-	Vec3* b = (Vec3*) stack.get_lightudata(2);
+	Vec3* a = stack.get_vec3(1);
+	Vec3* b = stack.get_vec3(2);
 
 	stack.push_bool(*a == *b);
 
@@ -164,8 +160,8 @@ int32_t vec3_lower(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
-	Vec3* b = (Vec3*) stack.get_lightudata(2);
+	Vec3* a = stack.get_vec3(1);
+	Vec3* b = stack.get_vec3(2);
 
 	stack.push_bool(*a < *b);
 
@@ -177,8 +173,8 @@ int32_t vec3_greater(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
-	Vec3* b = (Vec3*) stack.get_lightudata(2);
+	Vec3* a = stack.get_vec3(1);
+	Vec3* b = stack.get_vec3(2);
 
 	stack.push_bool(*a > *b);
 
@@ -190,7 +186,7 @@ int32_t vec3_length(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
+	Vec3* a = stack.get_vec3(1);
 
 	stack.push_float(a->length());
 
@@ -202,7 +198,7 @@ int32_t vec3_squared_length(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
+	Vec3* a = stack.get_vec3(1);
 
 	stack.push_float(a->squared_length());
 
@@ -214,7 +210,7 @@ int32_t vec3_set_length(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
+	Vec3* a = stack.get_vec3(1);
 	float len = stack.get_float(2);
 
 	a->set_length(len);
@@ -227,7 +223,7 @@ int32_t vec3_normalize(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
+	Vec3* a = stack.get_vec3(1);
 
 	a->normalize();
 
@@ -239,7 +235,7 @@ int32_t vec3_negate(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
+	Vec3* a = stack.get_vec3(1);
 
 	a->negate();
 
@@ -251,8 +247,8 @@ int32_t vec3_get_distance_to(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
-	Vec3* b = (Vec3*) stack.get_lightudata(2);
+	Vec3* a = stack.get_vec3(1);
+	Vec3* b = stack.get_vec3(2);
 
 	stack.push_float(a->get_distance_to(*b));
 
@@ -264,8 +260,8 @@ int32_t vec3_get_angle_between(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
-	Vec3* b = (Vec3*) stack.get_lightudata(2);
+	Vec3* a = stack.get_vec3(1);
+	Vec3* b = stack.get_vec3(2);
 
 	stack.push_float(a->get_angle_between(*b));
 
@@ -277,7 +273,7 @@ int32_t vec3_zero(lua_State* L)
 {
 	LuaStack stack(L);
 
-	Vec3* a = (Vec3*) stack.get_lightudata(1);
+	Vec3* a = stack.get_vec3(1);
 
 	a->zero();