From 91c32cb173201ac8803a1e4452e8342969b8e484 Mon Sep 17 00:00:00 2001 From: chai Date: Fri, 29 Oct 2021 13:36:49 +0800 Subject: *GLSL test --- Runtime/Lua/LuaBind/LuaBindRef.cpp | 22 +++++- Runtime/Lua/LuaBind/LuaBindRef.h | 7 ++ Runtime/Lua/LuaBind/LuaBindState.cpp | 6 ++ Runtime/Lua/LuaHelper.cpp | 132 ++++++++++++++++++++++++++++++++--- 4 files changed, 157 insertions(+), 10 deletions(-) (limited to 'Runtime/Lua') diff --git a/Runtime/Lua/LuaBind/LuaBindRef.cpp b/Runtime/Lua/LuaBind/LuaBindRef.cpp index d0f2766..313824e 100644 --- a/Runtime/Lua/LuaBind/LuaBindRef.cpp +++ b/Runtime/Lua/LuaBind/LuaBindRef.cpp @@ -3,6 +3,12 @@ namespace LuaBind { + UniversalRef::UniversalRef(RefMode mode) + : mRefID(LUA_NOREF) + , mMode(mode) + , mOwner(NULL) // 延后设置 + { + } UniversalRef::UniversalRef(LuaBind::VM* vm, RefMode mode) : mRefID(LUA_NOREF) @@ -43,7 +49,11 @@ namespace LuaBind void UniversalRef::SetRef(LuaBind::State& state, int idx) { - assert(state.GetVM() == mOwner); + //assert(state.GetVM() == mOwner); + // 延后设置vm + if (mOwner == NULL) { + mOwner = state.GetVM(); + } VM* vm = mOwner; if (!vm) return; @@ -83,11 +93,21 @@ namespace LuaBind return true; } + StrongRef::StrongRef() + : UniversalRef(STRONG_REF) + { + } + StrongRef::StrongRef(LuaBind::VM* vm) : UniversalRef(vm, STRONG_REF) { } + WeakRef::WeakRef() + : UniversalRef(WEAK_REF) + { + } + WeakRef::WeakRef(LuaBind::VM* vm) : UniversalRef(vm, WEAK_REF) { diff --git a/Runtime/Lua/LuaBind/LuaBindRef.h b/Runtime/Lua/LuaBind/LuaBindRef.h index 793559e..a19e5bf 100644 --- a/Runtime/Lua/LuaBind/LuaBindRef.h +++ b/Runtime/Lua/LuaBind/LuaBindRef.h @@ -18,6 +18,7 @@ namespace LuaBind WEAK_REF }; + UniversalRef(RefMode mode = STRONG_REF); // 延后到SetRef设置vm UniversalRef(LuaBind::VM* vm, RefMode mode = STRONG_REF); virtual ~UniversalRef(); @@ -46,6 +47,9 @@ namespace LuaBind class StrongRef: public UniversalRef { public: + // 延后到SetRef设置vm + StrongRef(); + StrongRef(LuaBind::VM* vm); }; @@ -54,6 +58,9 @@ namespace LuaBind class WeakRef : public UniversalRef { public: + // 延后到SetRef设置vm + WeakRef(); + WeakRef(LuaBind::VM* vm); }; diff --git a/Runtime/Lua/LuaBind/LuaBindState.cpp b/Runtime/Lua/LuaBind/LuaBindState.cpp index 9210768..384cba2 100644 --- a/Runtime/Lua/LuaBind/LuaBindState.cpp +++ b/Runtime/Lua/LuaBind/LuaBindState.cpp @@ -602,6 +602,12 @@ namespace LuaBind case '+': if (type == LUA_TNIL) expected = false; break; + + // nil + case '!': + if (type != LUA_TNIL) expected = false; + break; + } if (!expected) { diff --git a/Runtime/Lua/LuaHelper.cpp b/Runtime/Lua/LuaHelper.cpp index a47d528..e7247c0 100644 --- a/Runtime/Lua/LuaHelper.cpp +++ b/Runtime/Lua/LuaHelper.cpp @@ -1,27 +1,141 @@ #include "LuaHelper.h" +#include "Runtime/Math/Vector2.h" +#include "Runtime/Math/Vector3.h" +#include "Runtime/Math/Vector4.h" +#include "Runtime/Math/Matrix44.h" + using namespace LuaBind; template <> -Rect State::GetValue < Rect >(int idx, const Rect value) +Internal::Rect State::GetValue < Internal::Rect >(int idx, const Internal::Rect value) { - Rect rect; - rect.x = GetField(idx, 1, 0); - rect.y = GetField(idx, 2, 0); - rect.width = GetField(idx, 3, 0); - rect.height = GetField(idx, 4, 0); + Internal::Rect rect = value; + if (LuaHelper::IsType(*this, "GameLab.Engine.Math.Rect", idx)) + { + rect.x = GetField(idx, "x", 0); + rect.y = GetField(idx, "y", 0); + rect.width = GetField(idx, "z", 0); + rect.height = GetField(idx, "w", 0); + } + else + { + rect.x = GetField(idx, 1, 0); + rect.y = GetField(idx, 2, 0); + rect.width = GetField(idx, 3, 0); + rect.height = GetField(idx, 4, 0); + } return rect; } template <> Internal::Vector2 State::GetValue < Internal::Vector2 >(int idx, const Internal::Vector2 value) { - Internal::Vector2 v2; - v2.x = GetField(idx, 1, 0); - v2.y = GetField(idx, 2, 0); + Internal::Vector2 v2 = value; + if (LuaHelper::IsType(*this, "GameLab.Engine.Math.Vector2", idx)) + { + v2.x = GetField(idx, "x", 0); + v2.y = GetField(idx, "y", 0); + } + else + { + v2.x = GetField(idx, 1, 0); + v2.y = GetField(idx, 2, 0); + } return v2; } +template <> +Internal::Vector3 State::GetValue < Internal::Vector3 >(int idx, const Internal::Vector3 value) +{ + Internal::Vector3 v3 = value; + if (LuaHelper::IsType(*this, "GameLab.Engine.Math.Vector3", idx)) + { + v3.x = GetField(idx, "x", 0); + v3.y = GetField(idx, "y", 0); + v3.z = GetField(idx, "z", 0); + } + else + { + v3.x = GetField(idx, 1, 0); + v3.y = GetField(idx, 2, 0); + v3.z = GetField(idx, 3, 0); + } + return v3; +} + +template <> +Internal::Vector4 State::GetValue < Internal::Vector4 >(int idx, const Internal::Vector4 value) +{ + Internal::Vector4 v4 = value; + if (LuaHelper::IsType(*this, "GameLab.Engine.Math.Vector4", idx)) + { + v4.x = GetField(idx, "x", 0); + v4.y = GetField(idx, "y", 0); + v4.z = GetField(idx, "z", 0); + v4.w = GetField(idx, "w", 0); + } + else + { + v4.x = GetField(idx, 1, 0); + v4.y = GetField(idx, 2, 0); + v4.z = GetField(idx, 3, 0); + v4.w = GetField(idx, 4, 0); + } + return v4; +} + +template <> +Internal::Matrix44 State::GetValue < Internal::Matrix44 >(int idx, const Internal::Matrix44 value) +{ + Internal::Matrix44 m4 = value; + if (LuaHelper::IsType(*this, "GameLab.Engine.Math.Matrix44", idx)) + { + m4.m[0][0] = GetField(idx, "m00", 0); + m4.m[0][1] = GetField(idx, "m01", 0); + m4.m[0][2] = GetField(idx, "m02", 0); + m4.m[0][3] = GetField(idx, "m03", 0); + + m4.m[1][0] = GetField(idx, "m10", 0); + m4.m[1][1] = GetField(idx, "m11", 0); + m4.m[1][2] = GetField(idx, "m12", 0); + m4.m[1][3] = GetField(idx, "m13", 0); + + m4.m[2][0] = GetField(idx, "m20", 0); + m4.m[2][1] = GetField(idx, "m21", 0); + m4.m[2][2] = GetField(idx, "m22", 0); + m4.m[2][3] = GetField(idx, "m23", 0); + + m4.m[3][0] = GetField(idx, "m30", 0); + m4.m[3][1] = GetField(idx, "m31", 0); + m4.m[3][2] = GetField(idx, "m32", 0); + m4.m[3][3] = GetField(idx, "m33", 0); + } + else + { + m4.m[0][0] = GetField(idx, 1, 0); + m4.m[0][1] = GetField(idx, 2, 0); + m4.m[0][2] = GetField(idx, 3, 0); + m4.m[0][3] = GetField(idx, 4, 0); + + m4.m[1][0] = GetField(idx, 5, 0); + m4.m[1][1] = GetField(idx, 6, 0); + m4.m[1][2] = GetField(idx, 7, 0); + m4.m[1][3] = GetField(idx, 8, 0); + + m4.m[2][0] = GetField(idx, 9, 0); + m4.m[2][1] = GetField(idx, 10, 0); + m4.m[2][2] = GetField(idx, 11, 0); + m4.m[2][3] = GetField(idx, 12, 0); + + m4.m[3][0] = GetField(idx, 13, 0); + m4.m[3][1] = GetField(idx, 14, 0); + m4.m[3][2] = GetField(idx, 15, 0); + m4.m[3][3] = GetField(idx, 16, 0); + } + return m4; +} + int LuaHelper::Call(const char* func, const char* params, ...) { return 1; -- cgit v1.1-26-g67d0