add DrawQuadStrip
This commit is contained in:
@@ -211,6 +211,7 @@ public:
|
||||
|
||||
void DrawQuad( const RageSpriteVertex v[] ) { DrawQuads(v,4); } /* alias. upper-left, upper-right, lower-left, lower-right */
|
||||
virtual void DrawQuads( const RageSpriteVertex v[], int iNumVerts ) = 0;
|
||||
virtual void DrawQuadStrip( const RageSpriteVertex v[], int iNumVerts ) = 0;
|
||||
virtual void DrawFan( const RageSpriteVertex v[], int iNumVerts ) = 0;
|
||||
virtual void DrawStrip( const RageSpriteVertex v[], int iNumVerts ) = 0;
|
||||
virtual void DrawTriangles( const RageSpriteVertex v[], int iNumVerts ) = 0;
|
||||
|
||||
@@ -868,6 +868,50 @@ void RageDisplay_D3D::DrawQuads( const RageSpriteVertex v[], int iNumVerts )
|
||||
|
||||
StatsAddVerts( iNumVerts );
|
||||
}
|
||||
|
||||
void RageDisplay_D3D::DrawQuadStrip( const RageSpriteVertex v[], int iNumVerts )
|
||||
{
|
||||
ASSERT( (iNumVerts%2) == 0 );
|
||||
|
||||
if(iNumVerts < 4)
|
||||
return;
|
||||
|
||||
// there isn't a quad strip primitive in D3D, so we have to fake it with indexed triangles
|
||||
int iNumQuads = (iNumVerts-2)/2;
|
||||
int iNumTriangles = iNumQuads*2;
|
||||
int iNumIndices = iNumTriangles*3;
|
||||
|
||||
// make a temporary index buffer
|
||||
static vector<Uint16> vIndices;
|
||||
unsigned uOldSize = vIndices.size();
|
||||
unsigned uNewSize = max(uOldSize,(unsigned)iNumIndices);
|
||||
vIndices.resize( uNewSize );
|
||||
for( Uint16 i=(Uint16)uOldSize/6; i<(Uint16)iNumQuads; i++ )
|
||||
{
|
||||
vIndices[i*6+0] = i*2+0;
|
||||
vIndices[i*6+1] = i*2+1;
|
||||
vIndices[i*6+2] = i*2+2;
|
||||
vIndices[i*6+3] = i*2+1;
|
||||
vIndices[i*6+4] = i*2+2;
|
||||
vIndices[i*6+5] = i*2+3;
|
||||
}
|
||||
|
||||
g_pd3dDevice->SetVertexShader( D3DFVF_RageSpriteVertex );
|
||||
SEND_CURRENT_MATRICES;
|
||||
g_pd3dDevice->DrawIndexedPrimitiveUP(
|
||||
D3DPT_TRIANGLELIST, // PrimitiveType
|
||||
0, // MinIndex
|
||||
iNumVerts, // NumVertices
|
||||
iNumTriangles, // PrimitiveCount,
|
||||
&vIndices[0], // pIndexData,
|
||||
D3DFMT_INDEX16, // IndexDataFormat,
|
||||
v, // pVertexStreamZeroData,
|
||||
sizeof(RageSpriteVertex) // VertexStreamZeroStride
|
||||
);
|
||||
|
||||
StatsAddVerts( iNumVerts );
|
||||
}
|
||||
|
||||
void RageDisplay_D3D::DrawFan( const RageSpriteVertex v[], int iNumVerts )
|
||||
{
|
||||
ASSERT( iNumVerts >= 3 );
|
||||
|
||||
@@ -79,6 +79,7 @@ public:
|
||||
void DeleteRageModelVertexArray( RageModelVertexArray* p );
|
||||
|
||||
void DrawQuads( const RageSpriteVertex v[], int iNumVerts );
|
||||
void DrawQuadStrip( const RageSpriteVertex v[], int iNumVerts );
|
||||
void DrawFan( const RageSpriteVertex v[], int iNumVerts );
|
||||
void DrawStrip( const RageSpriteVertex v[], int iNumVerts );
|
||||
void DrawTriangles( const RageSpriteVertex v[], int iNumVerts );
|
||||
|
||||
@@ -64,6 +64,7 @@ public:
|
||||
void DeleteRageModelVertexArray( RageModelVertexArray* p );
|
||||
|
||||
void DrawQuads( const RageSpriteVertex v[], int iNumVerts ) { }
|
||||
void DrawQuadStrip( const RageSpriteVertex v[], int iNumVerts ) { }
|
||||
void DrawFan( const RageSpriteVertex v[], int iNumVerts ) { }
|
||||
void DrawStrip( const RageSpriteVertex v[], int iNumVerts ) { }
|
||||
void DrawTriangles( const RageSpriteVertex v[], int iNumVerts ) { }
|
||||
|
||||
@@ -1150,6 +1150,21 @@ void RageDisplay_OGL::DrawQuads( const RageSpriteVertex v[], int iNumVerts )
|
||||
StatsAddVerts( iNumVerts );
|
||||
}
|
||||
|
||||
void RageDisplay_OGL::DrawQuadStrip( const RageSpriteVertex v[], int iNumVerts )
|
||||
{
|
||||
ASSERT( (iNumVerts%2) == 0 );
|
||||
|
||||
if(iNumVerts < 4)
|
||||
return;
|
||||
|
||||
SendCurrentMatrices();
|
||||
|
||||
SetupVertices( v, iNumVerts );
|
||||
glDrawArrays( GL_QUAD_STRIP, 0, iNumVerts );
|
||||
|
||||
StatsAddVerts( iNumVerts );
|
||||
}
|
||||
|
||||
void RageDisplay_OGL::DrawFan( const RageSpriteVertex v[], int iNumVerts )
|
||||
{
|
||||
ASSERT( iNumVerts >= 3 );
|
||||
|
||||
@@ -65,6 +65,7 @@ public:
|
||||
void DeleteRageModelVertexArray( RageModelVertexArray* p );
|
||||
|
||||
void DrawQuads( const RageSpriteVertex v[], int iNumVerts );
|
||||
void DrawQuadStrip( const RageSpriteVertex v[], int iNumVerts );
|
||||
void DrawFan( const RageSpriteVertex v[], int iNumVerts );
|
||||
void DrawStrip( const RageSpriteVertex v[], int iNumVerts );
|
||||
void DrawTriangles( const RageSpriteVertex v[], int iNumVerts );
|
||||
|
||||
Reference in New Issue
Block a user