summaryrefslogtreecommitdiff
path: root/Runtime/Scripting/Rendering/Shader.bind.cpp
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-10-29 13:36:49 +0800
committerchai <chaifix@163.com>2021-10-29 13:36:49 +0800
commit91c32cb173201ac8803a1e4452e8342969b8e484 (patch)
tree5e78c485b5fcfcf839a2348667597d7e10476214 /Runtime/Scripting/Rendering/Shader.bind.cpp
parent1f92d4c389cceba6f90261d9cb29885c8a3ca24c (diff)
*GLSL test
Diffstat (limited to 'Runtime/Scripting/Rendering/Shader.bind.cpp')
-rw-r--r--Runtime/Scripting/Rendering/Shader.bind.cpp106
1 files changed, 79 insertions, 27 deletions
diff --git a/Runtime/Scripting/Rendering/Shader.bind.cpp b/Runtime/Scripting/Rendering/Shader.bind.cpp
index 1605be5..89f1ebb 100644
--- a/Runtime/Scripting/Rendering/Shader.bind.cpp
+++ b/Runtime/Scripting/Rendering/Shader.bind.cpp
@@ -1,5 +1,6 @@
#include "Runtime/Graphics/Shader.h"
#include "Runtime/Debug/Log.h"
+#include "Runtime/Graphics/GfxDevice.h"
using namespace LuaBind;
@@ -11,9 +12,15 @@ LUA_BIND_REGISTRY(Shader)
{ "ReCompileVert", _ReCompileVert },
{ "ReCompileFrag", _ReCompileFrag },
{ "IsValid", _IsValid },
- { "GetVertCode", _GetVertCode },
- { "GetFragCode", _GetFragCode }
- );
+ { "Use", _Use },
+ { "Unuse", _UnUse },
+ //{ "SetColor", _SetColor },
+ { "SetVector2", _SetVector2 },
+ { "SetVector3", _SetVector3 },
+ { "SetVector4", _SetVector4 },
+ //{ "SetMatrix3", _SetMatrix3 },
+ { "SetMatrix44", _SetMatrix4 }
+ );
}
LUA_BIND_POSTPROCESS(Shader)
@@ -25,29 +32,16 @@ LUA_BIND_POSTPROCESS(Shader)
LUA_BIND_IMPL_METHOD(Shader, _New)
{
LUA_BIND_STATE(L, Shader);
- LUA_BIND_CHECK(L, "SS*|S*");
+ LUA_BIND_CHECK(L, "SS!|S!");
try {
Shader* shader = NULL;
- if (state.CheckParams(1, "SSB"))
- {
- 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 if(state.CheckParams(1, "SS"))
+ if(state.CheckParams(1, "SS!"))
{
cc8* vert = state.GetValue<cc8*>(-2, "");
cc8* frag = state.GetValue<cc8*>(-1, "");
shader = new Shader(state.GetVM(), vert, frag);
}
- 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"))
+ else if (state.CheckParams(1, "S!"))
{
std::string glsl = state.GetValue<cc8*>(1, "");
shader = new Shader(state.GetVM(), glsl);
@@ -96,16 +90,74 @@ LUA_BIND_IMPL_METHOD(Shader, _IsValid)
return 1;
}
-LUA_BIND_IMPL_METHOD(Shader, _GetVertCode)
+LUA_BIND_IMPL_METHOD(Shader, _Use)
{
- LUA_BIND_PREPARE(L, Shader);
- state.Push(self->m_VertSrc.c_str());
- return 1;
+ LUA_BIND_PREPARE(L, Shader);
+ g_GfxDevice.UseShader(state, self, 1);
+ state.Push(true);
+ return 1;
}
-LUA_BIND_IMPL_METHOD(Shader, _GetFragCode)
+LUA_BIND_IMPL_METHOD(Shader, _UnUse)
{
- LUA_BIND_PREPARE(L, Shader);
- state.Push(self->m_FragSrc.c_str());
- return 1;
+ LUA_BIND_PREPARE(L, Shader);
+ g_GfxDevice.UnuseShader();
+ state.Push(true);
+ return 1;
+}
+
+// shader:SetVector2(name, vec2)
+// shader:SetVector2(name, {})
+LUA_BIND_IMPL_METHOD(Shader, _SetVector2)
+{
+ LUA_BIND_PREPARE(L, Shader);
+ LUA_BIND_CHECK(L, "UST");
+
+ cc8* name = state.GetValue(2, "");
+ Internal::Vector2 v2 = state.GetValue<Internal::Vector2>(3, Internal::Vector2::zero);
+
+ g_GfxDevice.SetUniformVec2(name, v2);
+ return 1;
+}
+
+// shader:SetVector3(name, vec3)
+// shader:SetVector3(name, {})
+LUA_BIND_IMPL_METHOD(Shader, _SetVector3)
+{
+ LUA_BIND_PREPARE(L, Shader);
+ LUA_BIND_CHECK(L, "UST");
+
+ cc8* name = state.GetValue(2, "");
+ Internal::Vector3 v3 = state.GetValue<Internal::Vector3>(3, Internal::Vector3::zero);
+
+ g_GfxDevice.SetUniformVec3(name, v3);
+ return 1;
+}
+
+// shader:SetVector4(name, vec4)
+// shader:SetVector4(name, {})
+LUA_BIND_IMPL_METHOD(Shader, _SetVector4)
+{
+ LUA_BIND_PREPARE(L, Shader);
+ LUA_BIND_CHECK(L, "UST");
+
+ cc8* name = state.GetValue(2, "");
+ Internal::Vector4 v4 = state.GetValue<Internal::Vector4>(3, Internal::Vector4::zero);
+
+ g_GfxDevice.SetUniformVec4(name, v4);
+ return 1;
+}
+
+// shader:SetMatrix4(name, mat4)
+// shader:SetMatrix4(name, {})
+LUA_BIND_IMPL_METHOD(Shader, _SetMatrix4)
+{
+ LUA_BIND_PREPARE(L, Shader);
+ LUA_BIND_CHECK(L, "UST");
+
+ cc8* name = state.GetValue(2, "");
+ Internal::Matrix44 m4 = state.GetValue<Internal::Matrix44>(3, Internal::Matrix44::identity);
+
+ g_GfxDevice.SetUniformMat4(name, m4);
+ return 1;
} \ No newline at end of file