From 0bfff69053e27fbb6e541a6b8afa6c8e61a62403 Mon Sep 17 00:00:00 2001 From: chai Date: Wed, 14 Nov 2018 00:51:15 +0800 Subject: =?UTF-8?q?*shared=20=E5=A2=9E=E5=8A=A0=E4=BE=9D=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/lua/modules/graphics/je_lua_sprite.cpp | 60 ++++++++---------------------- 1 file changed, 16 insertions(+), 44 deletions(-) (limited to 'src/lua/modules/graphics/je_lua_sprite.cpp') diff --git a/src/lua/modules/graphics/je_lua_sprite.cpp b/src/lua/modules/graphics/je_lua_sprite.cpp index f02d1cc..b81b66b 100644 --- a/src/lua/modules/graphics/je_lua_sprite.cpp +++ b/src/lua/modules/graphics/je_lua_sprite.cpp @@ -2,7 +2,6 @@ #include "lua/modules/types.h" #include "lua/common/je_lua_common.h" #include "libjin/jin.h" -#include "je_lua_sprite.h" using namespace JinEngine::Graphics; using namespace JinEngine::Graphics::Shaders; @@ -11,52 +10,20 @@ namespace JinEngine { namespace Lua { - ////////////////////////////////////////////////////////////////////////////////////////////////////////// - // Sprite class. - ////////////////////////////////////////////////////////////////////////////////////////////////////////// - Lua::Sprite::~Sprite() + // Sprite dependency slots. + enum SpriteDependency { - if (mGraphicShared != nullptr) - { - mGraphicShared->release(); - mGraphicShared = nullptr; - } - if (mShaderShared != nullptr) - { - mShaderShared->release(); - mShaderShared = nullptr; - } - } - - void Lua::Sprite::setShader(Shared* shader) - { - if (mShaderShared != nullptr) - mShaderShared->release(); - mShaderShared = shader; - mShaderShared->retain(); - Parent::setShader(mShaderShared->getObject()); - } - - void Lua::Sprite::setGraphic(Shared* graphic) - { - if (mGraphicShared != nullptr) - mGraphicShared = graphic; - mGraphicShared = graphic; - mGraphicShared->retain(); - Parent::setGraphic(mGraphicShared->getObject()); - } + DEP_GRAPHIC = 1, + DEP_SHADER = 2, + }; - ////////////////////////////////////////////////////////////////////////////////////////////////////////// - // Register Sprite class. - ////////////////////////////////////////////////////////////////////////////////////////////////////////// - - typedef Shared& SharedSprite; + typedef Shared& SharedSprite; LUA_IMPLEMENT inline SharedSprite checkSprite(lua_State* L) { Proxy* proxy = (Proxy*)luax_checktype(L, 1, JIN_GRAPHICS_SPRITE); - return proxy->getShared(); + return proxy->getShared(); } LUA_IMPLEMENT int l_gc(lua_State* L) @@ -82,7 +49,7 @@ namespace JinEngine case 2: { int origin = luax_checkinteger(L, 2); - sprite->setOrigin(static_cast(origin)); + sprite->setOrigin(static_cast(origin)); } break; case 3: @@ -129,7 +96,9 @@ namespace JinEngine { SharedSprite sprite = checkSprite(L); Proxy* proxy = (Proxy*)luax_checktype(L, 2, JIN_GRAPHICS_SHADER); - sprite->setShader(&proxy->getShared()); + Shader* shader = proxy->getObject(); + sprite->setShader(shader); + sprite.setDependency(DEP_SHADER, &proxy->getShared()); return 0; } @@ -142,8 +111,11 @@ namespace JinEngine p = (Proxy*)luax_checktype(L, 2, JIN_GRAPHICS_TEXTURE); else if (luax_istype(L, 2, JIN_GRAPHICS_CANVAS)) p = (Proxy*)luax_checktype(L, 2, JIN_GRAPHICS_CANVAS); - if(p != nullptr) - sprite->setGraphic(&p->getShared()); + if (p != nullptr) + { + sprite->setGraphic(p->getObject()); + sprite.setDependency(DEP_GRAPHIC, &p->getShared()); + } return 0; } -- cgit v1.1-26-g67d0