+void Scene::SurfaceRotated(float width, float height, int32_t orientation)
+{
+ mSurfaceOrientation = orientation;
+ ChangedSurface(width, height, orientation);
+}
+
+int32_t Scene::GetCurrentSurfaceOrientation() const
+{
+ return mSceneObject->GetSurfaceOrientation();
+}
+
+const Rect<int32_t>& Scene::GetCurrentSurfaceRect() const
+{
+ return mSceneObject->GetSurfaceRect();
+}
+
+void Scene::ChangedSurface(float width, float height, int32_t orientation)
+{
+ Rect<int32_t> newSize(0, 0, static_cast<int32_t>(width), static_cast<int32_t>(height)); // truncated
+ mSize.width = width;
+ mSize.height = height;
+
+ // Calculates the aspect ratio, near and far clipping planes, field of view and camera Z position.
+ mDefaultCamera->SetPerspectiveProjection(mSize);
+ // Set the surface orientation to Default camera for window/screen rotation
+ mDefaultCamera->RotateProjection(orientation);
+
+ mRootLayer->SetSize(width, height);
+
+ // Send the surface rectangle/orientation to SceneGraph::Scene for calculating glViewport/Scissor
+ ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal();
+ SetSurfaceRectMessage(tls->GetEventThreadServices(), *mSceneObject, newSize);
+ SetSurfaceOrientationMessage(tls->GetEventThreadServices(), *mSceneObject, static_cast<int32_t>(orientation));
+
+ // set default render-task viewport parameters
+ RenderTaskPtr defaultRenderTask = mRenderTaskList->GetTask(0u);
+ defaultRenderTask->SetViewport(newSize);
+}
+
+bool Scene::IsSurfaceRectChanged() const
+{
+ return mSceneObject->IsSurfaceRectChanged();
+}
+
+bool Scene::IsRotationCompletedAcknowledgementSet() const
+{
+ return mSceneObject->IsRotationCompletedAcknowledgementSet();
+}
+
+void Scene::SetRotationCompletedAcknowledgement()
+{
+ ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal();
+ SetRotationCompletedAcknowledgementMessage(tls->GetEventThreadServices(), *mSceneObject);
+}
+
+void Scene::SetSurfaceRenderTarget(Graphics::RenderTarget* renderTarget)
+{
+ // Send the surface render target to SceneGraph::Scene
+ ThreadLocalStorage* tls = ThreadLocalStorage::GetInternal();
+ SetSurfaceRenderTargetMessage(tls->GetEventThreadServices(), *mSceneObject, renderTarget);
+}
+