* | /| /| /|
* |/ |/ |/ |
* 4--5--6--7
- * | /| | /|
- * |/ | |/ |
+ * |\ | |\ |
+ * | \| | \|
* 8--9--10-11
- * | /| /| /|
- * |/ |/ |/ |
+ * | /| /|\ |
+ * |/ |/ | \|
* 12-13-14-15
*/
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;
}
}\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;
Geometry geometry = Geometry::New();
geometry.AddVertexBuffer( vertexPropertyBuffer );
geometry.SetIndexBuffer( indexPropertyBuffer );
+ geometry.SetGeometryType( Geometry::TRIANGLE_STRIP );
return geometry;
}
// 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 );
}
}
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;
}