[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
+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