Make SceneView FBO multisampling + Sync utc harness
[platform/core/uifw/dali-toolkit.git] / dali-scene3d / internal / controls / scene-view / scene-view-impl.h
index e3de91e..f5e4f82 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,7 +31,7 @@
 #include <dali/public-api/rendering/texture.h>
 
 // INTERNAL INCLUDES
-#include <dali-scene3d/public-api/controls/model-view/model-view.h>
+#include <dali-scene3d/internal/common/image-based-light-observer.h>
 #include <dali-scene3d/public-api/controls/scene-view/scene-view.h>
 
 namespace Dali
@@ -67,22 +68,22 @@ public:
   /**
    * @copydoc SceneView::GetCameraCount()
    */
-  uint32_t GetCameraCount();
+  uint32_t GetCameraCount() const;
 
   /**
    * @copydoc SceneView::GetSelectedCamera()
    */
-  CameraActor GetSelectedCamera();
+  CameraActor GetSelectedCamera() const;
 
   /**
    * @copydoc SceneView::GetCamera()
    */
-  CameraActor GetCamera(uint32_t index);
+  CameraActor GetCamera(uint32_t index) const;
 
   /**
    * @copydoc SceneView::GetCamera()
    */
-  CameraActor GetCamera(const std::string& name);
+  CameraActor GetCamera(const std::string& name) const;
 
   /**
    * @copydoc SceneView::SelectCamera()
@@ -95,25 +96,36 @@ public:
   void SelectCamera(const std::string& name);
 
   /**
-   * @brief Register a ModelView.
-   * Some works like ibl setting should be applied on the only ModelView not the all child actors.
-   * SceneView contains child ModelView list to apply the works effectively.
+   * @brief Register an item.
    *
-   * @param[in] modelView ModelView 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 RegisterModelView(Scene3D::ModelView modelView);
+  void RegisterSceneItem(Scene3D::Internal::ImageBasedLightObserver* item);
 
   /**
-   * @brief Unregister a ModelView
+   * @brief Unregister an item
    *
-   * @param[in] modelView ModelView to be unregistered.
+   * @param[in] item scene observer to be unregistered.
    */
-  void UnregisterModelView(Scene3D::ModelView modelView);
+  void UnregisterSceneItem(Scene3D::Internal::ImageBasedLightObserver* item);
 
   /**
    * @copydoc SceneView::SetImageBasedLightSource()
    */
-  void SetImageBasedLightSource(const std::string& diffuse, const std::string& specular, float scaleFactor);
+  void SetImageBasedLightSource(const std::string& diffuseUrl, const std::string& specularUrl, float scaleFactor);
+
+  /**
+   * @copydoc SceneView::SetImageBasedLightScaleFactor()
+   */
+  void SetImageBasedLightScaleFactor(float scaleFactor);
+
+  /**
+   * @copydoc SceneView::GetImageBasedLightScaleFactor()
+   */
+  float GetImageBasedLightScaleFactor() const;
 
   /**
    * @copydoc SceneView::UseFramebuffer()
@@ -123,7 +135,32 @@ public:
   /**
    * @copydoc SceneView::IsUsingFramebuffer()
    */
-  bool IsUsingFramebuffer();
+  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:
   /**
@@ -194,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::ModelView> 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                                        mFrameBuffer;
+  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
 };