diff options
Diffstat (limited to 'Runtime/Scripting/Rendering/Shader.bind.cpp')
-rw-r--r-- | Runtime/Scripting/Rendering/Shader.bind.cpp | 45 |
1 files changed, 32 insertions, 13 deletions
diff --git a/Runtime/Scripting/Rendering/Shader.bind.cpp b/Runtime/Scripting/Rendering/Shader.bind.cpp index 6646407..1605be5 100644 --- a/Runtime/Scripting/Rendering/Shader.bind.cpp +++ b/Runtime/Scripting/Rendering/Shader.bind.cpp @@ -20,33 +20,52 @@ LUA_BIND_POSTPROCESS(Shader) { } +// Shader.New(glsl[, keepSrc]) +// Shader.New(vsh, fsh[, keepSrc]) LUA_BIND_IMPL_METHOD(Shader, _New) { LUA_BIND_STATE(L, Shader); - LUA_BIND_CHECK(L, "SS*"); + LUA_BIND_CHECK(L, "SS*|S*"); try { - std::string vert, frag; - bool keepCode = false; - if (state.GetTop() == 2) + Shader* shader = NULL; + if (state.CheckParams(1, "SSB")) { - vert = state.GetValue<cc8*>(-2, ""); - frag = state.GetValue<cc8*>(-1, ""); + cc8* vert = state.GetValue<cc8*>(-3, ""); + cc8* frag = state.GetValue<cc8*>(-2, ""); + bool keepCode = state.GetValue<bool>(-1, false); + shader = new Shader(state.GetVM(), vert, frag, keepCode); } - else + else if(state.CheckParams(1, "SS")) { - vert = state.GetValue<cc8*>(-3, ""); - frag = state.GetValue<cc8*>(-2, ""); - keepCode = state.GetValue<bool>(-1, false); + cc8* vert = state.GetValue<cc8*>(-2, ""); + cc8* frag = state.GetValue<cc8*>(-1, ""); + shader = new Shader(state.GetVM(), vert, frag); } - Shader* shader = new Shader(state.GetVM(), vert, frag, keepCode); - shader->PushUserdata(state); + else if (state.CheckParams(1, "SB")) + { + std::string glsl = state.GetValue<cc8*>(1, ""); + bool keepCode = state.GetValue<bool>(2, false); + shader = new Shader(state.GetVM(), glsl, keepCode); + } + else if (state.CheckParams(1, "S")) + { + std::string glsl = state.GetValue<cc8*>(1, ""); + shader = new Shader(state.GetVM(), glsl); + } + if (shader != NULL) + shader->PushUserdata(state); + else + state.PushNil(); return 1; } catch (ShaderCompileExecption e) { log_error(e.what()); + state.PushNil(); + return 1; } - return 0; + Assert(false); + return 0; } LUA_BIND_IMPL_METHOD(Shader, _ReCompile) |