Creates RenderTask when it connects on Scene and Remove it when it is disconnected.
[platform/core/uifw/dali-toolkit.git] / dali-scene3d / internal / controls / scene-view / scene-view-impl.h
index ddd7319..7632d80 100644 (file)
@@ -23,6 +23,7 @@
 #include <dali-toolkit/public-api/controls/control-impl.h>
 #include <dali/public-api/actors/camera-actor.h>
 #include <dali/public-api/actors/layer.h>
+#include <dali/public-api/adaptor-framework/window.h>
 #include <dali/public-api/animation/animation.h>
 #include <dali/public-api/object/weak-handle.h>
 #include <dali/public-api/render-tasks/render-task.h>
@@ -30,8 +31,8 @@
 #include <dali/public-api/rendering/texture.h>
 
 // INTERNAL INCLUDES
+#include <dali-scene3d/internal/common/image-based-light-observer.h>
 #include <dali-scene3d/public-api/controls/scene-view/scene-view.h>
-#include <dali-scene3d/public-api/controls/model/model.h>
 
 namespace Dali
 {
@@ -95,20 +96,21 @@ public:
   void SelectCamera(const std::string& name);
 
   /**
-   * @brief Register a Model.
-   * Some works like ibl setting should be applied on the only Model not the all child actors.
-   * SceneView contains child Model list to apply the works effectively.
+   * @brief Register an item.
    *
-   * @param[in] model Model to be registered.
+   * Some works(e.g, lighting) of SceneView should be propagated to the child 3D items.
+   * SceneView can avoid unnecessary tree traversal to find 3D items by storing only 3D items as a list.
+   *
+   * @param[in] item scene observer to be registered.
    */
-  void RegisterModel(Scene3D::Model model);
+  void RegisterSceneItem(Scene3D::Internal::ImageBasedLightObserver* item);
 
   /**
-   * @brief Unregister a Model
+   * @brief Unregister an item
    *
-   * @param[in] model Model to be unregistered.
+   * @param[in] item scene observer to be unregistered.
    */
-  void UnregisterModel(Scene3D::Model model);
+  void UnregisterSceneItem(Scene3D::Internal::ImageBasedLightObserver* item);
 
   /**
    * @copydoc SceneView::SetImageBasedLightSource()
@@ -135,6 +137,31 @@ public:
    */
   bool IsUsingFramebuffer() const;
 
+  /**
+   * @copydoc SceneView::SetSkybox()
+   */
+  void SetSkybox(const std::string& skyboxUrl);
+
+  /**
+   * @copydoc SceneView::SetSkyboxIntensity()
+   */
+  void SetSkyboxIntensity(float intensity);
+
+  /**
+   * @copydoc SceneView::GetSkyboxIntensity()
+   */
+  float GetSkyboxIntensity() const;
+
+  /**
+   * @copydoc SceneView::SetSkyboxOrientation()
+   */
+  void SetSkyboxOrientation(const Quaternion& orientation);
+
+  /**
+   * @copydoc SceneView::GetSkyboxOrientation()
+   */
+  Quaternion GetSkyboxOrientation() const;
+
 protected:
   /**
    * @brief Constructs a new SceneView.
@@ -204,26 +231,41 @@ private:
    */
   void UpdateRenderTask();
 
+  /**
+   * @brief Callback that will be called when window is resized.
+   */
+  void OnWindowResized(Window window, Window::WindowSize size);
+
+  /**
+   * @brief Updates camera's projection orientation according to the screen orientation.
+   */
+  void RotateCamera();
+
 private:
   Toolkit::Visual::Base mVisual;
 
   /////////////////////////////////////////////////////////////
   // FrameBuffer and Rendertask to render child objects as a 3D Scene
-  CameraActor                 mDefaultCamera;
-  CameraActor                 mSelectedCamera;
-  std::vector<CameraActor>    mCameras;
-  std::vector<Scene3D::Model> mModels;
-  Dali::FrameBuffer           mRenderTarget;
-  Dali::Texture               mTexture;
-  Dali::RenderTask            mRenderTask;
-
-  Layer mRootLayer;
+  Dali::WeakHandle<Dali::Window>                           mWindow;
+  CameraActor                                              mDefaultCamera;
+  CameraActor                                              mSelectedCamera;
+  std::vector<CameraActor>                                 mCameras;
+  std::vector<Scene3D::Internal::ImageBasedLightObserver*> mItems;
+  Dali::FrameBuffer                                        mRenderTarget;
+  Dali::Texture                                            mTexture;
+  Dali::RenderTask                                         mRenderTask;
+  Layer                                                    mRootLayer;
+  int32_t                                                  mWindowOrientation;
+  Dali::Actor                                              mSkybox;
+  Quaternion                                               mSkyboxOrientation;
+  float                                                    mSkyboxIntensity{1.0f};
 
   Dali::Texture mSpecularTexture;
   Dali::Texture mDiffuseTexture;
   float         mIblScaleFactor{1.0f};
   bool          mUseFrameBuffer{false};
   bool          mIBLResourceReady{true};
+  bool          mSkyboxResourceReady{true};
 
   // TODO : Light Source
 };