diff options
Diffstat (limited to 'Runtime/Scripting')
-rw-r--r-- | Runtime/Scripting/Rendering/Rendering.bind.cpp | 17 | ||||
-rw-r--r-- | Runtime/Scripting/Rendering/Shader.bind.cpp | 92 |
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 |