Initialized SG::Scene::mGraphicsController in constructor
[platform/core/uifw/dali-core.git] / dali / internal / update / common / scene-graph-scene.cpp
index 3526f5d..2aa0287 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -19,7 +19,6 @@
 
 // INTERNAL INCLUDES
 #include <dali/integration-api/core-enumerations.h>
-#include <dali/internal/render/gl-resources/context.h>
 #include <dali/internal/update/render-tasks/scene-graph-render-task-list.h>
 
 namespace Dali
@@ -29,13 +28,13 @@ namespace Internal
 namespace SceneGraph
 {
 Scene::Scene()
-: mContext(nullptr),
-  mFrameRenderedCallbacks(),
+: mFrameRenderedCallbacks(),
   mFramePresentedCallbacks(),
   mSkipRendering(false),
   mSurfaceRect(),
   mSurfaceOrientation(0),
-  mSurfaceRectChanged(false)
+  mSurfaceRectChanged(false),
+  mRotationCompletedAcknowledgement(false)
 {
 }
 
@@ -45,9 +44,12 @@ Scene::~Scene()
   mFramePresentedCallbacks.clear();
 }
 
-void Scene::Initialize(Context& context, Graphics::Controller& graphicsController, Integration::DepthBufferAvailable depthBufferAvailable, Integration::StencilBufferAvailable stencilBufferAvailable)
+void Scene::Initialize(Graphics::Controller& graphicsController, Integration::DepthBufferAvailable depthBufferAvailable, Integration::StencilBufferAvailable stencilBufferAvailable)
 {
-  mContext = &context;
+  mGraphicsController = &graphicsController;
+
+  // Create the render target for the surface. It should already have been sent via message.
+  mRenderTarget = graphicsController.CreateRenderTarget(mRenderTargetCreateInfo, std::move(mRenderTarget));
 
   // Create the render pass for the surface
   std::vector<Graphics::AttachmentDescription> attachmentDescriptions;
@@ -97,11 +99,6 @@ void Scene::Initialize(Context& context, Graphics::Controller& graphicsControlle
   mRenderPassNoClear = graphicsController.CreateRenderPass(rpInfo, nullptr); // Warning: Shallow ptr
 }
 
-Context* Scene::GetContext()
-{
-  return mContext;
-}
-
 RenderInstructionContainer& Scene::GetRenderInstructions()
 {
   return mInstructions;
@@ -178,6 +175,42 @@ bool Scene::IsSurfaceRectChanged()
   return surfaceRectChanged;
 }
 
+void Scene::SetRotationCompletedAcknowledgement()
+{
+  mRotationCompletedAcknowledgement = true;
+}
+
+bool Scene::IsRotationCompletedAcknowledgementSet()
+{
+  bool setRotationCompletedAcknowledgement = mRotationCompletedAcknowledgement;
+  mRotationCompletedAcknowledgement        = false;
+  return setRotationCompletedAcknowledgement;
+}
+
+std::vector<DirtyRect>& Scene::GetItemsDirtyRects()
+{
+  return mItemsDirtyRects;
+}
+
+void Scene::SetSurfaceRenderTargetCreateInfo(const Graphics::RenderTargetCreateInfo& renderTargetCreateInfo)
+{
+  if(mRenderTarget != nullptr &&
+     mRenderTargetCreateInfo.surface != renderTargetCreateInfo.surface)
+  {
+    // Only recreate if the surface has changed.
+    mRenderTargetCreateInfo = renderTargetCreateInfo;
+    if(mGraphicsController) // shouldn't be null, as we can't have already set mRenderTarget unless graphics controller exists.
+    {
+      mRenderTarget = mGraphicsController->CreateRenderTarget(renderTargetCreateInfo, std::move(mRenderTarget));
+    }
+  }
+  else
+  {
+    // 2nd Stage initialization happens in RenderManager, not UpdateManager, so is delayed.
+    mRenderTargetCreateInfo = renderTargetCreateInfo;
+  }
+}
+
 } // namespace SceneGraph
 
 } // namespace Internal