diff options
author | chai <chaifix@163.com> | 2021-10-29 13:36:49 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2021-10-29 13:36:49 +0800 |
commit | 91c32cb173201ac8803a1e4452e8342969b8e484 (patch) | |
tree | 5e78c485b5fcfcf839a2348667597d7e10476214 /Runtime/Scripting/Rendering/Shader.bind.cpp | |
parent | 1f92d4c389cceba6f90261d9cb29885c8a3ca24c (diff) |
*GLSL test
Diffstat (limited to 'Runtime/Scripting/Rendering/Shader.bind.cpp')
-rw-r--r-- | Runtime/Scripting/Rendering/Shader.bind.cpp | 106 |
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 |