if DISPLAY->SupportsPerVertexMatrixScale, then merge meshes with equal names. The allows some NoteSkins to be drawn in either 2 meshes or only 1 if vertex shaders are supported.
This commit is contained in:
@@ -145,6 +145,7 @@ public:
|
|||||||
|
|
||||||
virtual bool SupportsTextureFormat( PixelFormat pixfmt, bool realtime=false ) = 0;
|
virtual bool SupportsTextureFormat( PixelFormat pixfmt, bool realtime=false ) = 0;
|
||||||
virtual bool SupportsThreadedRendering() { return false; }
|
virtual bool SupportsThreadedRendering() { return false; }
|
||||||
|
virtual bool SupportsPerVertexMatrixScale() = 0;
|
||||||
|
|
||||||
/* return 0 if failed or internal texture resource handle
|
/* return 0 if failed or internal texture resource handle
|
||||||
* (unsigned in OpenGL, texture pointer in D3D) */
|
* (unsigned in OpenGL, texture pointer in D3D) */
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ public:
|
|||||||
void SetBlendMode( BlendMode mode );
|
void SetBlendMode( BlendMode mode );
|
||||||
bool SupportsTextureFormat( PixelFormat pixfmt, bool realtime=false );
|
bool SupportsTextureFormat( PixelFormat pixfmt, bool realtime=false );
|
||||||
bool SupportsThreadedRendering();
|
bool SupportsThreadedRendering();
|
||||||
|
bool SupportsPerVertexMatrixScale() { return false; }
|
||||||
unsigned CreateTexture(
|
unsigned CreateTexture(
|
||||||
PixelFormat pixfmt,
|
PixelFormat pixfmt,
|
||||||
RageSurface* img,
|
RageSurface* img,
|
||||||
|
|||||||
@@ -16,6 +16,7 @@ public:
|
|||||||
VideoModeParams GetVideoModeParams() const { return m_Params; }
|
VideoModeParams GetVideoModeParams() const { return m_Params; }
|
||||||
void SetBlendMode( BlendMode mode ) { }
|
void SetBlendMode( BlendMode mode ) { }
|
||||||
bool SupportsTextureFormat( PixelFormat pixfmt, bool realtime=false ) { return true; }
|
bool SupportsTextureFormat( PixelFormat pixfmt, bool realtime=false ) { return true; }
|
||||||
|
bool SupportsPerVertexMatrixScale() { return false; }
|
||||||
unsigned CreateTexture(
|
unsigned CreateTexture(
|
||||||
PixelFormat pixfmt,
|
PixelFormat pixfmt,
|
||||||
RageSurface* img,
|
RageSurface* img,
|
||||||
|
|||||||
@@ -1198,7 +1198,7 @@ void RageCompiledGeometryHWOGL::Draw( int iMeshIndex ) const
|
|||||||
|
|
||||||
if( meshInfo.m_bNeedsTextureMatrixScale )
|
if( meshInfo.m_bNeedsTextureMatrixScale )
|
||||||
{
|
{
|
||||||
if( false ) //g_bTextureMatrixShader != 0 )
|
if( g_bTextureMatrixShader != 0 )
|
||||||
{
|
{
|
||||||
/* If we're using texture matrix scales, set up that buffer, too, and enable the
|
/* If we're using texture matrix scales, set up that buffer, too, and enable the
|
||||||
* vertex shader. This shader doesn't support all OpenGL state, so only enable it
|
* vertex shader. This shader doesn't support all OpenGL state, so only enable it
|
||||||
@@ -1998,6 +1998,11 @@ bool RageDisplay_OGL::SupportsTextureFormat( PixelFormat pixfmt, bool bRealtime
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool RageDisplay_OGL::SupportsPerVertexMatrixScale()
|
||||||
|
{
|
||||||
|
return g_bTextureMatrixShader != 0;
|
||||||
|
}
|
||||||
|
|
||||||
void RageDisplay_OGL::SetSphereEnvironmentMapping( bool b )
|
void RageDisplay_OGL::SetSphereEnvironmentMapping( bool b )
|
||||||
{
|
{
|
||||||
if( b )
|
if( b )
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ public:
|
|||||||
VideoModeParams GetVideoModeParams() const;
|
VideoModeParams GetVideoModeParams() const;
|
||||||
void SetBlendMode( BlendMode mode );
|
void SetBlendMode( BlendMode mode );
|
||||||
bool SupportsTextureFormat( PixelFormat pixfmt, bool realtime=false );
|
bool SupportsTextureFormat( PixelFormat pixfmt, bool realtime=false );
|
||||||
|
bool SupportsPerVertexMatrixScale();
|
||||||
unsigned CreateTexture(
|
unsigned CreateTexture(
|
||||||
PixelFormat pixfmt,
|
PixelFormat pixfmt,
|
||||||
RageSurface* img,
|
RageSurface* img,
|
||||||
|
|||||||
@@ -61,12 +61,12 @@ void RageModelGeometry::MergeMeshes( int iFromIndex, int iToIndex )
|
|||||||
msMesh& meshTo = m_Meshes[ iToIndex ];
|
msMesh& meshTo = m_Meshes[ iToIndex ];
|
||||||
|
|
||||||
int iShiftTriangleVertexIndicesBy = meshTo.Vertices.size();
|
int iShiftTriangleVertexIndicesBy = meshTo.Vertices.size();
|
||||||
int iStartShiftingTriangleAtIndex = meshTo.Triangles.size();
|
int iStartShiftingAtTriangleIndex = meshTo.Triangles.size();
|
||||||
|
|
||||||
meshTo.Vertices.insert( meshTo.Vertices.end(), meshFrom.Vertices.end(), meshFrom.Vertices.end() );
|
meshTo.Vertices.insert( meshTo.Vertices.end(), meshFrom.Vertices.begin(), meshFrom.Vertices.end() );
|
||||||
meshTo.Triangles.insert( meshTo.Triangles.end(), meshFrom.Triangles.end(), meshFrom.Triangles.end() );
|
meshTo.Triangles.insert( meshTo.Triangles.end(), meshFrom.Triangles.begin(), meshFrom.Triangles.end() );
|
||||||
|
|
||||||
for( unsigned i=iStartShiftingTriangleAtIndex; i<meshTo.Triangles.size(); i++ )
|
for( unsigned i=iStartShiftingAtTriangleIndex; i<meshTo.Triangles.size(); i++ )
|
||||||
{
|
{
|
||||||
for( int j=0; j<3; j++ )
|
for( int j=0; j<3; j++ )
|
||||||
meshTo.Triangles[i].nVertexIndices[j] += iShiftTriangleVertexIndicesBy;
|
meshTo.Triangles[i].nVertexIndices[j] += iShiftTriangleVertexIndicesBy;
|
||||||
@@ -262,6 +262,14 @@ void RageModelGeometry::LoadMilkshapeAscii( const CString& _sPath, bool bNeedsNo
|
|||||||
|
|
||||||
OptimizeBones();
|
OptimizeBones();
|
||||||
|
|
||||||
|
if( DISPLAY->SupportsPerVertexMatrixScale() )
|
||||||
|
{
|
||||||
|
if( m_Meshes.size() == 2 && m_Meshes[0].sName == m_Meshes[1].sName )
|
||||||
|
{
|
||||||
|
MergeMeshes( 1, 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// send the finalized vertices to the graphics card
|
// send the finalized vertices to the graphics card
|
||||||
m_pCompiledGeometry->Set( m_Meshes, bNeedsNormals );
|
m_pCompiledGeometry->Set( m_Meshes, bNeedsNormals );
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user