From: Xiangyin Ma Date: Fri, 2 Oct 2015 14:55:25 +0000 (+0100) Subject: Change geometry to use triangle strip X-Git-Tag: dali_1.1.6~5 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=b08454f14ca39923831d32684889b52e733b754a Change geometry to use triangle strip Change-Id: Ie35aec87ba51285fc682310baa4f3842b7c8fe68 --- diff --git a/dali-toolkit/internal/controls/renderers/border/border-renderer.cpp b/dali-toolkit/internal/controls/renderers/border/border-renderer.cpp index 6542a2c..5456c32 100644 --- a/dali-toolkit/internal/controls/renderers/border/border-renderer.cpp +++ b/dali-toolkit/internal/controls/renderers/border/border-renderer.cpp @@ -180,11 +180,11 @@ void BorderRenderer::SetBorderSize( float size ) * | /| /| /| * |/ |/ |/ | * 4--5--6--7 - * | /| | /| - * |/ | |/ | + * |\ | |\ | + * | \| | \| * 8--9--10-11 - * | /| /| /| - * |/ |/ |/ | + * | /| /|\ | + * |/ |/ | \| * 12-13-14-15 */ Geometry BorderRenderer::CreateBorderGeometry() @@ -222,19 +222,17 @@ Geometry BorderRenderer::CreateBorderGeometry() borderVertices.SetData(borderVertexData); // Create indices - unsigned int indexData[48] = { 0, 4, 1, 1, 4, 5, 1, 5, 2, 2, 5, 6, 2, 6,3, 3, 6, 7, - 4, 8, 5, 5, 8, 9, 6, 10, 7, 7, 10, 11, - 8, 12, 9, 9, 12, 13, 9, 13, 10, 10, 13, 14, 10, 11, 14, 11, 14, 15}; - + unsigned int indexData[24] = { 0,4,1,5,2,6,3,7,7,6,11,10,15,14,14,10,13,9,12,8,8,9,4,5 }; Property::Map indexFormat; indexFormat[INDEX_NAME] = Property::INTEGER; - PropertyBuffer indices = PropertyBuffer::New( indexFormat, 48 ); + PropertyBuffer indices = PropertyBuffer::New( indexFormat, 24 ); indices.SetData(indexData); // Create the geometry object Geometry geometry = Geometry::New(); geometry.AddVertexBuffer( borderVertices ); geometry.SetIndexBuffer( indices ); + geometry.SetGeometryType( Geometry::TRIANGLE_STRIP ); return geometry; } diff --git a/dali-toolkit/internal/controls/renderers/image/image-renderer.cpp b/dali-toolkit/internal/controls/renderers/image/image-renderer.cpp index 4770960..9e07fc9 100644 --- a/dali-toolkit/internal/controls/renderers/image/image-renderer.cpp +++ b/dali-toolkit/internal/controls/renderers/image/image-renderer.cpp @@ -95,17 +95,6 @@ const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( }\n ); -void AddQuadIndices( Vector< unsigned int >& indices, unsigned int rowIdx, unsigned int nextRowIdx ) -{ - indices.PushBack( rowIdx ); - indices.PushBack( nextRowIdx + 1 ); - indices.PushBack( rowIdx + 1 ); - - indices.PushBack( rowIdx ); - indices.PushBack( nextRowIdx ); - indices.PushBack( nextRowIdx + 1 ); -} - Geometry GenerateGeometry( const Vector< Vector2 >& vertices, const Vector< unsigned int >& indices ) { Property::Map vertexFormat; @@ -128,6 +117,7 @@ Geometry GenerateGeometry( const Vector< Vector2 >& vertices, const Vector< unsi Geometry geometry = Geometry::New(); geometry.AddVertexBuffer( vertexPropertyBuffer ); geometry.SetIndexBuffer( indexPropertyBuffer ); + geometry.SetGeometryType( Geometry::TRIANGLE_STRIP ); return geometry; } @@ -164,15 +154,27 @@ Geometry CreateGeometry( RendererFactoryCache& factoryCache, ImageDimensions gri // Create indices Vector< unsigned int > indices; - indices.Reserve( gridWidth * gridHeight * 6 ); + indices.Reserve( (gridWidth+2)*gridHeight*2 - 2); - unsigned int rowIdx = 0; - unsigned int nextRowIdx = gridWidth + 1; - for( int y = 0; y < gridHeight; ++y, ++nextRowIdx, ++rowIdx ) + for( unsigned int row = 0u; row < gridHeight; ++row ) { - for( int x = 0; x < gridWidth; ++x, ++nextRowIdx, ++rowIdx ) + unsigned int rowStartIndex = row*(gridWidth+1u); + unsigned int nextRowStartIndex = rowStartIndex + gridWidth +1u; + + if( row != 0u ) // degenerate index on non-first row + { + indices.PushBack( rowStartIndex ); + } + + for( unsigned int column = 0u; column < gridWidth+1u; column++) // main strip + { + indices.PushBack( rowStartIndex + column); + indices.PushBack( nextRowStartIndex + column); + } + + if( row != gridHeight-1u ) // degenerate index on non-last row { - AddQuadIndices( indices, rowIdx, nextRowIdx ); + indices.PushBack( nextRowStartIndex + gridWidth ); } } diff --git a/dali-toolkit/internal/controls/renderers/renderer-factory-cache.cpp b/dali-toolkit/internal/controls/renderers/renderer-factory-cache.cpp index cf8c47a..41bc77c 100644 --- a/dali-toolkit/internal/controls/renderers/renderer-factory-cache.cpp +++ b/dali-toolkit/internal/controls/renderers/renderer-factory-cache.cpp @@ -91,18 +91,10 @@ Geometry RendererFactoryCache::CreateQuadGeometry() PropertyBuffer quadVertices = PropertyBuffer::New( quadVertexFormat, 4 ); quadVertices.SetData(quadVertexData); - // Create indices - //TODO: replace with triangle strip when Geometry supports it - unsigned int indexData[6] = { 0, 3, 1, 0, 2, 3 }; - Property::Map indexFormat; - indexFormat["indices"] = Property::INTEGER; - PropertyBuffer indices = PropertyBuffer::New( indexFormat, 6 ); - indices.SetData(indexData); - // Create the geometry object Geometry geometry = Geometry::New(); geometry.AddVertexBuffer( quadVertices ); - geometry.SetIndexBuffer( indices ); + geometry.SetGeometryType( Geometry::TRIANGLE_STRIP ); return geometry; }