[opengl] Dump glext stuff in favor of GLEW. New extern directory for libraries.

This commit is contained in:
Colby Klein
2011-03-14 01:50:48 -07:00
parent 4119d406a5
commit ac605ebbf7
30 changed files with 37019 additions and 491 deletions
+141 -138
View File
@@ -242,10 +242,10 @@ static void FixLittleEndian()
static void TurnOffHardwareVBO()
{
if( GLExt.glBindBufferARB )
if( glBindBufferARB )
{
GLExt.glBindBufferARB( GL_ARRAY_BUFFER_ARB, 0 );
GLExt.glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, 0 );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, 0 );
glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, 0 );
}
}
@@ -264,12 +264,12 @@ RageDisplay_Legacy::RageDisplay_Legacy()
RString GetInfoLog( GLhandleARB h )
{
GLint iLength;
GLExt.glGetObjectParameterivARB( h, GL_OBJECT_INFO_LOG_LENGTH_ARB, &iLength );
glGetObjectParameterivARB( h, GL_OBJECT_INFO_LOG_LENGTH_ARB, &iLength );
if( !iLength )
return RString();
GLcharARB *pInfoLog = new GLcharARB[iLength];
GLExt.glGetInfoLogARB( h, iLength, &iLength, pInfoLog );
glGetInfoLogARB( h, iLength, &iLength, pInfoLog );
RString sRet = pInfoLog;
delete [] pInfoLog;
TrimRight( sRet );
@@ -295,7 +295,7 @@ GLhandleARB CompileShader( GLenum ShaderType, RString sFile, vector<RString> asD
}
LOG->Trace( "Compiling shader %s", sFile.c_str() );
GLhandleARB hShader = GLExt.glCreateShaderObjectARB( ShaderType );
GLhandleARB hShader = glCreateShaderObjectARB( ShaderType );
vector<const GLcharARB *> apData;
vector<GLint> aiLength;
FOREACH( RString, asDefines, s )
@@ -309,18 +309,18 @@ GLhandleARB CompileShader( GLenum ShaderType, RString sFile, vector<RString> asD
apData.push_back( sBuffer.data() );
aiLength.push_back( sBuffer.size() );
GLExt.glShaderSourceARB( hShader, apData.size(), &apData[0], &aiLength[0] );
glShaderSourceARB( hShader, apData.size(), &apData[0], &aiLength[0] );
GLExt.glCompileShaderARB( hShader );
glCompileShaderARB( hShader );
RString sInfo = GetInfoLog( hShader );
GLint bCompileStatus = GL_FALSE;
GLExt.glGetObjectParameterivARB( hShader, GL_OBJECT_COMPILE_STATUS_ARB, &bCompileStatus );
glGetObjectParameterivARB( hShader, GL_OBJECT_COMPILE_STATUS_ARB, &bCompileStatus );
if( !bCompileStatus )
{
LOG->Warn( "Error compiling shader %s:\n%s", sFile.c_str(), sInfo.c_str() );
GLExt.glDeleteObjectARB( hShader );
glDeleteObjectARB( hShader );
return 0;
}
@@ -333,9 +333,9 @@ GLhandleARB CompileShader( GLenum ShaderType, RString sFile, vector<RString> asD
GLhandleARB LoadShader( GLenum ShaderType, RString sFile, vector<RString> asDefines )
{
// Don't do anything here if not the hardware/driver can't do it!
if( !GLExt.m_bGL_ARB_fragment_shader && ShaderType == GL_FRAGMENT_SHADER_ARB )
if( !GLEW_ARB_fragment_shader && ShaderType == GL_FRAGMENT_SHADER_ARB )
return 0;
if( !GLExt.m_bGL_ARB_vertex_shader && ShaderType == GL_VERTEX_SHADER_ARB )
if( !GLEW_ARB_vertex_shader && ShaderType == GL_VERTEX_SHADER_ARB )
return 0;
// XXX: dumb, but I don't feel like refactoring ragedisplay for this. -Colby
@@ -349,25 +349,25 @@ GLhandleARB LoadShader( GLenum ShaderType, RString sFile, vector<RString> asDefi
if( hShader == 0 )
return 0;
GLhandleARB hProgram = GLExt.glCreateProgramObjectARB();
GLExt.glAttachObjectARB( hProgram, hShader );
GLhandleARB hProgram = glCreateProgramObjectARB();
glAttachObjectARB( hProgram, hShader );
if( secondaryShader )
{
GLExt.glAttachObjectARB( hProgram, secondaryShader );
GLExt.glDeleteObjectARB( secondaryShader );
glAttachObjectARB( hProgram, secondaryShader );
glDeleteObjectARB( secondaryShader );
}
GLExt.glDeleteObjectARB( hShader );
glDeleteObjectARB( hShader );
// Link the program.
GLExt.glLinkProgramARB( hProgram );
glLinkProgramARB( hProgram );
GLint bLinkStatus = false;
GLExt.glGetObjectParameterivARB( hProgram, GL_OBJECT_LINK_STATUS_ARB, &bLinkStatus );
glGetObjectParameterivARB( hProgram, GL_OBJECT_LINK_STATUS_ARB, &bLinkStatus );
if( !bLinkStatus )
{
LOG->Warn( "Error linking shader %s: %s", sFile.c_str(), GetInfoLog(hProgram).c_str() );
GLExt.glDeleteObjectARB( hProgram );
glDeleteObjectARB( hProgram );
return 0;
}
return hProgram;
@@ -414,11 +414,11 @@ void InitShaders()
if( g_bTextureMatrixShader )
{
FlushGLErrors();
g_iAttribTextureMatrixScale = GLExt.glGetAttribLocationARB( g_bTextureMatrixShader, "TextureMatrixScale" );
g_iAttribTextureMatrixScale = glGetAttribLocationARB( g_bTextureMatrixShader, "TextureMatrixScale" );
if( g_iAttribTextureMatrixScale == -1 )
{
LOG->Trace( "Scaling shader link failed: couldn't bind attribute \"TextureMatrixScale\"" );
GLExt.glDeleteObjectARB( g_bTextureMatrixShader );
glDeleteObjectARB( g_bTextureMatrixShader );
g_bTextureMatrixShader = 0;
}
else
@@ -426,12 +426,12 @@ void InitShaders()
AssertNoGLError();
/* Older Catalyst drivers seem to throw GL_INVALID_OPERATION here. */
GLExt.glVertexAttrib2fARB( g_iAttribTextureMatrixScale, 1, 1 );
glVertexAttrib2fARB( g_iAttribTextureMatrixScale, 1, 1 );
GLenum iError = glGetError();
if( iError == GL_INVALID_OPERATION )
{
LOG->Trace( "Scaling shader failed: glVertexAttrib2fARB returned GL_INVALID_OPERATION" );
GLExt.glDeleteObjectARB( g_bTextureMatrixShader );
glDeleteObjectARB( g_bTextureMatrixShader );
g_bTextureMatrixShader = 0;
}
else
@@ -553,19 +553,19 @@ static void CheckPalettedTextures()
RString sError;
do
{
if( !GLExt.HasExtension("GL_EXT_paletted_texture") )
if(!GLEW_EXT_paletted_texture)
{
sError = "GL_EXT_paletted_texture missing";
break;
}
if( GLExt.glColorTableEXT == NULL )
if( glColorTableEXT == NULL )
{
sError = "glColorTableEXT missing";
break;
}
if( GLExt.glGetColorTableParameterivEXT == NULL )
if( glGetColorTableParameterivEXT == NULL )
{
sError = "glGetColorTableParameterivEXT missing";
break;
@@ -606,7 +606,7 @@ static void CheckPalettedTextures()
GLubyte palette[256*4];
memset(palette, 0, sizeof(palette));
GLExt.glColorTableEXT(GL_PROXY_TEXTURE_2D, GL_RGBA8, 256, GL_RGBA, GL_UNSIGNED_BYTE, palette);
glColorTableEXT(GL_PROXY_TEXTURE_2D, GL_RGBA8, 256, GL_RGBA, GL_UNSIGNED_BYTE, palette);
GL_CHECK_ERROR( "glColorTableEXT" );
GLint iSize = 0;
@@ -619,7 +619,7 @@ static void CheckPalettedTextures()
}
GLint iRealWidth = 0;
GLExt.glGetColorTableParameterivEXT( GL_PROXY_TEXTURE_2D, GL_COLOR_TABLE_WIDTH, &iRealWidth );
glGetColorTableParameterivEXT( GL_PROXY_TEXTURE_2D, GL_COLOR_TABLE_WIDTH, &iRealWidth );
GL_CHECK_ERROR( "glGetColorTableParameterivEXT(GL_COLOR_TABLE_WIDTH)" );
if( iRealWidth != 1 << iBits )
{
@@ -628,7 +628,7 @@ static void CheckPalettedTextures()
}
GLint iRealFormat = 0;
GLExt.glGetColorTableParameterivEXT( GL_PROXY_TEXTURE_2D, GL_COLOR_TABLE_FORMAT, &iRealFormat );
glGetColorTableParameterivEXT( GL_PROXY_TEXTURE_2D, GL_COLOR_TABLE_FORMAT, &iRealFormat );
GL_CHECK_ERROR( "glGetColorTableParameterivEXT(GL_COLOR_TABLE_FORMAT)" );
if( iRealFormat != GL_RGBA8 )
{
@@ -643,8 +643,8 @@ static void CheckPalettedTextures()
/* If 8-bit palettes don't work, disable them entirely--don't trust 4-bit
* palettes if it can't even get 8-bit ones right. */
GLExt.glColorTableEXT = NULL;
GLExt.glGetColorTableParameterivEXT = NULL;
glColorTableEXT = NULL;
glGetColorTableParameterivEXT = NULL;
LOG->Info( "Paletted textures disabled: %s.", sError.c_str() );
}
@@ -678,10 +678,10 @@ void SetupExtensions()
const float fGLUVersion = StringToFloat( (const char *) gluGetString(GLU_VERSION) );
g_gluVersion = lrintf( fGLUVersion * 10 );
GLExt.Load( g_pWind );
glewInit();
g_iMaxTextureUnits = 1;
if( GLExt.glActiveTextureARB != NULL )
if( glActiveTextureARB != NULL )
glGetIntegerv( GL_MAX_TEXTURE_UNITS_ARB, (GLint *) &g_iMaxTextureUnits );
CheckPalettedTextures();
@@ -751,10 +751,13 @@ RString RageDisplay_Legacy::TryVideoMode( const VideoModeParams &p, bool &bNewDe
InitShaders();
}
// I'm not sure this is correct -Colby
#if defined(WINDOWS)
/* Set vsync the Windows way, if we can. (What other extensions are there
* to do this, for other archs?) */
if( GLExt.wglSwapIntervalEXT )
GLExt.wglSwapIntervalEXT(p.vsync);
if( GLEW_WGL_EXT_swap_control )
wglSwapIntervalEXT(p.vsync);
#endif
ResolutionChanged();
@@ -891,12 +894,12 @@ static void SetupVertices( const RageSpriteVertex v[], int iNumVerts )
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
glTexCoordPointer( 2, GL_FLOAT, 0, Texture );
if( GLExt.glClientActiveTextureARB != NULL )
if( glClientActiveTextureARB != NULL )
{
GLExt.glClientActiveTextureARB( GL_TEXTURE1_ARB );
glClientActiveTextureARB( GL_TEXTURE1_ARB );
glEnableClientState( GL_TEXTURE_COORD_ARRAY );
glTexCoordPointer( 2, GL_FLOAT, 0, Texture );
GLExt.glClientActiveTextureARB( GL_TEXTURE0_ARB );
glClientActiveTextureARB( GL_TEXTURE0_ARB );
}
glEnableClientState( GL_NORMAL_ARRAY );
@@ -1078,15 +1081,15 @@ RageCompiledGeometryHWOGL::~RageCompiledGeometryHWOGL()
{
DebugFlushGLErrors();
GLExt.glDeleteBuffersARB( 1, &m_nPositions );
glDeleteBuffersARB( 1, &m_nPositions );
DebugAssertNoGLError();
GLExt.glDeleteBuffersARB( 1, &m_nTextureCoords );
glDeleteBuffersARB( 1, &m_nTextureCoords );
DebugAssertNoGLError();
GLExt.glDeleteBuffersARB( 1, &m_nNormals );
glDeleteBuffersARB( 1, &m_nNormals );
DebugAssertNoGLError();
GLExt.glDeleteBuffersARB( 1, &m_nTriangles );
glDeleteBuffersARB( 1, &m_nTriangles );
DebugAssertNoGLError();
GLExt.glDeleteBuffersARB( 1, &m_nTextureMatrixScale );
glDeleteBuffersARB( 1, &m_nTextureMatrixScale );
DebugAssertNoGLError();
}
@@ -1096,31 +1099,31 @@ void RageCompiledGeometryHWOGL::AllocateBuffers()
if( !m_nPositions )
{
GLExt.glGenBuffersARB( 1, &m_nPositions );
glGenBuffersARB( 1, &m_nPositions );
DebugAssertNoGLError();
}
if( !m_nTextureCoords )
{
GLExt.glGenBuffersARB( 1, &m_nTextureCoords );
glGenBuffersARB( 1, &m_nTextureCoords );
DebugAssertNoGLError();
}
if( !m_nNormals )
{
GLExt.glGenBuffersARB( 1, &m_nNormals );
glGenBuffersARB( 1, &m_nNormals );
DebugAssertNoGLError();
}
if( !m_nTriangles )
{
GLExt.glGenBuffersARB( 1, &m_nTriangles );
glGenBuffersARB( 1, &m_nTriangles );
DebugAssertNoGLError();
}
if( !m_nTextureMatrixScale )
{
GLExt.glGenBuffersARB( 1, &m_nTextureMatrixScale );
glGenBuffersARB( 1, &m_nTextureMatrixScale );
DebugAssertNoGLError();
}
}
@@ -1129,36 +1132,36 @@ void RageCompiledGeometryHWOGL::UploadData()
{
DebugFlushGLErrors();
GLExt.glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nPositions );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nPositions );
DebugAssertNoGLError();
GLExt.glBufferDataARB(
glBufferDataARB(
GL_ARRAY_BUFFER_ARB,
GetTotalVertices()*sizeof(RageVector3),
&m_vPosition[0],
GL_STATIC_DRAW_ARB );
DebugAssertNoGLError();
GLExt.glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nTextureCoords );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nTextureCoords );
DebugAssertNoGLError();
GLExt.glBufferDataARB(
glBufferDataARB(
GL_ARRAY_BUFFER_ARB,
GetTotalVertices()*sizeof(RageVector2),
&m_vTexture[0],
GL_STATIC_DRAW_ARB );
DebugAssertNoGLError();
GLExt.glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nNormals );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nNormals );
DebugAssertNoGLError();
GLExt.glBufferDataARB(
glBufferDataARB(
GL_ARRAY_BUFFER_ARB,
GetTotalVertices()*sizeof(RageVector3),
&m_vNormal[0],
GL_STATIC_DRAW_ARB );
DebugAssertNoGLError();
GLExt.glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, m_nTriangles );
glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, m_nTriangles );
DebugAssertNoGLError();
GLExt.glBufferDataARB(
glBufferDataARB(
GL_ELEMENT_ARRAY_BUFFER_ARB,
GetTotalTriangles()*sizeof(msTriangle),
&m_vTriangles[0],
@@ -1168,9 +1171,9 @@ void RageCompiledGeometryHWOGL::UploadData()
if( m_bAnyNeedsTextureMatrixScale )
{
GLExt.glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nTextureMatrixScale );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nTextureMatrixScale );
DebugAssertNoGLError();
GLExt.glBufferDataARB(
glBufferDataARB(
GL_ARRAY_BUFFER_ARB,
GetTotalVertices()*sizeof(RageVector2),
&m_vTexMatrixScale[0],
@@ -1196,45 +1199,45 @@ void RageCompiledGeometryHWOGL::Allocate( const vector<msMesh> &vMeshes )
DebugFlushGLErrors();
RageCompiledGeometrySWOGL::Allocate( vMeshes );
GLExt.glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nPositions );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nPositions );
DebugAssertNoGLError();
GLExt.glBufferDataARB(
glBufferDataARB(
GL_ARRAY_BUFFER_ARB,
GetTotalVertices()*sizeof(RageVector3),
NULL,
GL_STATIC_DRAW_ARB );
DebugAssertNoGLError();
GLExt.glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nTextureCoords );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nTextureCoords );
DebugAssertNoGLError();
GLExt.glBufferDataARB(
glBufferDataARB(
GL_ARRAY_BUFFER_ARB,
GetTotalVertices()*sizeof(RageVector2),
NULL,
GL_STATIC_DRAW_ARB );
DebugAssertNoGLError();
GLExt.glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nNormals );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nNormals );
DebugAssertNoGLError();
GLExt.glBufferDataARB(
glBufferDataARB(
GL_ARRAY_BUFFER_ARB,
GetTotalVertices()*sizeof(RageVector3),
NULL,
GL_STATIC_DRAW_ARB );
DebugAssertNoGLError();
GLExt.glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, m_nTriangles );
glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, m_nTriangles );
DebugAssertNoGLError();
GLExt.glBufferDataARB(
glBufferDataARB(
GL_ELEMENT_ARRAY_BUFFER_ARB,
GetTotalTriangles()*sizeof(msTriangle),
NULL,
GL_STATIC_DRAW_ARB );
DebugAssertNoGLError();
GLExt.glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nTextureMatrixScale );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nTextureMatrixScale );
DebugAssertNoGLError();
GLExt.glBufferDataARB(
glBufferDataARB(
GL_ARRAY_BUFFER_ARB,
GetTotalVertices()*sizeof(RageVector2),
NULL,
@@ -1258,7 +1261,7 @@ void RageCompiledGeometryHWOGL::Draw( int iMeshIndex ) const
glEnableClientState(GL_VERTEX_ARRAY);
DebugAssertNoGLError();
GLExt.glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nPositions );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nPositions );
DebugAssertNoGLError();
glVertexPointer(3, GL_FLOAT, 0, NULL );
DebugAssertNoGLError();
@@ -1268,7 +1271,7 @@ void RageCompiledGeometryHWOGL::Draw( int iMeshIndex ) const
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
DebugAssertNoGLError();
GLExt.glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nTextureCoords );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nTextureCoords );
DebugAssertNoGLError();
glTexCoordPointer(2, GL_FLOAT, 0, NULL);
DebugAssertNoGLError();
@@ -1286,7 +1289,7 @@ void RageCompiledGeometryHWOGL::Draw( int iMeshIndex ) const
{
glEnableClientState(GL_NORMAL_ARRAY);
DebugAssertNoGLError();
GLExt.glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nNormals );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nNormals );
DebugAssertNoGLError();
glNormalPointer(GL_FLOAT, 0, NULL);
DebugAssertNoGLError();
@@ -1304,14 +1307,14 @@ void RageCompiledGeometryHWOGL::Draw( int iMeshIndex ) const
/* 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
* if we're using it. */
GLExt.glEnableVertexAttribArrayARB( g_iAttribTextureMatrixScale );
glEnableVertexAttribArrayARB( g_iAttribTextureMatrixScale );
DebugAssertNoGLError();
GLExt.glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nTextureMatrixScale );
glBindBufferARB( GL_ARRAY_BUFFER_ARB, m_nTextureMatrixScale );
DebugAssertNoGLError();
GLExt.glVertexAttribPointerARB( g_iAttribTextureMatrixScale, 2, GL_FLOAT, false, 0, NULL );
glVertexAttribPointerARB( g_iAttribTextureMatrixScale, 2, GL_FLOAT, false, 0, NULL );
DebugAssertNoGLError();
GLExt.glUseProgramObjectARB( g_bTextureMatrixShader );
glUseProgramObjectARB( g_bTextureMatrixShader );
DebugAssertNoGLError();
}
else
@@ -1341,13 +1344,13 @@ void RageCompiledGeometryHWOGL::Draw( int iMeshIndex ) const
}
}
GLExt.glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, m_nTriangles );
glBindBufferARB( GL_ELEMENT_ARRAY_BUFFER_ARB, m_nTriangles );
DebugAssertNoGLError();
#define BUFFER_OFFSET(o) ((char*)(o))
ASSERT( GLExt.glDrawRangeElements);
GLExt.glDrawRangeElements(
ASSERT( glDrawRangeElements);
glDrawRangeElements(
GL_TRIANGLES,
meshInfo.iVertexStart, // minimum array index contained in indices
meshInfo.iVertexStart+meshInfo.iVertexCount-1,
@@ -1359,14 +1362,14 @@ void RageCompiledGeometryHWOGL::Draw( int iMeshIndex ) const
if( meshInfo.m_bNeedsTextureMatrixScale && g_bTextureMatrixShader != 0 )
{
GLExt.glDisableVertexAttribArrayARB( g_iAttribTextureMatrixScale );
GLExt.glUseProgramObjectARB( 0 );
glDisableVertexAttribArrayARB( g_iAttribTextureMatrixScale );
glUseProgramObjectARB( 0 );
}
}
RageCompiledGeometry* RageDisplay_Legacy::CreateCompiledGeometry()
{
if( GLExt.glGenBuffersARB )
if( glGenBuffersARB )
return new RageCompiledGeometryHWOGL;
else
return new RageCompiledGeometrySWOGL;
@@ -1546,12 +1549,12 @@ void RageDisplay_Legacy::DrawLineStripInternal( const RageSpriteVertex v[], int
static bool SetTextureUnit( TextureUnit tu )
{
// If multitexture isn't supported, ignore all textures except for 0.
if( GLExt.glActiveTextureARB == NULL )
if( glActiveTextureARB == NULL )
return false;
if( (int) tu > g_iMaxTextureUnits )
return false;
GLExt.glActiveTextureARB( enum_add2(GL_TEXTURE0_ARB, tu) );
glActiveTextureARB( enum_add2(GL_TEXTURE0_ARB, tu) );
return true;
}
@@ -1562,13 +1565,13 @@ void RageDisplay_Legacy::ClearAllTextures()
// HACK: Reset the active texture to 0.
// TODO: Change all texture functions to take a stage number.
if( GLExt.glActiveTextureARB )
GLExt.glActiveTextureARB(GL_TEXTURE0_ARB);
if( glActiveTextureARB )
glActiveTextureARB(GL_TEXTURE0_ARB);
}
int RageDisplay_Legacy::GetNumTextureUnits()
{
if( GLExt.glActiveTextureARB == NULL )
if( glActiveTextureARB == NULL )
return 1;
else
return g_iMaxTextureUnits;
@@ -1605,7 +1608,7 @@ void RageDisplay_Legacy::SetTextureMode( TextureUnit tu, TextureMode tm )
break;
case TextureMode_Glow:
// the below function is glowmode,brighten:
if( !GLExt.m_bARB_texture_env_combine && !GLExt.m_bEXT_texture_env_combine )
if( !GLEW_ARB_texture_env_combine && !GLEW_EXT_texture_env_combine )
{
/* This is changing blend state, instead of texture state, which
* isn't great, but it's better than doing nothing. */
@@ -1663,7 +1666,7 @@ void RageDisplay_Legacy::SetTextureFiltering( TextureUnit tu, bool b )
void RageDisplay_Legacy::SetEffectMode( EffectMode effect )
{
if( GLExt.glUseProgramObjectARB == NULL )
if( glUseProgramObjectARB == NULL )
return;
GLhandleARB hShader = 0;
@@ -1681,20 +1684,20 @@ void RageDisplay_Legacy::SetEffectMode( EffectMode effect )
}
DebugFlushGLErrors();
GLExt.glUseProgramObjectARB( hShader );
glUseProgramObjectARB( hShader );
if( hShader == 0 )
return;
GLint iTexture1 = GLExt.glGetUniformLocationARB( hShader, "Texture1" );
GLint iTexture2 = GLExt.glGetUniformLocationARB( hShader, "Texture2" );
GLExt.glUniform1iARB( iTexture1, 0 );
GLExt.glUniform1iARB( iTexture2, 1 );
GLint iTexture1 = glGetUniformLocationARB( hShader, "Texture1" );
GLint iTexture2 = glGetUniformLocationARB( hShader, "Texture2" );
glUniform1iARB( iTexture1, 0 );
glUniform1iARB( iTexture2, 1 );
if( effect == EffectMode_YUYV422 )
{
GLint iTextureWidthUniform = GLExt.glGetUniformLocationARB( hShader, "TextureWidth" );
GLint iTextureWidthUniform = glGetUniformLocationARB( hShader, "TextureWidth" );
GLint iWidth;
glGetTexLevelParameteriv( GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &iWidth );
GLExt.glUniform1iARB( iTextureWidthUniform, iWidth );
glUniform1iARB( iTextureWidthUniform, iWidth );
}
DebugAssertNoGLError();
@@ -1722,14 +1725,14 @@ void RageDisplay_Legacy::SetBlendMode( BlendMode mode )
{
glEnable(GL_BLEND);
if( GLExt.glBlendEquation != NULL )
if( glBlendEquation != NULL )
{
if( mode == BLEND_INVERT_DEST )
GLExt.glBlendEquation( GL_FUNC_SUBTRACT );
glBlendEquation( GL_FUNC_SUBTRACT );
else if( mode == BLEND_SUBTRACT )
GLExt.glBlendEquation( GL_FUNC_REVERSE_SUBTRACT );
glBlendEquation( GL_FUNC_REVERSE_SUBTRACT );
else
GLExt.glBlendEquation( GL_FUNC_ADD );
glBlendEquation( GL_FUNC_ADD );
}
int iSourceRGB, iDestRGB;
@@ -1779,8 +1782,8 @@ void RageDisplay_Legacy::SetBlendMode( BlendMode mode )
DEFAULT_FAIL( mode );
}
if( GLExt.glBlendFuncSeparateEXT != NULL )
GLExt.glBlendFuncSeparateEXT( iSourceRGB, iDestRGB, iSourceAlpha, iDestAlpha );
if( glBlendFuncSeparateEXT != NULL )
glBlendFuncSeparateEXT( iSourceRGB, iDestRGB, iSourceAlpha, iDestAlpha );
else
glBlendFunc( iSourceRGB, iDestRGB );
}
@@ -2100,7 +2103,7 @@ unsigned RageDisplay_Legacy::CreateTexture(
glBindTexture( GL_TEXTURE_2D, iTexHandle );
if( g_pWind->GetActualVideoModeParams().bAnisotropicFiltering &&
GLExt.HasExtension("GL_EXT_texture_filter_anisotropic") )
GLEW_EXT_texture_filter_anisotropic )
{
GLfloat fLargestSupportedAnisotropy;
glGetFloatv( GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &fLargestSupportedAnisotropy );
@@ -2129,10 +2132,10 @@ unsigned RageDisplay_Legacy::CreateTexture(
}
/* Set the palette. */
GLExt.glColorTableEXT( GL_TEXTURE_2D, GL_RGBA8, 256, GL_RGBA, GL_UNSIGNED_BYTE, palette );
glColorTableEXT( GL_TEXTURE_2D, GL_RGBA8, 256, GL_RGBA, GL_UNSIGNED_BYTE, palette );
GLint iRealFormat = 0;
GLExt.glGetColorTableParameterivEXT( GL_TEXTURE_2D, GL_COLOR_TABLE_FORMAT, &iRealFormat );
glGetColorTableParameterivEXT( GL_TEXTURE_2D, GL_COLOR_TABLE_FORMAT, &iRealFormat );
ASSERT( iRealFormat == GL_RGBA8 );
}
@@ -2200,7 +2203,7 @@ public:
~RageTextureLock_OGL()
{
ASSERT( m_iTexHandle == 0 ); // locked!
GLExt.glDeleteBuffersARB( 1, &m_iBuffer );
glDeleteBuffersARB( 1, &m_iBuffer );
}
/* This is called when our OpenGL context is invalidated. */
@@ -2217,19 +2220,19 @@ public:
CreateObject();
m_iTexHandle = iTexHandle;
GLExt.glBindBufferARB( GL_PIXEL_UNPACK_BUFFER_ARB, m_iBuffer );
glBindBufferARB( GL_PIXEL_UNPACK_BUFFER_ARB, m_iBuffer );
int iSize = pSurface->h * pSurface->pitch;
GLExt.glBufferDataARB( GL_PIXEL_UNPACK_BUFFER_ARB, iSize, NULL, GL_STREAM_DRAW );
glBufferDataARB( GL_PIXEL_UNPACK_BUFFER_ARB, iSize, NULL, GL_STREAM_DRAW );
void *pSurfaceMemory = GLExt.glMapBufferARB( GL_PIXEL_UNPACK_BUFFER_ARB, GL_WRITE_ONLY );
void *pSurfaceMemory = glMapBufferARB( GL_PIXEL_UNPACK_BUFFER_ARB, GL_WRITE_ONLY );
pSurface->pixels = (uint8_t *) pSurfaceMemory;
pSurface->pixels_owned = false;
}
void Unlock( RageSurface *pSurface, bool bChanged )
{
GLExt.glUnmapBufferARB( GL_PIXEL_UNPACK_BUFFER_ARB );
glUnmapBufferARB( GL_PIXEL_UNPACK_BUFFER_ARB );
pSurface->pixels = (uint8_t *) BUFFER_OFFSET(0);
@@ -2239,7 +2242,7 @@ public:
pSurface->pixels = NULL;
m_iTexHandle = 0;
GLExt.glBindBufferARB( GL_PIXEL_UNPACK_BUFFER_ARB, 0 );
glBindBufferARB( GL_PIXEL_UNPACK_BUFFER_ARB, 0 );
}
private:
@@ -2249,7 +2252,7 @@ private:
return;
DebugFlushGLErrors();
GLExt.glGenBuffersARB( 1, &m_iBuffer );
glGenBuffersARB( 1, &m_iBuffer );
DebugAssertNoGLError();
}
@@ -2260,7 +2263,7 @@ private:
RageTextureLock *RageDisplay_Legacy::CreateTextureLock()
{
if( !GLExt.HasExtension("GL_ARB_pixel_buffer_object") )
if( !GLEW_ARB_pixel_buffer_object )
return NULL;
return new RageTextureLock_OGL;
@@ -2331,9 +2334,9 @@ RenderTarget_FramebufferObject::RenderTarget_FramebufferObject()
RenderTarget_FramebufferObject::~RenderTarget_FramebufferObject()
{
if( m_iDepthBufferHandle )
GLExt.glDeleteRenderbuffersEXT( 1, reinterpret_cast<GLuint*>(&m_iDepthBufferHandle) );
glDeleteRenderbuffersEXT( 1, reinterpret_cast<GLuint*>(&m_iDepthBufferHandle) );
if( m_iFrameBufferHandle )
GLExt.glDeleteFramebuffersEXT( 1, reinterpret_cast<GLuint*>(&m_iFrameBufferHandle) );
glDeleteFramebuffersEXT( 1, reinterpret_cast<GLuint*>(&m_iFrameBufferHandle) );
if( m_iTexHandle )
glDeleteTextures( 1, reinterpret_cast<GLuint*>(&m_iTexHandle) );
}
@@ -2357,7 +2360,7 @@ void RenderTarget_FramebufferObject::Create( const RenderTargetParam &param, int
glBindTexture( GL_TEXTURE_2D, m_iTexHandle );
GLenum internalformat;
GLenum type = param.bWithAlpha? GL_RGBA:GL_RGB;
if( param.bFloat && GLExt.m_bGL_ARB_texture_float )
if( param.bFloat && GLEW_ARB_texture_float )
internalformat = param.bWithAlpha? GL_RGBA16F_ARB:GL_RGB16F_ARB;
else
internalformat = param.bWithAlpha? GL_RGBA8:GL_RGB8;
@@ -2372,25 +2375,25 @@ void RenderTarget_FramebufferObject::Create( const RenderTargetParam &param, int
glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
/* Create the framebuffer object. */
GLExt.glGenFramebuffersEXT( 1, reinterpret_cast<GLuint*>(&m_iFrameBufferHandle) );
glGenFramebuffersEXT( 1, reinterpret_cast<GLuint*>(&m_iFrameBufferHandle) );
ASSERT( m_iFrameBufferHandle );
/* Attach the texture to it. */
GLExt.glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, m_iFrameBufferHandle );
GLExt.glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_iTexHandle, 0 );
glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, m_iFrameBufferHandle );
glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, m_iTexHandle, 0 );
DebugAssertNoGLError();
/* Attach a depth buffer, if requested. */
if( param.bWithDepthBuffer )
{
GLExt.glGenRenderbuffersEXT( 1, reinterpret_cast<GLuint*>(&m_iDepthBufferHandle) );
glGenRenderbuffersEXT( 1, reinterpret_cast<GLuint*>(&m_iDepthBufferHandle) );
ASSERT( m_iDepthBufferHandle );
GLExt.glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT16, iTextureWidth, iTextureHeight );
GLExt.glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, m_iDepthBufferHandle );
glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT16, iTextureWidth, iTextureHeight );
glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, m_iDepthBufferHandle );
}
GLenum status = GLExt.glCheckFramebufferStatusEXT( GL_FRAMEBUFFER_EXT );
GLenum status = glCheckFramebufferStatusEXT( GL_FRAMEBUFFER_EXT );
switch(status)
{
case GL_FRAMEBUFFER_COMPLETE_EXT:
@@ -2408,22 +2411,22 @@ void RenderTarget_FramebufferObject::Create( const RenderTargetParam &param, int
ASSERT(0);
}
GLExt.glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );
glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );
}
void RenderTarget_FramebufferObject::StartRenderingTo()
{
GLExt.glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, m_iFrameBufferHandle );
glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, m_iFrameBufferHandle );
}
void RenderTarget_FramebufferObject::FinishRenderingTo()
{
GLExt.glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );
glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );
}
bool RageDisplay_Legacy::SupportsRenderToTexture() const
{
return GLExt.m_bGL_EXT_framebuffer_object || g_pWind->SupportsRenderToTexture();
return GLEW_EXT_framebuffer_object || g_pWind->SupportsRenderToTexture();
}
/*
@@ -2435,7 +2438,7 @@ bool RageDisplay_Legacy::SupportsRenderToTexture() const
unsigned RageDisplay_Legacy::CreateRenderTarget( const RenderTargetParam &param, int &iTextureWidthOut, int &iTextureHeightOut )
{
RenderTarget *pTarget;
if( GLExt.m_bGL_EXT_framebuffer_object )
if( GLEW_EXT_framebuffer_object )
pTarget = new RenderTarget_FramebufferObject;
else
pTarget = g_pWind->CreateRenderTarget();
@@ -2589,7 +2592,7 @@ bool RageDisplay_Legacy::SupportsSurfaceFormat( PixelFormat pixfmt )
switch( g_GLPixFmtInfo[pixfmt].type )
{
case GL_UNSIGNED_SHORT_1_5_5_5_REV:
return GLExt.m_bGL_EXT_bgra && g_bReversePackedPixelsWorks;
return GLEW_EXT_bgra && g_bReversePackedPixelsWorks;
default:
return true;
}
@@ -2607,10 +2610,10 @@ bool RageDisplay_Legacy::SupportsTextureFormat( PixelFormat pixfmt, bool bRealti
switch( g_GLPixFmtInfo[pixfmt].format )
{
case GL_COLOR_INDEX:
return GLExt.glColorTableEXT && GLExt.glGetColorTableParameterivEXT;
return glColorTableEXT && glGetColorTableParameterivEXT;
case GL_BGR:
case GL_BGRA:
return GLExt.m_bGL_EXT_bgra;
return GLEW_EXT_bgra;
default:
return true;
}
@@ -2620,7 +2623,7 @@ bool RageDisplay_Legacy::SupportsPerVertexMatrixScale()
{
// Intel i915 on OSX 10.4.4 supports vertex programs but not hardware vertex buffers.
// Our software vertex rendering doesn't support vertex programs.
return GLExt.glGenBuffersARB && g_bTextureMatrixShader != 0;
return glGenBuffersARB && g_bTextureMatrixShader != 0;
}
void RageDisplay_Legacy::SetSphereEnvironmentMapping( TextureUnit tu, bool b )
@@ -2646,25 +2649,25 @@ GLint iCelTexture1, iCelTexture2 = 0;
void RageDisplay_Legacy::SetCelShaded( int stage )
{
if( !GLExt.m_bGL_ARB_fragment_shader )
if( !GLEW_ARB_fragment_shader )
return; // not supported
switch ( stage )
{
case 1:
GLExt.glUseProgramObjectARB( g_gShellShader );
glUseProgramObjectARB( g_gShellShader );
break;
case 2:
GLExt.glUseProgramObjectARB( g_gCelShader );
glUseProgramObjectARB( g_gCelShader );
break;
default:
GLExt.glUseProgramObjectARB( 0 );
glUseProgramObjectARB( 0 );
break;
}
}
/*
* Copyright (c) 2001-2009 Chris Danford, Glenn Maynard, Colby Klein
* Copyright (c) 2001-2011 Chris Danford, Glenn Maynard, Colby Klein
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
+1 -1
View File
@@ -129,7 +129,7 @@ protected:
#endif
/*
* Copyright (c) 2001-2004 Chris Danford, Glenn Maynard
* Copyright (c) 2001-2011 Chris Danford, Glenn Maynard, Colby Klein
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
+3 -225
View File
@@ -43,49 +43,7 @@ RString RageDisplay_Legacy_Helpers::GLToString( GLenum e )
return ssprintf( "%i", int(e) );
}
GLExt_t GLExt;
/* Available extensions: */
static set<string> g_glExts;
bool GLExt_t::HasExtension( const RString &sExt ) const
{
return g_glExts.find(sExt) != g_glExts.end();
}
#define F(n) { (void **)(&GLExt.n), #n }
struct func_t
{
void **p;
const char *name;
};
static bool LoadAllOrNothing( struct func_t *funcs, LowLevelWindow *pWind )
{
bool bGotAll = true;
for( unsigned i = 0; funcs[i].p != NULL; ++i )
{
*funcs[i].p = pWind->GetProcAddress( funcs[i].name );
if( *funcs[i].p == NULL )
{
bGotAll = false;
break;
}
}
if( bGotAll )
return true;
/* If any function in the array wasn't found, clear them all. */
for( unsigned i = 0; funcs[i].p != NULL; ++i )
*funcs[i].p = NULL;
return false;
}
/*
static void GetGLExtensions( set<string> &ext )
{
const char *szBuf = (const char *) glGetString( GL_EXTENSIONS );
@@ -96,190 +54,10 @@ static void GetGLExtensions( set<string> &ext )
for( unsigned i = 0; i < asList.size(); ++i )
ext.insert( asList[i] );
}
void GLExt_t::Load( LowLevelWindow *pWind )
{
memset( this, 0, sizeof(*this) );
GetGLExtensions( g_glExts );
m_bARB_texture_env_combine = HasExtension("GL_ARB_texture_env_combine");
m_bEXT_texture_env_combine = HasExtension("GL_EXT_texture_env_combine");
m_bGL_EXT_bgra = HasExtension("GL_EXT_bgra");
m_bGL_ARB_texture_float = HasExtension("GL_ARB_texture_float");
#if defined(WIN32)
if( HasExtension("WGL_EXT_swap_control") )
wglSwapIntervalEXT = (PWSWAPINTERVALEXTPROC) pWind->GetProcAddress("wglSwapIntervalEXT");
#endif
if( HasExtension("GL_EXT_paletted_texture") )
{
glColorTableEXT = (PFNGLCOLORTABLEPROC) pWind->GetProcAddress("glColorTableEXT");
glGetColorTableParameterivEXT = (PFNGLCOLORTABLEPARAMETERIVPROC) pWind->GetProcAddress("glGetColorTableParameterivEXT");
}
if( HasExtension("GL_ARB_multitexture") )
{
func_t funcs[] = {
F( glActiveTextureARB ),
F( glClientActiveTextureARB ),
{ NULL, NULL },
};
LoadAllOrNothing( funcs, pWind);
}
if( HasExtension("GL_EXT_blend_func_separate") )
glBlendFuncSeparateEXT = (PFNGLBLENDFUNCSEPARATEEXTPROC) pWind->GetProcAddress("glBlendFuncSeparateEXT");
if( HasExtension("GL_EXT_blend_subtract") )
glBlendEquation = (PFNGLBLENDEQUATIONPROC) pWind->GetProcAddress("glBlendEquation");
/*
* Find extension functions.
*
* X11R6.7.0 (or possibly ATI's drivers) seem to be returning bogus values for glBindBufferARB
* if we don't actually check for GL_ARB_vertex_buffer_object.
* https://sf.net/tracker/download.php?group_id=37892&atid=421366&file_id=88086&aid=958820
* https://sf.net/tracker/download.php?group_id=37892&atid=421366&file_id=85542&aid=944836
*
* Let's check them all, to be safe.
*/
if( HasExtension("GL_ARB_vertex_buffer_object") )
{
func_t funcs[] = {
F( glGenBuffersARB ),
F( glBindBufferARB ),
F( glBufferDataARB ),
F( glBufferSubDataARB ),
F( glDeleteBuffersARB ),
F( glMapBufferARB ),
F( glUnmapBufferARB ),
{ NULL, NULL },
};
LoadAllOrNothing( funcs, pWind );
}
if( HasExtension("GL_EXT_draw_range_elements") )
GLExt.glDrawRangeElements = (PFNGLDRAWRANGEELEMENTSPROC) pWind->GetProcAddress("glDrawRangeElements");
m_bGL_ARB_shader_objects = HasExtension("GL_ARB_shader_objects");
if( m_bGL_ARB_shader_objects )
{
func_t funcs[] = {
F( glCreateShaderObjectARB ),
F( glCreateShaderObjectARB ),
F( glCreateProgramObjectARB ),
F( glShaderSourceARB ),
F( glCompileShaderARB ),
F( glGetObjectParameterfvARB ),
F( glGetObjectParameterivARB ),
F( glGetInfoLogARB ),
F( glAttachObjectARB ),
F( glDeleteObjectARB ),
F( glLinkProgramARB ),
F( glUseProgramObjectARB ),
F( glVertexAttrib2fARB ),
F( glVertexAttrib3fARB ),
F( glVertexAttrib4fARB ),
F( glEnableVertexAttribArrayARB ),
F( glDisableVertexAttribArrayARB ),
F( glVertexAttribPointerARB ),
F( glGetUniformLocationARB ),
F( glUniform1fARB ),
F( glUniform2fARB ),
F( glUniform3fARB ),
F( glUniform4fARB ),
F( glUniform1iARB ),
F( glUniform2iARB ),
F( glUniform3iARB ),
F( glUniform4iARB ),
F( glUniform1fvARB ),
F( glUniform2fvARB ),
F( glUniform3fvARB ),
F( glUniform4fvARB ),
F( glUniform1ivARB ),
F( glUniform2ivARB ),
F( glUniform3ivARB ),
F( glUniform4ivARB ),
F( glUniformMatrix2fvARB ),
F( glUniformMatrix2fvARB ),
F( glUniformMatrix2fvARB ),
{ NULL, NULL }
};
if( !LoadAllOrNothing(funcs, pWind) )
m_bGL_ARB_shader_objects = false;
}
m_bGL_ARB_vertex_shader = m_bGL_ARB_shader_objects && HasExtension("GL_ARB_vertex_shader");
m_bGL_ARB_fragment_shader = m_bGL_ARB_shader_objects && HasExtension("GL_ARB_fragment_shader");
if( m_bGL_ARB_vertex_shader )
{
func_t funcs[] =
{
F( glBindAttribLocationARB ),
F( glGetAttribLocationARB ),
{ NULL, NULL }
};
if( !LoadAllOrNothing(funcs, pWind) )
m_bGL_ARB_vertex_shader = false;
}
m_bGL_ARB_shading_language_100 = HasExtension("GL_ARB_shading_language_100");
if( m_bGL_ARB_shading_language_100 )
{
while( glGetError() != GL_NO_ERROR )
;
const char *pzVersion = (const char *) glGetString( GL_SHADING_LANGUAGE_VERSION );
GLenum glError = glGetError();
if( glError == GL_INVALID_ENUM )
{
LOG->Info( "No GL_SHADING_LANGUAGE_VERSION; assuming 1.0" );
m_iShadingLanguageVersion = 100;
}
else
{
const float fVersion = StringToFloat( pzVersion );
m_iShadingLanguageVersion = lrintf( fVersion * 100 );
/* The version string may contain extra information beyond the version number. */
LOG->Info( "OpenGL shading language: %s", pzVersion );
}
}
m_bGL_EXT_framebuffer_object = HasExtension("GL_EXT_framebuffer_object");
if( m_bGL_EXT_framebuffer_object )
{
func_t funcs[] = {
F( glIsRenderbufferEXT ),
F( glBindRenderbufferEXT ),
F( glDeleteRenderbuffersEXT ),
F( glGenRenderbuffersEXT ),
F( glRenderbufferStorageEXT ),
F( glGetRenderbufferParameterivEXT ),
F( glIsFramebufferEXT ),
F( glBindFramebufferEXT ),
F( glDeleteFramebuffersEXT ),
F( glGenFramebuffersEXT ),
F( glCheckFramebufferStatusEXT ),
F( glFramebufferTexture1DEXT ),
F( glFramebufferTexture2DEXT ),
F( glFramebufferTexture3DEXT ),
F( glFramebufferRenderbufferEXT ),
F( glGetFramebufferAttachmentParameterivEXT ),
F( glGenerateMipmapEXT ),
{ NULL, NULL }
};
if( !LoadAllOrNothing(funcs, pWind) )
m_bGL_EXT_framebuffer_object = false;
}
}
*/
/*
* Copyright (c) 2001-2005 Chris Danford, Glenn Maynard
* Copyright (c) 2001-2011 Chris Danford, Glenn Maynard, Colby Klein
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a
+2 -119
View File
@@ -1,23 +1,11 @@
#ifndef RAGE_DISPLAY_OGL_HELPERS_H
#define RAGE_DISPLAY_OGL_HELPERS_H
/* ours may be more up-to-date */
#define __glext_h_
#if defined(WIN32)
#include <windows.h>
#endif
#if !defined(MACOSX)
# include <GL/gl.h>
# include <GL/glu.h>
#else
# include <OpenGL/gl.h>
# include <OpenGL/glu.h>
#endif
#undef __glext_h_
#include "glext.h"
#include <GL/glew.h>
/* Import RageDisplay, for types. Do not include RageDisplay_Legacy.h. */
#include "RageDisplay.h"
@@ -27,9 +15,6 @@
#define GL_TEXTURE_INDEX_SIZE_EXT 0x80ED
#endif
/* Not in glext.h: */
typedef bool (APIENTRY * PWSWAPINTERVALEXTPROC) (int interval);
/** @brief Utilities for working with the RageDisplay. */
namespace RageDisplay_Legacy_Helpers
{
@@ -60,112 +45,10 @@ protected:
RenderTargetParam m_Param;
};
class LowLevelWindow;
struct GLExt_t
{
bool m_bARB_texture_env_combine;
bool m_bEXT_texture_env_combine;
bool m_bGL_EXT_bgra;
bool m_bGL_ARB_texture_float;
PWSWAPINTERVALEXTPROC wglSwapIntervalEXT;
PFNGLCOLORTABLEPROC glColorTableEXT;
PFNGLBLENDFUNCSEPARATEEXTPROC glBlendFuncSeparateEXT;
PFNGLBLENDEQUATIONPROC glBlendEquation;
PFNGLCOLORTABLEPARAMETERIVPROC glGetColorTableParameterivEXT;
PFNGLACTIVETEXTUREARBPROC glActiveTextureARB;
PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB;
PFNGLDRAWRANGEELEMENTSPROC glDrawRangeElements;
// ARB_vertex_buffer_object:
PFNGLGENBUFFERSARBPROC glGenBuffersARB;
PFNGLBINDBUFFERARBPROC glBindBufferARB;
PFNGLBUFFERDATAARBPROC glBufferDataARB;
PFNGLBUFFERSUBDATAARBPROC glBufferSubDataARB;
PFNGLDELETEBUFFERSARBPROC glDeleteBuffersARB;
PFNGLMAPBUFFERARBPROC glMapBufferARB;
PFNGLUNMAPBUFFERARBPROC glUnmapBufferARB;
// GL_ARB_shader_objects:
bool m_bGL_ARB_shader_objects;
PFNGLCREATESHADEROBJECTARBPROC glCreateShaderObjectARB;
PFNGLCREATEPROGRAMOBJECTARBPROC glCreateProgramObjectARB;
PFNGLSHADERSOURCEARBPROC glShaderSourceARB;
PFNGLCOMPILESHADERARBPROC glCompileShaderARB;
PFNGLGETOBJECTPARAMETERFVARBPROC glGetObjectParameterfvARB;
PFNGLGETOBJECTPARAMETERIVARBPROC glGetObjectParameterivARB;
PFNGLGETINFOLOGARBPROC glGetInfoLogARB;
PFNGLATTACHOBJECTARBPROC glAttachObjectARB;
PFNGLDELETEOBJECTARBPROC glDeleteObjectARB;
PFNGLLINKPROGRAMARBPROC glLinkProgramARB;
PFNGLUSEPROGRAMOBJECTARBPROC glUseProgramObjectARB;
PFNGLVERTEXATTRIB2FARBPROC glVertexAttrib2fARB;
PFNGLVERTEXATTRIB3FARBPROC glVertexAttrib3fARB;
PFNGLVERTEXATTRIB4FARBPROC glVertexAttrib4fARB;
PFNGLENABLEVERTEXATTRIBARRAYARBPROC glEnableVertexAttribArrayARB;
PFNGLDISABLEVERTEXATTRIBARRAYARBPROC glDisableVertexAttribArrayARB;
PFNGLVERTEXATTRIBPOINTERARBPROC glVertexAttribPointerARB;
PFNGLGETUNIFORMLOCATIONARBPROC glGetUniformLocationARB;
PFNGLUNIFORM1FARBPROC glUniform1fARB;
PFNGLUNIFORM2FARBPROC glUniform2fARB;
PFNGLUNIFORM3FARBPROC glUniform3fARB;
PFNGLUNIFORM4FARBPROC glUniform4fARB;
PFNGLUNIFORM1IARBPROC glUniform1iARB;
PFNGLUNIFORM2IARBPROC glUniform2iARB;
PFNGLUNIFORM3IARBPROC glUniform3iARB;
PFNGLUNIFORM4IARBPROC glUniform4iARB;
PFNGLUNIFORM1FVARBPROC glUniform1fvARB;
PFNGLUNIFORM2FVARBPROC glUniform2fvARB;
PFNGLUNIFORM3FVARBPROC glUniform3fvARB;
PFNGLUNIFORM4FVARBPROC glUniform4fvARB;
PFNGLUNIFORM1IVARBPROC glUniform1ivARB;
PFNGLUNIFORM2IVARBPROC glUniform2ivARB;
PFNGLUNIFORM3IVARBPROC glUniform3ivARB;
PFNGLUNIFORM4IVARBPROC glUniform4ivARB;
PFNGLUNIFORMMATRIX2FVARBPROC glUniformMatrix2fvARB;
PFNGLUNIFORMMATRIX3FVARBPROC glUniformMatrix3fvARB;
PFNGLUNIFORMMATRIX4FVARBPROC glUniformMatrix4fvARB;
// GL_ARB_vertex_shader and GL_ARB_fragment_shader:
bool m_bGL_ARB_vertex_shader;
bool m_bGL_ARB_fragment_shader;
PFNGLBINDATTRIBLOCATIONARBPROC glBindAttribLocationARB;
PFNGLGETATTRIBLOCATIONARBPROC glGetAttribLocationARB;
bool m_bGL_ARB_shading_language_100;
int m_iShadingLanguageVersion; /* * 100 */
// GL_EXT_framebuffer_object:
bool m_bGL_EXT_framebuffer_object;
PFNGLISRENDERBUFFEREXTPROC glIsRenderbufferEXT;
PFNGLBINDRENDERBUFFEREXTPROC glBindRenderbufferEXT;
PFNGLDELETERENDERBUFFERSEXTPROC glDeleteRenderbuffersEXT;
PFNGLGENRENDERBUFFERSEXTPROC glGenRenderbuffersEXT;
PFNGLRENDERBUFFERSTORAGEEXTPROC glRenderbufferStorageEXT;
PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC glGetRenderbufferParameterivEXT;
PFNGLISFRAMEBUFFEREXTPROC glIsFramebufferEXT;
PFNGLBINDFRAMEBUFFEREXTPROC glBindFramebufferEXT;
PFNGLDELETEFRAMEBUFFERSEXTPROC glDeleteFramebuffersEXT;
PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffersEXT;
PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC glCheckFramebufferStatusEXT;
PFNGLFRAMEBUFFERTEXTURE1DEXTPROC glFramebufferTexture1DEXT;
PFNGLFRAMEBUFFERTEXTURE2DEXTPROC glFramebufferTexture2DEXT;
PFNGLFRAMEBUFFERTEXTURE3DEXTPROC glFramebufferTexture3DEXT;
PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC glFramebufferRenderbufferEXT;
PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC glGetFramebufferAttachmentParameterivEXT;
PFNGLGENERATEMIPMAPEXTPROC glGenerateMipmapEXT;
void Load( LowLevelWindow *pWind );
bool HasExtension( const RString &sExt ) const;
};
extern GLExt_t GLExt;
#endif
/*
* Copyright (c) 2001-2005 Chris Danford, Glenn Maynard
* Copyright (c) 2001-2011 Chris Danford, Glenn Maynard, Colby Klein
* All rights reserved.
*
* Permission is hereby granted, free of charge, to any person obtaining a