diff options
Diffstat (limited to 'Runtime/Scripting/Rendering/Shader.bind.cpp')
-rw-r--r-- | Runtime/Scripting/Rendering/Shader.bind.cpp | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/Runtime/Scripting/Rendering/Shader.bind.cpp b/Runtime/Scripting/Rendering/Shader.bind.cpp index 0137447..482efb9 100644 --- a/Runtime/Scripting/Rendering/Shader.bind.cpp +++ b/Runtime/Scripting/Rendering/Shader.bind.cpp @@ -1,6 +1,7 @@ #include "Runtime/Graphics/Shader.h" #include "Runtime/Debug/Log.h" #include "Runtime/Graphics/GfxDevice.h" +#include "Runtime/Common/DataBuffer.h" using namespace LuaBind; @@ -30,10 +31,11 @@ LUA_BIND_POSTPROCESS(Shader) // Shader.New(glsl[, keepSrc]) // Shader.New(vsh, fsh[, keepSrc]) +// Shader.New(DataBuffer) LUA_BIND_IMPL_METHOD(Shader, _New) { LUA_BIND_STATE(L, Shader); - LUA_BIND_CHECK(L, "SS!|S!"); + LUA_BIND_CHECK(L, "SS!|S!|U!"); try { Shader* shader = NULL; if(state.CheckParams(1, "SS!")) @@ -47,6 +49,17 @@ LUA_BIND_IMPL_METHOD(Shader, _New) std::string glsl = state.GetValue<cc8*>(1, ""); shader = new Shader(state.GetVM(), glsl); } + else if (LuaHelper::IsType(state, "GameLab.DataBuffer", 1)) + { + DataBuffer* buffer = state.GetUserdata<DataBuffer>(1); + if (buffer == NULL) + { + log_error("Unable to create shader, databuffer is empty"); + return 0; + } + std::string glsl = buffer->data; + shader = new Shader(state.GetVM(), glsl); + } if (shader != NULL) shader->PushUserdata(state); else |