Moved framebuffer messages from UpdateManager to FrameBuffer
[platform/core/uifw/dali-core.git] / dali / internal / update / rendering / scene-graph-geometry.cpp
index 7271343..2be9653 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2018 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.
  */
 
 // CLASS HEADER
-#include "scene-graph-geometry.h"
+#include <dali/internal/update/rendering/scene-graph-geometry.h>
 
 // INTERNAL HEADERS
-#include <dali/internal/update/controllers/scene-controller.h>
-#include <dali/internal/render/renderers/render-geometry.h>
-#include <dali/internal/render/renderers/render-property-buffer.h>
-#include <dali/internal/update/controllers/render-message-dispatcher.h>
+#include <dali/integration-api/debug.h>
+#include <dali/internal/common/buffer-index.h>
+#include <dali/internal/update/rendering/scene-graph-property-buffer.h>
 
 namespace Dali
 {
@@ -31,185 +30,51 @@ namespace SceneGraph
 {
 
 Geometry::Geometry()
-: mIndexBuffer( NULL ),
-  mRenderGeometry(0),
-  mSceneController(0),
-  mRendererRefCount(0u),
-  mCenter(),
-  mGeometryType(Dali::Geometry::TRIANGLES),
-  mRequiresDepthTest(false)
+: mGraphics( nullptr ),
+  mIndices(),
+  mGeometryType( Dali::Geometry::TRIANGLES ),
+  mIndicesChanged(false),
+  mHasBeenUpdated(false),
+  mAttributesChanged(true)
 {
-
-  // Observe our own PropertyOwner's uniform map
-  AddUniformMapObserver( *this );
 }
 
 Geometry::~Geometry()
 {
-  mConnectionObservers.Destroy( *this );
-}
-
-void Geometry::AddVertexBuffer( Render::PropertyBuffer* vertexBuffer )
-{
-  mVertexBuffers.PushBack( vertexBuffer );
-  mConnectionObservers.ConnectionsChanged(*this);
-
-  if( mRenderGeometry )
-  {
-    mSceneController->GetRenderMessageDispatcher().AddPropertyBuffer( *mRenderGeometry, vertexBuffer, false);
-  }
-}
-
-void Geometry::RemoveVertexBuffer( Render::PropertyBuffer* vertexBuffer )
-{
-  DALI_ASSERT_DEBUG( NULL != vertexBuffer );
-
-  // Find the object and destroy it
-  size_t bufferCount(mVertexBuffers.Size());
-  for( size_t i(0); i<bufferCount; ++i )
-  {
-    if( vertexBuffer == mVertexBuffers[i] )
-    {
-      mVertexBuffers.Erase( mVertexBuffers.Begin()+i );
-      mConnectionObservers.ConnectionsChanged(*this);
-
-      if( mRenderGeometry )
-      {
-        mSceneController->GetRenderMessageDispatcher().RemovePropertyBuffer( *mRenderGeometry, vertexBuffer );
-      }
-    }
-  }
-}
-
-void Geometry::SetIndexBuffer( Render::PropertyBuffer* indexBuffer )
-{
-  if( mIndexBuffer != indexBuffer )
-  {
-    mIndexBuffer = indexBuffer;
-    mConnectionObservers.ConnectionsChanged(*this);
-
-    if( mRenderGeometry )
-    {
-      mSceneController->GetRenderMessageDispatcher().AddPropertyBuffer( *mRenderGeometry, indexBuffer, true );
-    }
-  }
-}
-
-void Geometry::ClearIndexBuffer()
-{
-  if( mIndexBuffer )
-  {
-    if( mRenderGeometry )
-    {
-      mSceneController->GetRenderMessageDispatcher().RemovePropertyBuffer( *mRenderGeometry, mIndexBuffer );
-    }
-  }
-  mIndexBuffer = 0;
-  mConnectionObservers.ConnectionsChanged(*this);
 }
 
-void Geometry::SetGeometryType( BufferIndex bufferIndex, Geometry::GeometryType geometryType )
+void Geometry::Initialize( Integration::Graphics::Graphics& graphics )
 {
-  mGeometryType.Set( bufferIndex, geometryType);
+  mGraphics = &graphics;
 }
 
-Vector<Render::PropertyBuffer*>& Geometry::GetVertexBuffers()
+void Geometry::AddPropertyBuffer( SceneGraph::PropertyBuffer* propertyBuffer )
 {
-  return mVertexBuffers;
+  mVertexBuffers.PushBack( propertyBuffer );
+  mAttributesChanged = true;
 }
 
-Render::PropertyBuffer* Geometry::GetIndexBuffer()
+void Geometry::SetIndexBuffer( Dali::Vector<unsigned short>& indices )
 {
-  return mIndexBuffer;
+  mIndices.Swap( indices );
+  mIndicesChanged = true;
 }
 
-Geometry::GeometryType Geometry::GetGeometryType( BufferIndex bufferIndex) const
+void Geometry::RemovePropertyBuffer( const SceneGraph::PropertyBuffer* propertyBuffer )
 {
-  int geometryType = mGeometryType[ bufferIndex ];
-  return static_cast< GeometryDataProvider::GeometryType > ( geometryType );
-}
-
-bool Geometry::GetRequiresDepthTesting( BufferIndex bufferIndex ) const
-{
-  return mRequiresDepthTest.GetBoolean( bufferIndex );
-}
-
-void Geometry::ResetDefaultProperties( BufferIndex updateBufferIndex )
-{
-  // Reset the animated properties
-  mCenter.ResetToBaseValue( updateBufferIndex );
-
-  // Age the double buffered properties
-  mGeometryType.CopyPrevious(updateBufferIndex);
-  mRequiresDepthTest.CopyPrevious(updateBufferIndex);
-}
-
-void Geometry::ConnectToSceneGraph( SceneController& sceneController, BufferIndex bufferIndex )
-{
-}
-
-void Geometry::DisconnectFromSceneGraph( SceneController& sceneController, BufferIndex bufferIndex )
-{
-}
-
-void Geometry::AddConnectionObserver( ConnectionChangePropagator::Observer& observer )
-{
-  mConnectionObservers.Add(observer);
-}
-
-void Geometry::RemoveConnectionObserver( ConnectionChangePropagator::Observer& observer )
-{
-  mConnectionObservers.Remove(observer);
-}
-
-void Geometry::UniformMappingsChanged( const UniformMap& mappings )
-{
-  // Our uniform map, or that of one of the watched children has changed.
-  // Inform connected observers.
-  mConnectionObservers.ConnectedUniformMapChanged();
-}
-
-RenderGeometry* Geometry::GetRenderGeometry(SceneController* sceneController)
-{
-  if(!mRenderGeometry )
+  size_t bufferCount = mVertexBuffers.Size();
+  for( size_t i(0); i<bufferCount; ++i )
   {
-    //Create RenderGeometry
-    mSceneController = sceneController;
-    mRenderGeometry = new RenderGeometry( *this );
-
-    size_t vertexBufferCount( mVertexBuffers.Size() );
-    for( size_t i(0); i<vertexBufferCount; ++i )
+    if( propertyBuffer == mVertexBuffers[i] )
     {
-      mRenderGeometry->AddPropertyBuffer( mVertexBuffers[i], false );
+      //This will delete the gpu buffer associated to the RenderPropertyBuffer if there is one
+      mVertexBuffers.Remove( mVertexBuffers.Begin()+i );
+      mAttributesChanged = true;
+      break;
     }
-
-    if( mIndexBuffer )
-    {
-      mRenderGeometry->AddPropertyBuffer( mIndexBuffer, true );
-    }
-
-    //Transfer ownership to RenderManager
-    sceneController->GetRenderMessageDispatcher().AddGeometry( *mRenderGeometry );
-  }
-
-  ++mRendererRefCount;
-  return mRenderGeometry;
-}
-
-void Geometry::OnRendererDisconnect()
-{
-  --mRendererRefCount;
-  if( mRendererRefCount == 0 )
-  {
-    //Delete the corresponding RenderGeometry via message to RenderManager
-    mSceneController->GetRenderMessageDispatcher().RemoveGeometry( *mRenderGeometry );
-
-    mRenderGeometry = 0;
-    mSceneController = 0;
   }
 }
 
-
 } // namespace SceneGraph
 } // namespace Internal
 } // namespace Dali