Use UNSIGNED_INTEGER for index buffers. 88/38888/1
authorFrancisco Santos <f1.santos@samsung.com>
Wed, 29 Apr 2015 16:21:43 +0000 (17:21 +0100)
committerFrancisco Santos <f1.santos@samsung.com>
Wed, 29 Apr 2015 16:21:43 +0000 (17:21 +0100)
Change-Id: I0ae54acb4f1231f1b0bb3ccafaceded41f836b2b

dali/internal/render/renderers/render-geometry.cpp
dali/internal/render/renderers/render-renderer-property-buffer.cpp

index 5987979..1a7044d 100644 (file)
@@ -180,7 +180,7 @@ void RenderGeometry::Draw( Context& context, BufferIndex bufferIndex, const Rend
   unsigned int numIndices = 0;
   if( indexBuffer )
   {
-    numIndices = /* TODO: MESH_REWORK remove this 2, should implement unsigned short properties  */ 2 * indexBuffer->GetDataSize(bufferIndex) / indexBuffer->GetElementSize(bufferIndex);
+    numIndices = indexBuffer->GetDataSize(bufferIndex) / indexBuffer->GetElementSize(bufferIndex);
   }
 
   switch(type)
index aae5f02..714df70 100644 (file)
@@ -61,7 +61,23 @@ void RenderPropertyBuffer::Upload( Context& context, BufferIndex bufferIndex )
   if ( ! hasGpuBuffer || mDataProvider.HasDataChanged( bufferIndex ) )
   {
     std::size_t dataSize = mDataProvider.GetDataSize( bufferIndex );
-    mGpuBuffer->UpdateDataBuffer( dataSize, &(mDataProvider.GetData( bufferIndex )[0]) );
+
+    const void *data = &(mDataProvider.GetData( bufferIndex )[0]);
+
+    // Index buffer needs to be unsigned short which is not supported by the property system
+    if( mGpuBufferTarget == GpuBuffer::ELEMENT_ARRAY_BUFFER )
+    {
+      Vector<unsigned short> ushortData;
+      ushortData.Resize( dataSize );
+      const unsigned int* unsignedData = static_cast<const unsigned int*>(data);
+      for( unsigned int i = 0; i < dataSize; ++i )
+      {
+        ushortData[i] = unsignedData[i];
+      }
+      data = &(ushortData[0]);
+    }
+
+    mGpuBuffer->UpdateDataBuffer( dataSize, data );
     mGpuBuffer->SetStride( mDataProvider.GetElementSize( bufferIndex ) );
   }
 }