Fixes crash after merge from tizen. 82/39682/4
authorFrancisco Santos <f1.santos@samsung.com>
Wed, 20 May 2015 18:06:49 +0000 (19:06 +0100)
committerFrancisco Santos <f1.santos@samsung.com>
Thu, 21 May 2015 13:59:11 +0000 (14:59 +0100)
Change-Id: Ic322d76fb22ddb18cd3c558e89583ceb0b0c3c09

dali/internal/render/data-providers/property-buffer-data-provider.h
dali/internal/render/renderers/render-geometry.cpp
dali/internal/render/renderers/render-geometry.h
dali/internal/render/renderers/render-renderer-property-buffer.cpp
dali/internal/render/renderers/render-renderer.cpp
dali/internal/render/renderers/render-renderer.h
dali/internal/update/node-attachments/scene-graph-renderer-attachment.cpp

index 474f890..f2a9ba7 100644 (file)
@@ -50,13 +50,6 @@ public:
   }
 
   /**
-   * Check if the data has changed
-   * @param[in] bufferIndex Index to access double buffered values
-   * @return true if the data has changed
-   */
-  virtual bool HasDataChanged( BufferIndex bufferIndex ) const = 0;
-
-  /**
    * Get the number of attributes
    * @param[in] bufferIndex Index to access double buffered values
    * @return the number of attributes
index 1a7044d..4713775 100644 (file)
@@ -87,24 +87,24 @@ void RenderGeometry::UploadVertexData(
   BufferIndex bufferIndex,
   const RenderDataProvider* dataProviders )
 {
-  if( mDataNeedsUploading ) // @todo Or if any of the property buffers are dirty
+  if( mDataNeedsUploading )
   {
-    DoUpload( context, bufferIndex, dataProviders );
+    SetUpPropertyBuffers( context, bufferIndex, dataProviders );
 
-    mDataNeedsUploading = false;
-  }
+    for( unsigned int i = 0; i < mVertexBuffers.Count(); ++i )
+    {
+      mVertexBuffers[i]->Upload( context, bufferIndex );
+    }
+    if( mIndexBuffer )
+    {
+      mIndexBuffer->Upload( context, bufferIndex );
+    }
 
-  for( unsigned int i = 0; i < mVertexBuffers.Count(); ++i )
-  {
-    mVertexBuffers[i]->Upload( context, bufferIndex );
-  }
-  if( mIndexBuffer )
-  {
-    mIndexBuffer->Upload( context, bufferIndex );
+    mDataNeedsUploading = false;
   }
 }
 
-void RenderGeometry::DoUpload(
+void RenderGeometry::SetUpPropertyBuffers(
   Context& context,
   BufferIndex bufferIndex,
   const RenderDataProvider* dataProvider )
index f4c7a19..f52ab35 100644 (file)
@@ -103,9 +103,9 @@ private:
    * @param[in] bufferIndex The current buffer index
    * @param[in] dataProviders The data providers (to fetch geometry from)
    */
-  void DoUpload( Context& context,
-                 BufferIndex bufferIndex,
-                 const RenderDataProvider* dataProviders );
+  void SetUpPropertyBuffers( Context& context,
+                             BufferIndex bufferIndex,
+                             const RenderDataProvider* dataProviders );
 
   /**
    * Bind the geometry buffers
index c1418db..3741063 100644 (file)
@@ -168,7 +168,7 @@ void RenderPropertyBuffer::Upload( Context& context, BufferIndex bufferIndex )
   }
 
   // Update the GpuBuffer
-  if ( mGpuBuffer && mDataProvider.HasDataChanged( bufferIndex ) )
+  if ( mGpuBuffer )
   {
     std::size_t dataSize = mDataProvider.GetDataSize( bufferIndex );
     DALI_ASSERT_DEBUG( dataSize && "No data in the property buffer!" );
index 40fb042..7b7f2cd 100644 (file)
@@ -55,6 +55,11 @@ void NewRenderer::SetRenderDataProvider( RenderDataProvider* dataProvider )
   mRenderGeometry.GeometryUpdated();
 }
 
+void NewRenderer::SetGeometryUpdated( )
+{
+  mRenderGeometry.GeometryUpdated();
+}
+
 // Note - this is currently called from UpdateThread, PrepareRenderInstructions,
 // as an optimisation.
 // @todo MESH_REWORK Should use Update thread objects only in PrepareRenderInstructions.
index efed81d..b01d4b1 100644 (file)
@@ -66,6 +66,11 @@ public:
    */
   void SetRenderDataProvider( RenderDataProvider* dataProviders );
 
+  /**
+   * Set flag that says that Geometry has been updated.
+   */
+  void SetGeometryUpdated();
+
 public: // Implementation of Renderer
   /**
    * @copydoc SceneGraph::Renderer::RequiresDepthTest()
index 1b2dc56..148e09b 100644 (file)
@@ -367,6 +367,27 @@ void RendererAttachment::DoPrepareRender( BufferIndex updateBufferIndex )
     mRegenerateUniformMap--;
   }
 
+  bool geometryDataChanged = false;
+  if( PropertyBuffer* indexBuffer = mGeometry->GetIndexBuffer() )
+  {
+    geometryDataChanged = indexBuffer->HasDataChanged(updateBufferIndex);
+  }
+  Vector<PropertyBuffer*>& vertexBuffers = mGeometry->GetVertexBuffers();
+  Vector<PropertyBuffer*>::ConstIterator end = vertexBuffers.End();
+  for( Vector<PropertyBuffer*>::Iterator it = vertexBuffers.Begin();
+       it != end;
+       ++it )
+  {
+    geometryDataChanged = geometryDataChanged || (*it)->HasDataChanged(updateBufferIndex);
+  }
+  if( geometryDataChanged )
+  {
+    //TODO: MESH_REWORK : use buffer data cache and remove all this
+    typedef Message< NewRenderer > DerivedType;
+    unsigned int* slot = mSceneController->GetRenderQueue().ReserveMessageSlot( updateBufferIndex, sizeof( DerivedType ) );
+    new (slot) DerivedType( mRenderer, &NewRenderer::SetGeometryUpdated );
+  }
+
   if( mResendDataProviders )
   {
     RenderDataProvider* dataProvider = NewRenderDataProvider();