From a1be0fdb334d88b75975d564c7fb5be693ac8c58 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Tue, 4 Jan 2005 05:34:58 +0000 Subject: [PATCH] add GetNumTextureUnits() --- stepmania/src/RageDisplay.h | 1 + stepmania/src/RageDisplay_D3D.cpp | 5 +++++ stepmania/src/RageDisplay_D3D.h | 1 + stepmania/src/RageDisplay_Null.h | 1 + stepmania/src/RageDisplay_OGL.cpp | 27 +++++++++++++++++++++------ stepmania/src/RageDisplay_OGL.h | 1 + 6 files changed, 30 insertions(+), 6 deletions(-) diff --git a/stepmania/src/RageDisplay.h b/stepmania/src/RageDisplay.h index 9d486e4511..36450bf21b 100644 --- a/stepmania/src/RageDisplay.h +++ b/stepmania/src/RageDisplay.h @@ -181,6 +181,7 @@ public: ) = 0; virtual void DeleteTexture( unsigned uTexHandle ) = 0; virtual void ClearAllTextures() = 0; + virtual int GetNumTextureUnits() = 0; virtual void SetTexture( int iTextureUnitIndex, RageTexture* pTexture ) = 0; virtual void SetTextureModeModulate() = 0; virtual void SetTextureModeGlow( GlowMode m=GLOW_WHITEN ) = 0; diff --git a/stepmania/src/RageDisplay_D3D.cpp b/stepmania/src/RageDisplay_D3D.cpp index bfb00fff57..576c68e3eb 100644 --- a/stepmania/src/RageDisplay_D3D.cpp +++ b/stepmania/src/RageDisplay_D3D.cpp @@ -956,6 +956,11 @@ void RageDisplay_D3D::ClearAllTextures() g_iCurrentTextureIndex = 0; } +int RageDisplay_D3D::GetNumTextureUnits() +{ + return g_DeviceCaps.MaxSimultaneousTextures; +} + void RageDisplay_D3D::SetTexture( int iTextureUnitIndex, RageTexture* pTexture ) { g_iCurrentTextureIndex = iTextureUnitIndex; diff --git a/stepmania/src/RageDisplay_D3D.h b/stepmania/src/RageDisplay_D3D.h index a034efbe04..bbc12f0ec4 100644 --- a/stepmania/src/RageDisplay_D3D.h +++ b/stepmania/src/RageDisplay_D3D.h @@ -30,6 +30,7 @@ public: ); void DeleteTexture( unsigned uTexHandle ); void ClearAllTextures(); + int GetNumTextureUnits(); void SetTexture( int iTextureUnitIndex, RageTexture* pTexture ); void SetTextureModeModulate(); void SetTextureModeGlow( GlowMode m=GLOW_WHITEN ); diff --git a/stepmania/src/RageDisplay_Null.h b/stepmania/src/RageDisplay_Null.h index 4012190019..510ea61d49 100644 --- a/stepmania/src/RageDisplay_Null.h +++ b/stepmania/src/RageDisplay_Null.h @@ -28,6 +28,7 @@ public: ) { } void DeleteTexture( unsigned uTexHandle ) { } void ClearAllTextures() { } + int GetNumTextureUnits() { return 1; } void SetTexture( int iTextureUnitIndex, RageTexture* pTexture ) { } void SetTextureModeModulate() { } void SetTextureModeGlow( GlowMode m=GLOW_WHITEN ) { } diff --git a/stepmania/src/RageDisplay_OGL.cpp b/stepmania/src/RageDisplay_OGL.cpp index f1853bb441..3d13238a56 100644 --- a/stepmania/src/RageDisplay_OGL.cpp +++ b/stepmania/src/RageDisplay_OGL.cpp @@ -106,6 +106,8 @@ int g_glVersion; /* GLU version * 10: */ int g_gluVersion; +static int g_iMaxTextureUnits = 0; + /* Available extensions: */ set g_glExts; @@ -379,12 +381,13 @@ CString RageDisplay_OGL::Init( VideoModeParams p, bool bAllowUnacceleratedRender return sError; // Log driver details - LOG->Info("OGL Vendor: %s", glGetString(GL_VENDOR)); - LOG->Info("OGL Renderer: %s", glGetString(GL_RENDERER)); - LOG->Info("OGL Version: %s", glGetString(GL_VERSION)); - LOG->Info("OGL Extensions: %s", glGetString(GL_EXTENSIONS)); - LOG->Info("OGL Max texture size: %i", GetMaxTextureSize() ); - LOG->Info("GLU Version: %s", gluGetString(GLU_VERSION)); + LOG->Info( "OGL Vendor: %s", glGetString(GL_VENDOR) ); + LOG->Info( "OGL Renderer: %s", glGetString(GL_RENDERER) ); + LOG->Info( "OGL Version: %s", glGetString(GL_VERSION) ); + LOG->Info( "OGL Max texture size: %i", GetMaxTextureSize() ); + LOG->Info( "OGL Texture units: %i", g_iMaxTextureUnits ); + LOG->Info( "OGL Extensions: %s", glGetString(GL_EXTENSIONS) ); + LOG->Info( "GLU Version: %s", gluGetString(GLU_VERSION) ); LogGLXDebugInformation(); @@ -649,7 +652,11 @@ void SetupExtensions() } if( HasExtension("GL_ARB_multitexture") ) + { GLExt.glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC) wind->GetProcAddress("glActiveTextureARB"); + g_iMaxTextureUnits = 1; + glGetIntegerv( GL_MAX_TEXTURE_UNITS_ARB, &g_iMaxTextureUnits ); + } if( HasExtension("GL_ARB_vertex_buffer_object") ) { @@ -1291,6 +1298,14 @@ void RageDisplay_OGL::ClearAllTextures() GLExt.glActiveTextureARB(GL_TEXTURE0_ARB); } +int RageDisplay_OGL::GetNumTextureUnits() +{ + if( GLExt.glActiveTextureARB == NULL ) + return 1; + else + return g_iMaxTextureUnits; +} + void RageDisplay_OGL::SetTexture( int iTextureUnitIndex, RageTexture* pTexture ) { if( GLExt.glActiveTextureARB == NULL ) diff --git a/stepmania/src/RageDisplay_OGL.h b/stepmania/src/RageDisplay_OGL.h index c8874b3d39..a4547cef18 100644 --- a/stepmania/src/RageDisplay_OGL.h +++ b/stepmania/src/RageDisplay_OGL.h @@ -31,6 +31,7 @@ public: ); void DeleteTexture( unsigned uTexHandle ); void ClearAllTextures(); + int GetNumTextureUnits(); void SetTexture( int iTextureUnitIndex, RageTexture* pTexture ); void SetTextureModeModulate(); void SetTextureModeGlow( GlowMode m=GLOW_WHITEN );