summaryrefslogtreecommitdiff
path: root/Runtime/Scripting
diff options
context:
space:
mode:
Diffstat (limited to 'Runtime/Scripting')
-rw-r--r--Runtime/Scripting/Rendering/Rendering.bind.cpp17
-rw-r--r--Runtime/Scripting/Rendering/Shader.bind.cpp92
2 files changed, 109 insertions, 0 deletions
diff --git a/Runtime/Scripting/Rendering/Rendering.bind.cpp b/Runtime/Scripting/Rendering/Rendering.bind.cpp
new file mode 100644
index 0000000..29fa421
--- /dev/null
+++ b/Runtime/Scripting/Rendering/Rendering.bind.cpp
@@ -0,0 +1,17 @@
+#include "Runtime/Graphics/Shader.h"
+
+int luaopen_GameLab_Engine_Rendering(lua_State* L)
+{
+ log_info("Scripting", "luaopen_GameLab_Engine_Rendering()");
+
+ LUA_BIND_STATE(L);
+
+ state.PushGlobalNamespace();
+ state.PushNamespace("GameLab");
+ state.PushNamespace("Engine");
+ state.PushNamespace("Rendering");
+
+ state.RegisterNativeClass<Shader>();
+
+ return 1;
+} \ No newline at end of file
diff --git a/Runtime/Scripting/Rendering/Shader.bind.cpp b/Runtime/Scripting/Rendering/Shader.bind.cpp
new file mode 100644
index 0000000..6646407
--- /dev/null
+++ b/Runtime/Scripting/Rendering/Shader.bind.cpp
@@ -0,0 +1,92 @@
+#include "Runtime/Graphics/Shader.h"
+#include "Runtime/Debug/Log.h"
+
+using namespace LuaBind;
+
+LUA_BIND_REGISTRY(Shader)
+{
+ LUA_BIND_REGISTER_METHODS(state,
+ { "New", _New },
+ { "ReCompile", _ReCompile },
+ { "ReCompileVert", _ReCompileVert },
+ { "ReCompileFrag", _ReCompileFrag },
+ { "IsValid", _IsValid },
+ { "GetVertCode", _GetVertCode },
+ { "GetFragCode", _GetFragCode }
+ );
+}
+
+LUA_BIND_POSTPROCESS(Shader)
+{
+}
+
+LUA_BIND_IMPL_METHOD(Shader, _New)
+{
+ LUA_BIND_STATE(L, Shader);
+ LUA_BIND_CHECK(L, "SS*");
+ try {
+ std::string vert, frag;
+ bool keepCode = false;
+ if (state.GetTop() == 2)
+ {
+ vert = state.GetValue<cc8*>(-2, "");
+ frag = state.GetValue<cc8*>(-1, "");
+ }
+ else
+ {
+ vert = state.GetValue<cc8*>(-3, "");
+ frag = state.GetValue<cc8*>(-2, "");
+ keepCode = state.GetValue<bool>(-1, false);
+ }
+ Shader* shader = new Shader(state.GetVM(), vert, frag, keepCode);
+ shader->PushUserdata(state);
+ return 1;
+ }
+ catch (ShaderCompileExecption e)
+ {
+ log_error(e.what());
+ }
+ return 0;
+}
+
+LUA_BIND_IMPL_METHOD(Shader, _ReCompile)
+{
+ LUA_BIND_PREPARE(L, Shader);
+
+ return 0;
+}
+
+LUA_BIND_IMPL_METHOD(Shader, _ReCompileVert)
+{
+ LUA_BIND_PREPARE(L, Shader);
+
+ return 0;
+}
+
+LUA_BIND_IMPL_METHOD(Shader, _ReCompileFrag)
+{
+ LUA_BIND_PREPARE(L, Shader);
+
+ return 0;
+}
+
+LUA_BIND_IMPL_METHOD(Shader, _IsValid)
+{
+ LUA_BIND_PREPARE(L, Shader);
+ state.Push(self->IsValid());
+ return 1;
+}
+
+LUA_BIND_IMPL_METHOD(Shader, _GetVertCode)
+{
+ LUA_BIND_PREPARE(L, Shader);
+ state.Push(self->m_VertSrc.c_str());
+ return 1;
+}
+
+LUA_BIND_IMPL_METHOD(Shader, _GetFragCode)
+{
+ LUA_BIND_PREPARE(L, Shader);
+ state.Push(self->m_FragSrc.c_str());
+ return 1;
+} \ No newline at end of file