summaryrefslogtreecommitdiff
path: root/Runtime/Scripting/GL/GL.bind.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Runtime/Scripting/GL/GL.bind.cpp')
-rw-r--r--Runtime/Scripting/GL/GL.bind.cpp184
1 files changed, 183 insertions, 1 deletions
diff --git a/Runtime/Scripting/GL/GL.bind.cpp b/Runtime/Scripting/GL/GL.bind.cpp
index f167237..f4c9f50 100644
--- a/Runtime/Scripting/GL/GL.bind.cpp
+++ b/Runtime/Scripting/GL/GL.bind.cpp
@@ -212,11 +212,187 @@ int MatrixMode(lua_State* L)
return 0;
}
-// GL.LoadMatrix([Matrix4x4, mat44ColumnMajorTable])
+// GL.LoadMatrix([Matrix44, mat44ColumnMajorTable])
int LoadMatrix(lua_State* L)
{
LUA_BIND_STATE(L);
+ if (LuaHelper::IsType(state, "GameLab.Engine.Math.Matrix44", 1))
+ {
+ float m[16];
+ m[0] = state.GetField(1, "m00", 0.f);
+ m[1] = state.GetField(1, "m10", 0.f);
+ m[2] = state.GetField(1, "m20", 0.f);
+ m[3] = state.GetField(1, "m30", 0.f);
+
+ m[4] = state.GetField(1, "m01", 0.f);
+ m[5] = state.GetField(1, "m11", 0.f);
+ m[6] = state.GetField(1, "m21", 0.f);
+ m[7] = state.GetField(1, "m31", 0.f);
+
+ m[8] = state.GetField(1, "m02", 0.f);
+ m[9] = state.GetField(1, "m12", 0.f);
+ m[10] = state.GetField(1, "m22", 0.f);
+ m[11] = state.GetField(1, "m32", 0.f);
+
+ m[12] = state.GetField(1, "m03", 0.f);
+ m[13] = state.GetField(1, "m13", 0.f);
+ m[14] = state.GetField(1, "m23", 0.f);
+ m[15] = state.GetField(1, "m33", 0.f);
+
+ glLoadMatrixf(m);
+ }
+ else if (LuaHelper::IsType(state, "table", 1))
+ {
+ float m[16];
+ m[0] = state.GetField(1, 1, 0.f);
+ m[1] = state.GetField(1, 2, 0.f);
+ m[2] = state.GetField(1, 3, 0.f);
+ m[3] = state.GetField(1, 4, 0.f);
+
+ m[4] = state.GetField(1, 5, 0.f);
+ m[5] = state.GetField(1, 6, 0.f);
+ m[6] = state.GetField(1, 7, 0.f);
+ m[7] = state.GetField(1, 8, 0.f);
+
+ m[8] = state.GetField(1, 9, 0.f);
+ m[9] = state.GetField(1, 10, 0.f);
+ m[10] = state.GetField(1, 11, 0.f);
+ m[11] = state.GetField(1, 12, 0.f);
+
+ m[12] = state.GetField(1, 13, 0.f);
+ m[13] = state.GetField(1, 14, 0.f);
+ m[14] = state.GetField(1, 15, 0.f);
+ m[15] = state.GetField(1, 16, 0.f);
+
+ glLoadMatrixf(m);
+ }
+ else
+ {
+ state.ErrorType(1, "Matrix44 or mat44ColumnMajorTable");
+ }
+
+ return 0;
+}
+
+// GL.Ortho(l,r,b,t,n,f)
+int OrthoMatrix(lua_State* L)
+{
+ LUA_BIND_STATE(L);
+ double l = state.GetValue<double>(1, 0);
+ double r = state.GetValue<double>(2, 0);
+ double b = state.GetValue<double>(3, 0);
+ double t = state.GetValue<double>(4, 0);
+ double n = state.GetValue<double>(5, 0);
+ double f = state.GetValue<double>(6, 0);
+ glOrtho(l, r, b, t, n, f);
+ return 0;
+}
+
+// GL.Ortho(l,r,b,t,n,f)
+int FrustumMatrix(lua_State* L)
+{
+ LUA_BIND_STATE(L);
+ double l = state.GetValue<double>(1, 0);
+ double r = state.GetValue<double>(2, 0);
+ double b = state.GetValue<double>(3, 0);
+ double t = state.GetValue<double>(4, 0);
+ double n = state.GetValue<double>(5, 0);
+ double f = state.GetValue<double>(6, 0);
+ glFrustum(l, r, b, t, n, f);
+ return 0;
+}
+
+int MultMatrix(lua_State* L)
+{
+ LUA_BIND_STATE(L);
+
+ if (LuaHelper::IsType(state, "GameLab.Engine.Math.Matrix44", 1))
+ {
+ float m[16];
+ m[0] = state.GetField(1, "m00", 0);
+ m[1] = state.GetField(1, "m10", 0);
+ m[2] = state.GetField(1, "m20", 0);
+ m[3] = state.GetField(1, "m30", 0);
+
+ m[4] = state.GetField(1, "m01", 0);
+ m[5] = state.GetField(1, "m11", 0);
+ m[6] = state.GetField(1, "m21", 0);
+ m[7] = state.GetField(1, "m31", 0);
+
+ m[8] = state.GetField(1, "m02", 0);
+ m[9] = state.GetField(1, "m12", 0);
+ m[10] = state.GetField(1, "m22", 0);
+ m[11] = state.GetField(1, "m32", 0);
+
+ m[12] = state.GetField(1, "m03", 0);
+ m[13] = state.GetField(1, "m13", 0);
+ m[14] = state.GetField(1, "m23", 0);
+ m[15] = state.GetField(1, "m33", 0);
+
+ glMultMatrixf(m);
+ }
+ else if (LuaHelper::IsType(state, "table", 1))
+ {
+ float m[16];
+ m[0] = state.GetField(1, 1, 0);
+ m[1] = state.GetField(1, 2, 0);
+ m[2] = state.GetField(1, 3, 0);
+ m[3] = state.GetField(1, 4, 0);
+
+ m[4] = state.GetField(1, 5, 0);
+ m[5] = state.GetField(1, 6, 0);
+ m[6] = state.GetField(1, 7, 0);
+ m[7] = state.GetField(1, 8, 0);
+
+ m[8] = state.GetField(1, 9, 0);
+ m[9] = state.GetField(1, 10, 0);
+ m[10] = state.GetField(1, 11, 0);
+ m[11] = state.GetField(1, 12, 0);
+
+ m[12] = state.GetField(1, 13, 0);
+ m[13] = state.GetField(1, 14, 0);
+ m[14] = state.GetField(1, 15, 0);
+ m[15] = state.GetField(1, 16, 0);
+
+ glMultMatrixf(m);
+ }
+ else
+ {
+ state.ErrorType(1, "Matrix44 or mat44ColumnMajorTable");
+ }
+
+ return 0;
+}
+
+int Scale(lua_State* L)
+{
+ LUA_BIND_STATE(L);
+ float x = state.GetValue(1, 1);
+ float y = state.GetValue(2, 1);
+ float z = state.GetValue(3, 1);
+ glScalef(x, y, z);
+ return 0;
+}
+
+int Rotate(lua_State* L)
+{
+ LUA_BIND_STATE(L);
+ float angle = state.GetValue(1, 0);
+ float x = state.GetValue(2, 0);
+ float y = state.GetValue(3, 0);
+ float z = state.GetValue(4, 1);
+ glRotatef(angle, x, y, z);
+ return 0;
+}
+
+int Translate(lua_State* L)
+{
+ LUA_BIND_STATE(L);
+ float x = state.GetValue(1, 0);
+ float y = state.GetValue(2, 0);
+ float z = state.GetValue(3, 0);
+ glTranslatef(x, y, z);
return 0;
}
@@ -233,6 +409,12 @@ static luaL_Reg glFuncs[] = {
{"PopMatrix", PopMatrix},
{"MatrixMode", MatrixMode},
{"LoadMatrix", LoadMatrix},
+ {"LoadOrthoMatrix", OrthoMatrix},
+ {"LoadFrustumMatrix", FrustumMatrix},
+ {"MultMatrix", MultMatrix},
+ {"Scale", Scale},
+ {"Rotate", Rotate},
+ {"Translate", Translate},
{0, 0}
};