Просмотр исходного кода

Add ownScene option in View3D::SetView, The default value is true in C++ or AngelScript, and false for Lua. Fix issue #545.

aster 11 лет назад
Родитель
Сommit
bed13f408b

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

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

+ 1 - 1
Source/Engine/Script/UIAPI.cpp

@@ -528,7 +528,7 @@ static void RegisterWindow(asIScriptEngine* engine)
 static void RegisterView3D(asIScriptEngine* engine)
 {
     RegisterWindow<View3D>(engine, "View3D");
-    engine->RegisterObjectMethod("View3D", "void SetView(Scene@+, Camera@+)", asMETHOD(View3D, SetView), asCALL_THISCALL);
+    engine->RegisterObjectMethod("View3D", "void SetView(Scene@+, Camera@+, bool ownScene=true)", asMETHOD(View3D, SetView), asCALL_THISCALL);
     engine->RegisterObjectMethod("View3D", "void QueueUpdate()", asMETHOD(View3D, QueueUpdate), asCALL_THISCALL);
     engine->RegisterObjectMethod("View3D", "void set_format(uint)", asMETHOD(View3D, SetFormat), asCALL_THISCALL);
     engine->RegisterObjectMethod("View3D", "uint get_format() const", asMETHOD(View3D, GetFormat), asCALL_THISCALL);

+ 12 - 1
Source/Engine/UI/View3D.cpp

@@ -85,10 +85,21 @@ void View3D::OnResize()
     }
 }
 
-void View3D::SetView(Scene* scene, Camera* camera)
+void View3D::SetView(Scene* scene, Camera* camera, bool ownScene)
 {
     scene_ = scene;
     cameraNode_ = camera ? camera->GetNode() : 0;
+
+    if (ownScene)
+    {
+        ownedScene_ = scene_;
+        ownedCameraNode_ = cameraNode_;
+    }
+    else
+    {
+        ownedScene_ = 0;
+        ownedCameraNode_ = 0;
+    }
     
     viewport_->SetScene(scene_);
     viewport_->SetCamera(camera);

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

@@ -49,8 +49,8 @@ public:
     /// React to resize.
     virtual void OnResize();
 
-    /// Define the scene and camera to use in rendering. The View3D will take ownership of them with shared pointers.
-    void SetView(Scene* scene, Camera* camera);
+    /// Define the scene and camera to use in rendering. When ownScene is true the View3D will take ownership of them with shared pointers.
+    void SetView(Scene* scene, Camera* camera, bool ownScene = true);
     /// Set render texture pixel format. Default is RGB.
     void SetFormat(unsigned format);
     /// Set render target auto update mode. Default is true.
@@ -80,9 +80,13 @@ public:
     /// Viewport.
     SharedPtr<Viewport> viewport_;
     /// Scene.
-    SharedPtr<Scene> scene_;
+    WeakPtr<Scene> scene_;
     /// Camera scene node.
-    SharedPtr<Node> cameraNode_;
+    WeakPtr<Node> cameraNode_;
+    /// Owned scene.
+    SharedPtr<Scene> ownedScene_;
+    /// Owned camera scene node.
+    SharedPtr<Node> ownedCameraNode_;
     /// Render texture format.
     unsigned rttFormat_;
     /// Render texture auto update mode.