move rendundant renderer code to be shared by all

This commit is contained in:
Chris Danford
2004-04-15 05:24:28 +00:00
parent feb14c6b84
commit 3dc41e5d94
7 changed files with 129 additions and 100 deletions
+75 -2
View File
@@ -168,7 +168,7 @@ void RageDisplay::DrawPolyLine(const RageSpriteVertex &p1, const RageSpriteVerte
}
void RageDisplay::DrawLineStrip( const RageSpriteVertex v[], int iNumVerts, float LineWidth )
void RageDisplay::DrawLineStripInternal( const RageSpriteVertex v[], int iNumVerts, float LineWidth )
{
ASSERT( iNumVerts >= 2 );
@@ -184,7 +184,7 @@ void RageDisplay::DrawLineStrip( const RageSpriteVertex v[], int iNumVerts, floa
DrawCircle( v[i], LineWidth/2 );
}
void RageDisplay::DrawCircle( const RageSpriteVertex &p, float radius )
void RageDisplay::DrawCircleInternal( const RageSpriteVertex &p, float radius )
{
const int subdivisions = 32;
RageSpriteVertex v[subdivisions+2];
@@ -678,3 +678,76 @@ bool RageDisplay::SaveScreenshot( CString sPath, GraphicsFileFormat format )
return true;
}
void RageDisplay::DrawQuads( const RageSpriteVertex v[], int iNumVerts )
{
ASSERT( (iNumVerts%4) == 0 );
if(iNumVerts == 0)
return;
this->DrawQuadsInternal(v,iNumVerts);
StatsAddVerts(iNumVerts);
}
void RageDisplay::DrawQuadStrip( const RageSpriteVertex v[], int iNumVerts )
{
ASSERT( (iNumVerts%2) == 0 );
if(iNumVerts < 4)
return;
this->DrawQuadStripInternal(v,iNumVerts);
StatsAddVerts(iNumVerts);
}
void RageDisplay::DrawFan( const RageSpriteVertex v[], int iNumVerts )
{
ASSERT( iNumVerts >= 3 );
this->DrawFanInternal(v,iNumVerts);
StatsAddVerts(iNumVerts);
}
void RageDisplay::DrawStrip( const RageSpriteVertex v[], int iNumVerts )
{
ASSERT( iNumVerts >= 3 );
this->DrawStripInternal(v,iNumVerts);
StatsAddVerts(iNumVerts);
}
void RageDisplay::DrawTriangles( const RageSpriteVertex v[], int iNumVerts )
{
if( iNumVerts == 0 )
return;
ASSERT( iNumVerts >= 3 );
this->DrawTrianglesInternal(v,iNumVerts);
StatsAddVerts(iNumVerts);
}
void RageDisplay::DrawIndexedTriangles( const RageModelVertexArray *p )
{
this->DrawIndexedTrianglesInternal(p);
StatsAddVerts(p->sizeTriangles()*3);
}
void RageDisplay::DrawLineStrip( const RageSpriteVertex v[], int iNumVerts, float LineWidth )
{
ASSERT( iNumVerts >= 2 );
this->DrawLineStripInternal( v, iNumVerts, LineWidth );
}
void RageDisplay::DrawCircle( const RageSpriteVertex &v, float radius )
{
this->DrawCircleInternal( v, radius );
}
+18 -9
View File
@@ -209,17 +209,17 @@ public:
virtual RageModelVertexArray* CreateRageModelVertexArray() = 0;
virtual void DeleteRageModelVertexArray( RageModelVertexArray* p ) = 0;
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;
virtual void DrawIndexedTriangles( const RageModelVertexArray *p ) = 0;
virtual void DrawLineStrip( const RageSpriteVertex v[], int iNumVerts, float LineWidth );
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 );
void DrawIndexedTriangles( const RageModelVertexArray *p );
void DrawLineStrip( const RageSpriteVertex v[], int iNumVerts, float LineWidth );
void DrawCircle( const RageSpriteVertex &v, float radius );
void DrawQuad( const RageSpriteVertex v[] ) { DrawQuads(v,4); } /* alias. upper-left, upper-right, lower-left, lower-right */
enum GraphicsFileFormat
{
SAVE_LOSSLESS, // bmp
@@ -231,6 +231,15 @@ public:
virtual CString GetTextureDiagnostics( unsigned id ) const { return ""; }
protected:
virtual void DrawQuadsInternal( const RageSpriteVertex v[], int iNumVerts ) = 0;
virtual void DrawQuadStripInternal( const RageSpriteVertex v[], int iNumVerts ) = 0;
virtual void DrawFanInternal( const RageSpriteVertex v[], int iNumVerts ) = 0;
virtual void DrawStripInternal( const RageSpriteVertex v[], int iNumVerts ) = 0;
virtual void DrawTrianglesInternal( const RageSpriteVertex v[], int iNumVerts ) = 0;
virtual void DrawIndexedTrianglesInternal( const RageModelVertexArray *p ) = 0;
virtual void DrawLineStripInternal( const RageSpriteVertex v[], int iNumVerts, float LineWidth );
virtual void DrawCircleInternal( const RageSpriteVertex &v, float radius );
// Return "" if mode change was successful, an error message otherwise.
// bNewDeviceOut is set true if a new device was created and textures
// need to be reloaded.
+6 -30
View File
@@ -826,13 +826,8 @@ void RageDisplay_D3D::DeleteRageModelVertexArray( RageModelVertexArray* p )
delete p;
}
void RageDisplay_D3D::DrawQuads( const RageSpriteVertex v[], int iNumVerts )
void RageDisplay_D3D::DrawQuadsInternal( const RageSpriteVertex v[], int iNumVerts )
{
ASSERT( (iNumVerts%4) == 0 );
if(iNumVerts == 0)
return;
// there isn't a quad primitive in D3D, so we have to fake it with indexed triangles
int iNumQuads = iNumVerts/4;
int iNumTriangles = iNumQuads*2;
@@ -865,17 +860,10 @@ void RageDisplay_D3D::DrawQuads( const RageSpriteVertex v[], int iNumVerts )
v, // pVertexStreamZeroData,
sizeof(RageSpriteVertex) // VertexStreamZeroStride
);
StatsAddVerts( iNumVerts );
}
void RageDisplay_D3D::DrawQuadStrip( const RageSpriteVertex v[], int iNumVerts )
void RageDisplay_D3D::DrawQuadStripInternal( 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;
@@ -908,13 +896,10 @@ void RageDisplay_D3D::DrawQuadStrip( const RageSpriteVertex v[], int iNumVerts )
v, // pVertexStreamZeroData,
sizeof(RageSpriteVertex) // VertexStreamZeroStride
);
StatsAddVerts( iNumVerts );
}
void RageDisplay_D3D::DrawFan( const RageSpriteVertex v[], int iNumVerts )
void RageDisplay_D3D::DrawFanInternal( const RageSpriteVertex v[], int iNumVerts )
{
ASSERT( iNumVerts >= 3 );
g_pd3dDevice->SetVertexShader( D3DFVF_RageSpriteVertex );
SEND_CURRENT_MATRICES;
g_pd3dDevice->DrawPrimitiveUP(
@@ -923,12 +908,10 @@ void RageDisplay_D3D::DrawFan( const RageSpriteVertex v[], int iNumVerts )
v, // pVertexStreamZeroData,
sizeof(RageSpriteVertex)
);
StatsAddVerts( iNumVerts );
}
void RageDisplay_D3D::DrawStrip( const RageSpriteVertex v[], int iNumVerts )
void RageDisplay_D3D::DrawStripInternal( const RageSpriteVertex v[], int iNumVerts )
{
ASSERT( iNumVerts >= 3 );
g_pd3dDevice->SetVertexShader( D3DFVF_RageSpriteVertex );
SEND_CURRENT_MATRICES;
g_pd3dDevice->DrawPrimitiveUP(
@@ -937,14 +920,10 @@ void RageDisplay_D3D::DrawStrip( const RageSpriteVertex v[], int iNumVerts )
v, // pVertexStreamZeroData,
sizeof(RageSpriteVertex)
);
StatsAddVerts( iNumVerts );
}
void RageDisplay_D3D::DrawTriangles( const RageSpriteVertex v[], int iNumVerts )
void RageDisplay_D3D::DrawTrianglesInternal( const RageSpriteVertex v[], int iNumVerts )
{
if( iNumVerts == 0 )
return;
ASSERT( iNumVerts >= 3 );
g_pd3dDevice->SetVertexShader( D3DFVF_RageSpriteVertex );
SEND_CURRENT_MATRICES;
g_pd3dDevice->DrawPrimitiveUP(
@@ -953,16 +932,13 @@ void RageDisplay_D3D::DrawTriangles( const RageSpriteVertex v[], int iNumVerts )
v, // pVertexStreamZeroData,
sizeof(RageSpriteVertex)
);
StatsAddVerts( iNumVerts );
}
void RageDisplay_D3D::DrawIndexedTriangles( const RageModelVertexArray *p )
void RageDisplay_D3D::DrawIndexedTrianglesInternal( const RageModelVertexArray *p )
{
SEND_CURRENT_MATRICES;
p->Draw();
StatsAddVerts( p->sizeTriangles()*3 );
}
/* Use the default poly-based implementation. D3D lines apparently don't support
+7 -8
View File
@@ -78,15 +78,14 @@ public:
RageModelVertexArray* CreateRageModelVertexArray();
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 );
void DrawIndexedTriangles( const RageModelVertexArray *p );
// void DrawLineStrip( const RageSpriteVertex v[], int iNumVerts, float LineWidth );
protected:
void DrawQuadsInternal( const RageSpriteVertex v[], int iNumVerts );
void DrawQuadStripInternal( const RageSpriteVertex v[], int iNumVerts );
void DrawFanInternal( const RageSpriteVertex v[], int iNumVerts );
void DrawStripInternal( const RageSpriteVertex v[], int iNumVerts );
void DrawTrianglesInternal( const RageSpriteVertex v[], int iNumVerts );
void DrawIndexedTrianglesInternal( const RageModelVertexArray *p );
CString TryVideoMode( VideoModeParams params, bool &bNewDeviceOut );
SDL_Surface* CreateScreenshot();
void SetViewport(int shift_left, int shift_down);
+8 -8
View File
@@ -63,15 +63,15 @@ public:
RageModelVertexArray* CreateRageModelVertexArray();
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 ) { }
void DrawIndexedTriangles( const RageModelVertexArray *p ) { }
void DrawLineStrip( const RageSpriteVertex v[], int iNumVerts, float LineWidth ) { }
protected:
void DrawQuadsInternal( const RageSpriteVertex v[], int iNumVerts ) { }
void DrawQuadStripInternal( const RageSpriteVertex v[], int iNumVerts ) { }
void DrawFanInternal( const RageSpriteVertex v[], int iNumVerts ) { }
void DrawStripInternal( const RageSpriteVertex v[], int iNumVerts ) { }
void DrawTrianglesInternal( const RageSpriteVertex v[], int iNumVerts ) { }
void DrawIndexedTrianglesInternal( const RageModelVertexArray *p ) { }
void DrawLineStripInternal( const RageSpriteVertex v[], int iNumVerts, float LineWidth ) { }
VideoModeParams m_Params;
CString TryVideoMode( VideoModeParams params, bool &bNewDeviceOut ) { m_Params = params; return ""; }
SDL_Surface* CreateScreenshot();
+7 -35
View File
@@ -1146,85 +1146,57 @@ void RageDisplay_OGL::DeleteRageModelVertexArray( RageModelVertexArray* p )
delete p;
}
void RageDisplay_OGL::DrawQuads( const RageSpriteVertex v[], int iNumVerts )
void RageDisplay_OGL::DrawQuadsInternal( const RageSpriteVertex v[], int iNumVerts )
{
ASSERT( (iNumVerts%4) == 0 );
if(iNumVerts == 0)
return;
SendCurrentMatrices();
SetupVertices( v, iNumVerts );
glDrawArrays( GL_QUADS, 0, iNumVerts );
StatsAddVerts( iNumVerts );
}
void RageDisplay_OGL::DrawQuadStrip( const RageSpriteVertex v[], int iNumVerts )
void RageDisplay_OGL::DrawQuadStripInternal( 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::DrawFanInternal( const RageSpriteVertex v[], int iNumVerts )
{
ASSERT( iNumVerts >= 3 );
glMatrixMode( GL_PROJECTION );
SendCurrentMatrices();
SetupVertices( v, iNumVerts );
glDrawArrays( GL_TRIANGLE_FAN, 0, iNumVerts );
StatsAddVerts( iNumVerts );
}
void RageDisplay_OGL::DrawStrip( const RageSpriteVertex v[], int iNumVerts )
void RageDisplay_OGL::DrawStripInternal( const RageSpriteVertex v[], int iNumVerts )
{
ASSERT( iNumVerts >= 3 );
SendCurrentMatrices();
SetupVertices( v, iNumVerts );
glDrawArrays( GL_TRIANGLE_STRIP, 0, iNumVerts );
StatsAddVerts( iNumVerts );
}
void RageDisplay_OGL::DrawTriangles( const RageSpriteVertex v[], int iNumVerts )
void RageDisplay_OGL::DrawTrianglesInternal( const RageSpriteVertex v[], int iNumVerts )
{
if( iNumVerts == 0 )
return;
ASSERT( (iNumVerts%3) == 0 );
SendCurrentMatrices();
SetupVertices( v, iNumVerts );
glDrawArrays( GL_TRIANGLES, 0, iNumVerts );
StatsAddVerts( iNumVerts );
}
void RageDisplay_OGL::DrawIndexedTriangles( const RageModelVertexArray *p )
void RageDisplay_OGL::DrawIndexedTrianglesInternal( const RageModelVertexArray *p )
{
SendCurrentMatrices();
p->Draw();
StatsAddVerts( p->sizeTriangles()*3 );
}
void RageDisplay_OGL::DrawLineStrip( const RageSpriteVertex v[], int iNumVerts, float LineWidth )
void RageDisplay_OGL::DrawLineStripInternal( const RageSpriteVertex v[], int iNumVerts, float LineWidth )
{
ASSERT( iNumVerts >= 2 );
if( !GetVideoModeParams().bSmoothLines )
{
RageDisplay::DrawLineStrip(v, iNumVerts, LineWidth );
+8 -8
View File
@@ -64,17 +64,17 @@ public:
RageModelVertexArray* CreateRageModelVertexArray();
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 );
void DrawIndexedTriangles( const RageModelVertexArray *p );
void DrawLineStrip( const RageSpriteVertex v[], int iNumVerts, float LineWidth );
CString GetTextureDiagnostics( unsigned id ) const;
protected:
void DrawQuadsInternal( const RageSpriteVertex v[], int iNumVerts );
void DrawQuadStripInternal( const RageSpriteVertex v[], int iNumVerts );
void DrawFanInternal( const RageSpriteVertex v[], int iNumVerts );
void DrawStripInternal( const RageSpriteVertex v[], int iNumVerts );
void DrawTrianglesInternal( const RageSpriteVertex v[], int iNumVerts );
void DrawIndexedTrianglesInternal( const RageModelVertexArray *p );
void DrawLineStripInternal( const RageSpriteVertex v[], int iNumVerts, float LineWidth );
CString TryVideoMode( VideoModeParams params, bool &bNewDeviceOut );
SDL_Surface* CreateScreenshot();
void SetViewport(int shift_left, int shift_down);