From 1585f3ef1989225ce993937cb03b2c84834f1c82 Mon Sep 17 00:00:00 2001 From: Francisco Santos Date: Wed, 29 Apr 2015 17:21:43 +0100 Subject: [PATCH] Use UNSIGNED_INTEGER for index buffers. Change-Id: I0ae54acb4f1231f1b0bb3ccafaceded41f836b2b --- dali/internal/render/renderers/render-geometry.cpp | 2 +- .../renderers/render-renderer-property-buffer.cpp | 18 +++++++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/dali/internal/render/renderers/render-geometry.cpp b/dali/internal/render/renderers/render-geometry.cpp index 5987979..1a7044d 100644 --- a/dali/internal/render/renderers/render-geometry.cpp +++ b/dali/internal/render/renderers/render-geometry.cpp @@ -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) diff --git a/dali/internal/render/renderers/render-renderer-property-buffer.cpp b/dali/internal/render/renderers/render-renderer-property-buffer.cpp index aae5f02..714df70 100644 --- a/dali/internal/render/renderers/render-renderer-property-buffer.cpp +++ b/dali/internal/render/renderers/render-renderer-property-buffer.cpp @@ -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 ushortData; + ushortData.Resize( dataSize ); + const unsigned int* unsignedData = static_cast(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 ) ); } } -- 2.7.4