diff options
author | chai <chaifix@163.com> | 2021-10-28 16:24:34 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-10-28 16:24:34 +0800 |
commit | 40d40edcdeef4978a0d9c7333b7007d1fa4c0bc6 (patch) | |
tree | 5b96c37f9bd85dd0be7a8b880a1de24914ae2880 /Runtime/Scripting/Rendering/Shader.bind.cpp | |
parent | 92dd401d75e19281dc7a01492ab3c0996de330fc (diff) |
*misc
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) |