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 */
|
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 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 DrawFan( const RageSpriteVertex v[], int iNumVerts ) = 0;
|
||||||
virtual void DrawStrip( const RageSpriteVertex v[], int iNumVerts ) = 0;
|
virtual void DrawStrip( const RageSpriteVertex v[], int iNumVerts ) = 0;
|
||||||
virtual void DrawTriangles( 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 );
|
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 )
|
void RageDisplay_D3D::DrawFan( const RageSpriteVertex v[], int iNumVerts )
|
||||||
{
|
{
|
||||||
ASSERT( iNumVerts >= 3 );
|
ASSERT( iNumVerts >= 3 );
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ public:
|
|||||||
void DeleteRageModelVertexArray( RageModelVertexArray* p );
|
void DeleteRageModelVertexArray( RageModelVertexArray* p );
|
||||||
|
|
||||||
void DrawQuads( const RageSpriteVertex v[], int iNumVerts );
|
void DrawQuads( const RageSpriteVertex v[], int iNumVerts );
|
||||||
|
void DrawQuadStrip( const RageSpriteVertex v[], int iNumVerts );
|
||||||
void DrawFan( const RageSpriteVertex v[], int iNumVerts );
|
void DrawFan( const RageSpriteVertex v[], int iNumVerts );
|
||||||
void DrawStrip( const RageSpriteVertex v[], int iNumVerts );
|
void DrawStrip( const RageSpriteVertex v[], int iNumVerts );
|
||||||
void DrawTriangles( const RageSpriteVertex v[], int iNumVerts );
|
void DrawTriangles( const RageSpriteVertex v[], int iNumVerts );
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ public:
|
|||||||
void DeleteRageModelVertexArray( RageModelVertexArray* p );
|
void DeleteRageModelVertexArray( RageModelVertexArray* p );
|
||||||
|
|
||||||
void DrawQuads( const RageSpriteVertex v[], int iNumVerts ) { }
|
void DrawQuads( const RageSpriteVertex v[], int iNumVerts ) { }
|
||||||
|
void DrawQuadStrip( const RageSpriteVertex v[], int iNumVerts ) { }
|
||||||
void DrawFan( const RageSpriteVertex v[], int iNumVerts ) { }
|
void DrawFan( const RageSpriteVertex v[], int iNumVerts ) { }
|
||||||
void DrawStrip( const RageSpriteVertex v[], int iNumVerts ) { }
|
void DrawStrip( const RageSpriteVertex v[], int iNumVerts ) { }
|
||||||
void DrawTriangles( 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 );
|
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 )
|
void RageDisplay_OGL::DrawFan( const RageSpriteVertex v[], int iNumVerts )
|
||||||
{
|
{
|
||||||
ASSERT( iNumVerts >= 3 );
|
ASSERT( iNumVerts >= 3 );
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ public:
|
|||||||
void DeleteRageModelVertexArray( RageModelVertexArray* p );
|
void DeleteRageModelVertexArray( RageModelVertexArray* p );
|
||||||
|
|
||||||
void DrawQuads( const RageSpriteVertex v[], int iNumVerts );
|
void DrawQuads( const RageSpriteVertex v[], int iNumVerts );
|
||||||
|
void DrawQuadStrip( const RageSpriteVertex v[], int iNumVerts );
|
||||||
void DrawFan( const RageSpriteVertex v[], int iNumVerts );
|
void DrawFan( const RageSpriteVertex v[], int iNumVerts );
|
||||||
void DrawStrip( const RageSpriteVertex v[], int iNumVerts );
|
void DrawStrip( const RageSpriteVertex v[], int iNumVerts );
|
||||||
void DrawTriangles( const RageSpriteVertex v[], int iNumVerts );
|
void DrawTriangles( const RageSpriteVertex v[], int iNumVerts );
|
||||||
|
|||||||
Reference in New Issue
Block a user