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