move rendundant renderer code to be shared by all
This commit is contained in:
@@ -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 );
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 );
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user