summaryrefslogtreecommitdiff
path: root/Runtime/Scripting/Rendering/Shader.bind.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Runtime/Scripting/Rendering/Shader.bind.cpp')
-rw-r--r--Runtime/Scripting/Rendering/Shader.bind.cpp45
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)