summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2021-10-29 22:28:12 +0800
committerchai <chaifix@163.com>2021-10-29 22:28:12 +0800
commit164885fd98d48703bd771f802d79557b7db97431 (patch)
tree7c396e475082644ec6994bcc7f3914eb4efb0c5a
parent655466e2d798b72ee3d3be7fcfe32db6af2d4466 (diff)
* !!! 允许NativeClass延后绑定VM
-rw-r--r--Data/Scripts/Editor/AssetBrowser.lua1
-rw-r--r--Runtime/Graphics/Shader.cpp5
-rw-r--r--Runtime/Graphics/Shader.h1
-rw-r--r--Runtime/Lua/LuaBind/LuaBindClass.hpp27
4 files changed, 34 insertions, 0 deletions
diff --git a/Data/Scripts/Editor/AssetBrowser.lua b/Data/Scripts/Editor/AssetBrowser.lua
index 2617fbc..65f6f6f 100644
--- a/Data/Scripts/Editor/AssetBrowser.lua
+++ b/Data/Scripts/Editor/AssetBrowser.lua
@@ -78,6 +78,7 @@ AssetBrowser.OnGUI = function(self)
Engine.Rendering.SetMatrix44("mvp", ortho)
Engine.Rendering.SetTexture("tex", tex)
Engine.Rendering.DrawUIQuad({10, 30, 100, 100})
+
Engine.Rendering.ResetUniformState()
end
diff --git a/Runtime/Graphics/Shader.cpp b/Runtime/Graphics/Shader.cpp
index 2c3d686..4c41d6b 100644
--- a/Runtime/Graphics/Shader.cpp
+++ b/Runtime/Graphics/Shader.cpp
@@ -35,6 +35,11 @@ void checkCompileshaderErrorors(GLuint shader, std::string type)
}
}
+Shader::Shader()
+ : NativeClass<Shader>()
+{
+}
+
Shader::Shader(LuaBind::VM*vm)
: NativeClass<Shader>(vm)
{
diff --git a/Runtime/Graphics/Shader.h b/Runtime/Graphics/Shader.h
index 8a8c1f5..3410e20 100644
--- a/Runtime/Graphics/Shader.h
+++ b/Runtime/Graphics/Shader.h
@@ -11,6 +11,7 @@
class Shader : public LuaBind::NativeClass<Shader>
{
public:
+ Shader()/*throw(ShaderCompileExecption)*/;
Shader(LuaBind::VM*vm)/*throw(ShaderCompileExecption)*/;
Shader(LuaBind::VM*vm, std::string& glslShader)/*throw(ShaderCompileExecption)*/;
Shader(LuaBind::VM*vm, const char* vert, const char* frag)/*throw(ShaderCompileExecption)*/;
diff --git a/Runtime/Lua/LuaBind/LuaBindClass.hpp b/Runtime/Lua/LuaBind/LuaBindClass.hpp
index 1da8513..aed4741 100644
--- a/Runtime/Lua/LuaBind/LuaBindClass.hpp
+++ b/Runtime/Lua/LuaBind/LuaBindClass.hpp
@@ -81,6 +81,8 @@ namespace LuaBind
protected:
+ // ӺVM
+ NativeClass();
// Ҫָ
NativeClass(LuaBind::VM* vm);
virtual ~NativeClass();
@@ -108,6 +110,9 @@ namespace LuaBind
// userdataʵstate
void BindToLua(State& state);
+ // ӺVMBindToLua
+ void LateBindVM(VM* vm);
+
//------------------------------------------------------------------------------//
//
@@ -196,6 +201,12 @@ namespace LuaBind
}
template<class TYPE, class BASE>
+ void NativeClass<TYPE, BASE>::LateBindVM(VM* vm)
+ {
+ mOwner = vm;
+ }
+
+ template<class TYPE, class BASE>
void NativeClass<TYPE, BASE>::PushClassTable(State& state)
{
LuaBind::VM* vm = state.GetVM();
@@ -203,6 +214,17 @@ namespace LuaBind
}
template<class TYPE, class BASE>
+ NativeClass<TYPE, BASE>::NativeClass()
+ : mWatchDog()
+ , mUserdata(NULL)
+ , mOwner(NULL)
+#if LUA_BIND_PROFILER
+ , mSafer(false)
+#endif
+ {
+ }
+
+ template<class TYPE, class BASE>
NativeClass<TYPE, BASE>::NativeClass(LuaBind::VM* vm)
: mWatchDog()
, mUserdata(vm)
@@ -341,6 +363,11 @@ namespace LuaBind
{
assert(!mUserdata);
+ if (mOwner == NULL)
+ {
+ LateBindVM(state.GetVM());
+ }
+
// userdataջעַҪתΪTYPE*ֱthisܻᵼ¶ؼ̳еɥʧ̬
// ֱӴthisȥڶؼ̳£òһͷ麯ġҪthis
// תΪĵ͵ַõһ麯ͨһʵֶ̬