| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412 |
- #include "Mat4.h"
- #include "Vec3.h"
- #include "LuaStack.h"
- #include "LuaEnvironment.h"
- #include "OS.h"
- 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)
- {
- LuaStack stack(L);
- float m0 = stack.get_float(1);
- float m1 = stack.get_float(2);
- float m2 = stack.get_float(3);
- float m4 = stack.get_float(4);
- float m5 = stack.get_float(5);
- float m6 = stack.get_float(6);
- float m8 = stack.get_float(7);
- float m9 = stack.get_float(8);
- float m10 = stack.get_float(9);
- mat4_buffer[mat4_used].m[0] = m0;
- mat4_buffer[mat4_used].m[1] = m1;
- mat4_buffer[mat4_used].m[2] = m2;
- mat4_buffer[mat4_used].m[4] = m4;
- mat4_buffer[mat4_used].m[5] = m5;
- mat4_buffer[mat4_used].m[6] = m6;
- mat4_buffer[mat4_used].m[8] = m8;
- mat4_buffer[mat4_used].m[9] = m9;
- mat4_buffer[mat4_used].m[10] = m10;
- stack.push_lightudata(&mat4_buffer[mat4_used]);
- mat4_used++;
- return 1;
- }
-
- int32_t mat4_add(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- Mat4* b = (Mat4*)stack.get_lightudata(2);
- *a += *b;
- stack.push_lightudata(a);
- return 1;
- }
- int32_t mat4_subtract(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- Mat4* b = (Mat4*)stack.get_lightudata(2);
- *a -= *b;
- stack.push_lightudata(a);
- return 1;
- }
- int32_t mat4_multiply(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- Mat4* b = (Mat4*)stack.get_lightudata(2);
- *a *= *b;
- stack.push_lightudata(a);
- return 1;
- }
- int32_t mat4_multiply_by_scalar(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- float k = stack.get_float(2);
- *a *= k;
- stack.push_lightudata(a);
- return 1;
- }
- int32_t mat4_divide_by_scalar(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- float k = stack.get_float(2);
- *a /= k;
- stack.push_lightudata(a);
- return 1;
- }
- int32_t mat4_build_rotation_x(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- float k = stack.get_float(2);
- a->build_rotation_x(k);
- return 0;
- }
- int32_t mat4_build_rotation_y(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- float k = stack.get_float(2);
- a->build_rotation_y(k);
- return 0;
- }
- int32_t mat4_build_rotation_z(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- float k = stack.get_float(2);
- a->build_rotation_z(k);
- return 0;
- }
- 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);
- float k = stack.get_float(3);
- a->build_rotation(*d, k);
- return 0;
- }
- int32_t mat4_build_projection_perspective_rh(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- float fovy = stack.get_float(2);
- float aspect = stack.get_float(3);
- float near = stack.get_float(4);
- float far = stack.get_float(5);
- a->build_projection_perspective_rh(fovy, aspect, near, far);
- return 0;
- }
- int32_t mat4_build_projection_perspective_lh(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- float fovy = stack.get_float(2);
- float aspect = stack.get_float(3);
- float near = stack.get_float(4);
- float far = stack.get_float(5);
- a->build_projection_perspective_lh(fovy, aspect, near, far);
- return 0;
- }
- int32_t mat4_build_projection_ortho_rh(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- float width = stack.get_float(2);
- float height = stack.get_float(3);
- float near = stack.get_float(4);
- float far = stack.get_float(5);
- a->build_projection_ortho_rh(width, height, near, far);
- return 0;
- }
- int32_t mat4_build_projection_ortho_lh(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- float width = stack.get_float(2);
- float height = stack.get_float(3);
- float near = stack.get_float(4);
- float far = stack.get_float(5);
- a->build_projection_ortho_lh(width, height, near, far);
- return 0;
- }
- int32_t mat4_build_projection_ortho_2d_rh(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- float width = stack.get_float(2);
- float height = stack.get_float(3);
- float near = stack.get_float(4);
- float far = stack.get_float(5);
- a->build_projection_ortho_2d_rh(width, height, near, far);
- return 0;
- }
- 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);
- a->build_look_at_rh(*pos, *target, *up);
- return 0;
- }
- 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);
- a->build_look_at_lh(*pos, *target, *up);
- return 0;
- }
- 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);
- a->build_viewpoint_billboard(*pos, *target, *up);
- return 0;
- }
- 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);
- a->build_axis_billboard(*pos, *target, *up);
- return 0;
- }
- int32_t mat4_transpose(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- a->transpose();
- stack.push_lightudata(a);
- return 1;
- }
- int32_t mat4_determinant(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- stack.push_float(a->get_determinant());
- return 1;
- }
- int32_t mat4_invert(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- a->invert();
- stack.push_lightudata(a);
- return 1;
- }
- int32_t mat4_load_identity(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- a->load_identity();
- return 0;
- }
- int32_t mat4_get_translation(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- Vec3 trans = a->get_translation();
- stack.push_lightudata(&trans);
- return 1;
- }
- 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);
- a->set_translation(*trans);
- return 0;
- }
- int32_t mat4_get_scale(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(1);
- Vec3 scale = a->get_scale();
- stack.push_lightudata(&scale);
- return 1;
- }
- 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);
- a->set_scale(*scale);
- return 0;
- }
- int32_t mat4_print(lua_State* L)
- {
- LuaStack stack(L);
- Mat4* a = (Mat4*)stack.get_lightudata(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]);
- os::printf("|%.1f|%.1f|%.1f|%.1f|\n", a->m[2], a->m[6], a->m[10], a->m[14]);
- os::printf("|%.1f|%.1f|%.1f|%.1f|\n", a->m[3], a->m[7], a->m[11], a->m[15]);
- return 0;
- }
- } //extern "C"
- } //namespace crown
|