diff --git a/stepmania/src/RageDisplay.cpp b/stepmania/src/RageDisplay.cpp index 37e14b74cc..9811af1ae2 100644 --- a/stepmania/src/RageDisplay.cpp +++ b/stepmania/src/RageDisplay.cpp @@ -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 ); +} diff --git a/stepmania/src/RageDisplay.h b/stepmania/src/RageDisplay.h index 99889cd0a0..4e412a7b0b 100644 --- a/stepmania/src/RageDisplay.h +++ b/stepmania/src/RageDisplay.h @@ -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. diff --git a/stepmania/src/RageDisplay_D3D.cpp b/stepmania/src/RageDisplay_D3D.cpp index 637e349d9f..2f96cc12da 100644 --- a/stepmania/src/RageDisplay_D3D.cpp +++ b/stepmania/src/RageDisplay_D3D.cpp @@ -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 diff --git a/stepmania/src/RageDisplay_D3D.h b/stepmania/src/RageDisplay_D3D.h index 83f234125d..7b503b7df4 100644 --- a/stepmania/src/RageDisplay_D3D.h +++ b/stepmania/src/RageDisplay_D3D.h @@ -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); diff --git a/stepmania/src/RageDisplay_Null.h b/stepmania/src/RageDisplay_Null.h index 3fc40ecbfa..58d4a6b4f2 100644 --- a/stepmania/src/RageDisplay_Null.h +++ b/stepmania/src/RageDisplay_Null.h @@ -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(); diff --git a/stepmania/src/RageDisplay_OGL.cpp b/stepmania/src/RageDisplay_OGL.cpp index 77969e41eb..5bc731a2a5 100644 --- a/stepmania/src/RageDisplay_OGL.cpp +++ b/stepmania/src/RageDisplay_OGL.cpp @@ -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 ); diff --git a/stepmania/src/RageDisplay_OGL.h b/stepmania/src/RageDisplay_OGL.h index c2df98c23f..16e32ab80e 100644 --- a/stepmania/src/RageDisplay_OGL.h +++ b/stepmania/src/RageDisplay_OGL.h @@ -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);