Browse Source

Remove WeakPtr from View3D, change View3D::SetView ownScene argument's default value to true, same like C++ and AngelScript.

aster2013 11 năm trước cách đây
mục cha
commit
5da25ace4e

+ 1 - 2
Source/Engine/LuaScript/pkgs/UI/View3D.pkg

@@ -5,8 +5,7 @@ class View3D : public Window
     View3D();
     ~View3D();
 
-    // The default value of ownScene change to false in Lua
-    void SetView(Scene* scene, Camera* camera, bool ownScene = false);
+    void SetView(Scene* scene, Camera* camera, bool ownScene = true);
     void SetFormat(unsigned format);
     void SetAutoUpdate(bool enable);
     void QueueUpdate();

+ 21 - 11
Source/Engine/UI/View3D.cpp

@@ -40,6 +40,7 @@ extern const char* UI_CATEGORY;
 
 View3D::View3D(Context* context) :
     Window(context),
+    ownScene_(true),
     rttFormat_(Graphics::GetRGBFormat()),
     autoUpdate_(true)
 {
@@ -50,6 +51,7 @@ View3D::View3D(Context* context) :
 
 View3D::~View3D()
 {
+    ResetScene();
 }
 
 void View3D::RegisterObject(Context* context)
@@ -87,20 +89,12 @@ void View3D::OnResize()
 
 void View3D::SetView(Scene* scene, Camera* camera, bool ownScene)
 {
+    ResetScene();
+    
     scene_ = scene;
     cameraNode_ = camera ? camera->GetNode() : 0;
+    ownScene_ = ownScene;
 
-    if (ownScene)
-    {
-        ownedScene_ = scene_;
-        ownedCameraNode_ = cameraNode_;
-    }
-    else
-    {
-        ownedScene_ = 0;
-        ownedCameraNode_ = 0;
-    }
-    
     viewport_->SetScene(scene_);
     viewport_->SetCamera(camera);
     QueueUpdate();
@@ -161,4 +155,20 @@ Viewport* View3D::GetViewport() const
     return viewport_;
 }
 
+void View3D::ResetScene()
+{
+    if (!scene_)
+        return;
+
+    if (!ownScene_)
+    {
+        RefCount* refCount = scene_->RefCountPtr();
+        ++refCount->refs_;
+        scene_ = 0;
+        --refCount->refs_;
+    }
+    else
+        scene_ = 0;
+}
+
 }

+ 8 - 6
Source/Engine/UI/View3D.h

@@ -73,6 +73,10 @@ public:
     /// Return viewport.
     Viewport* GetViewport() const;
     
+private:
+    /// Reset scene.
+    void ResetScene();
+
     /// Renderable texture.
     SharedPtr<Texture2D> renderTexture_;
     /// Depth stencil texture.
@@ -80,13 +84,11 @@ public:
     /// Viewport.
     SharedPtr<Viewport> viewport_;
     /// Scene.
-    WeakPtr<Scene> scene_;
+    SharedPtr<Scene> scene_;
     /// Camera scene node.
-    WeakPtr<Node> cameraNode_;
-    /// Owned scene.
-    SharedPtr<Scene> ownedScene_;
-    /// Owned camera scene node.
-    SharedPtr<Node> ownedCameraNode_;
+    SharedPtr<Node> cameraNode_;
+    /// Own scene.
+    bool ownScene_;
     /// Render texture format.
     unsigned rttFormat_;
     /// Render texture auto update mode.