Browse Source

gl2shim: Cleanup warnings, use APIENTRY declarations, stub unsupported functions

pull/2/head
mittorn 9 months ago committed by Alibek Omarov
parent
commit
40dd6e0234
  1. 152
      ref/gl/gl2_shim/gl2_shim.c

152
ref/gl/gl2_shim/gl2_shim.c

@ -120,8 +120,8 @@ static const char *gl2wrap_attr_name[GL2_ATTR_MAX] =
}; };
// HACK: borrow alpha test and fog flags from internal vitaGL state // HACK: borrow alpha test and fog flags from internal vitaGL state
GLboolean alpha_test_state; static GLboolean alpha_test_state;
GLboolean fogging; static GLboolean fogging;
static char *GL_PrintInfoLog( GLhandleARB object ) static char *GL_PrintInfoLog( GLhandleARB object )
{ {
@ -245,6 +245,7 @@ static gl2wrap_prog_t *GL2_GetProg( const GLuint flags )
pglDeleteObjectARB( vp ); pglDeleteObjectARB( vp );
pglDeleteObjectARB( fp ); pglDeleteObjectARB( fp );
#ifndef XASH_GLES
pglGetObjectParameterivARB( glprog, GL_OBJECT_LINK_STATUS_ARB, &status ); pglGetObjectParameterivARB( glprog, GL_OBJECT_LINK_STATUS_ARB, &status );
if ( status == GL_FALSE ) if ( status == GL_FALSE )
{ {
@ -253,6 +254,7 @@ static gl2wrap_prog_t *GL2_GetProg( const GLuint flags )
pglDeleteObjectARB( glprog ); pglDeleteObjectARB( glprog );
return NULL; return NULL;
} }
#endif
prog->ucolor = pglGetUniformLocationARB( glprog, "uColor" ); prog->ucolor = pglGetUniformLocationARB( glprog, "uColor" );
prog->ualpha = pglGetUniformLocationARB( glprog, "uAlphaTest" ); prog->ualpha = pglGetUniformLocationARB( glprog, "uAlphaTest" );
@ -262,9 +264,9 @@ static gl2wrap_prog_t *GL2_GetProg( const GLuint flags )
prog->uMVP = pglGetUniformLocationARB( glprog, "uMVP" ); prog->uMVP = pglGetUniformLocationARB( glprog, "uMVP" );
// these never change // these never change
if ( prog->utex0 >= 0 ) if ( prog->flags & ( 1U << GL2_ATTR_TEXCOORD0 ) && prog->utex0 >= 0 )
pglUniform1iARB( prog->utex0, 0 ); pglUniform1iARB( prog->utex0, 0 );
if ( prog->utex1 >= 0 ) if ( prog->flags & ( 1U << GL2_ATTR_TEXCOORD0 ) && prog->utex1 >= 0 )
pglUniform1iARB( prog->utex1, 1 ); pglUniform1iARB( prog->utex1, 1 );
prog->glprog = glprog; prog->glprog = glprog;
@ -345,7 +347,7 @@ int GL2_ShimInit( void )
gl2wrap.uchanged = GL_TRUE; gl2wrap.uchanged = GL_TRUE;
total = 0; total = 0;
if( pglGenVertexArrays ) if( glConfig.context == CONTEXT_TYPE_GL_CORE && pglGenVertexArrays )
pglGenVertexArrays(1, &gl2wrap.vao); pglGenVertexArrays(1, &gl2wrap.vao);
if(gl2wrap.vao) if(gl2wrap.vao)
pglBindVertexArray(gl2wrap.vao); pglBindVertexArray(gl2wrap.vao);
@ -354,7 +356,7 @@ int GL2_ShimInit( void )
size = GL2_MAX_VERTS * gl2wrap_attr_size[i] * sizeof( GLfloat ); size = GL2_MAX_VERTS * gl2wrap_attr_size[i] * sizeof( GLfloat );
// TODO: rework storage, support MapBuffer // TODO: rework storage, support MapBuffer
gl2wrap.attrbuf[i] = memalign( 0x100, size ); gl2wrap.attrbuf[i] = memalign( 0x100, size );
if( glConfig.context == CONTEXT_TYPE_GL_CORE) if( gl2wrap.vao )
pglGenBuffersARB( 1, &gl2wrap.attrbufobj[i] ); pglGenBuffersARB( 1, &gl2wrap.attrbufobj[i] );
total += size; total += size;
} }
@ -365,7 +367,7 @@ int GL2_ShimInit( void )
GL2_ShimInstall(); GL2_ShimInstall();
gEngfuncs.Con_DPrintf( S_NOTE "GL2_ShimInit(): %u bytes allocated for vertex buffer\n", total ); gEngfuncs.Con_DPrintf( S_NOTE "GL2_ShimInit(): %u bytes allocated for vertex buffer\n", total );
gEngfuncs.Con_DPrintf( S_NOTE "GL2_ShimInit(): Pre-generating %u progs...\n", sizeof( precache_progs ) / sizeof( *precache_progs ) ); gEngfuncs.Con_DPrintf( S_NOTE "GL2_ShimInit(): Pre-generating %u progs...\n", (uint)(sizeof( precache_progs ) / sizeof( *precache_progs ) ));
for ( i = 0; i < (int)( sizeof( precache_progs ) / sizeof( *precache_progs ) ); ++i ) for ( i = 0; i < (int)( sizeof( precache_progs ) / sizeof( *precache_progs ) ); ++i )
GL2_GetProg( precache_progs[i] ); GL2_GetProg( precache_progs[i] );
@ -407,7 +409,7 @@ void GL2_ShimEndFrame( void )
gl2wrap.end = gl2wrap.begin = 0; gl2wrap.end = gl2wrap.begin = 0;
} }
void GL2_Begin( GLenum prim ) static void APIENTRY GL2_Begin( GLenum prim )
{ {
int i; int i;
gl2wrap.prim = prim; gl2wrap.prim = prim;
@ -423,7 +425,7 @@ void GL2_Begin( GLenum prim )
} }
void GL2_End( void ) static void APIENTRY GL2_End( void )
{ {
int i; int i;
gl2wrap_prog_t *prog; gl2wrap_prog_t *prog;
@ -482,8 +484,8 @@ _leave:
gl2wrap.cur_flags = 0; gl2wrap.cur_flags = 0;
} }
void (*rpglTexImage2D)( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ); static void (* APIENTRY rpglTexImage2D)( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels );
void GL2_TexImage2D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels ) static void APIENTRY GL2_TexImage2D( GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels )
{ {
void *data = (void*)pixels; void *data = (void*)pixels;
if( pixels && format == GL_RGBA && ( if( pixels && format == GL_RGBA && (
@ -506,14 +508,14 @@ void GL2_TexImage2D( GLenum target, GLint level, GLint internalformat, GLsizei w
} }
internalformat = format; internalformat = format;
} }
if( internalformat == GL_LUMINANCE8_ALPHA8 ) if( internalformat == GL_LUMINANCE8_ALPHA8 || internalformat == GL_RGB )
internalformat = GL_RGBA; internalformat = GL_RGBA;
rpglTexImage2D( target, level, internalformat, width, height, border, format, type, data ); rpglTexImage2D( target, level, internalformat, width, height, border, format, type, data );
if( data != pixels ) if( data != pixels )
free(data); free(data);
} }
void (*rpglTexParameteri)( GLenum target, GLenum pname, GLint param ); static void (* APIENTRY rpglTexParameteri)( GLenum target, GLenum pname, GLint param );
void GL2_TexParameteri( GLenum target, GLenum pname, GLint param ) static void APIENTRY GL2_TexParameteri( GLenum target, GLenum pname, GLint param )
{ {
if ( pname == GL_TEXTURE_BORDER_COLOR ) if ( pname == GL_TEXTURE_BORDER_COLOR )
{ {
@ -530,8 +532,8 @@ void GL2_TexParameteri( GLenum target, GLenum pname, GLint param )
} }
GLboolean (*rpglIsEnabled)(GLenum e); GLboolean (* APIENTRY rpglIsEnabled)(GLenum e);
GLboolean GL2_IsEnabled(GLenum e) static GLboolean APIENTRY GL2_IsEnabled(GLenum e)
{ {
if(e == GL_FOG) if(e == GL_FOG)
return fogging; return fogging;
@ -541,7 +543,7 @@ GLboolean GL2_IsEnabled(GLenum e)
void GL2_Vertex3f( GLfloat x, GLfloat y, GLfloat z ) static void APIENTRY GL2_Vertex3f( GLfloat x, GLfloat y, GLfloat z )
{ {
GLfloat *p = gl2wrap.attrbuf[GL2_ATTR_POS] + gl2wrap.end * 3; GLfloat *p = gl2wrap.attrbuf[GL2_ATTR_POS] + gl2wrap.end * 3;
*p++ = x; *p++ = x;
@ -555,17 +557,17 @@ void GL2_Vertex3f( GLfloat x, GLfloat y, GLfloat z )
} }
} }
void GL2_Vertex2f( GLfloat x, GLfloat y ) static void APIENTRY GL2_Vertex2f( GLfloat x, GLfloat y )
{ {
GL2_Vertex3f( x, y, 0.f ); GL2_Vertex3f( x, y, 0.f );
} }
void GL2_Vertex3fv( const GLfloat *v ) static void APIENTRY GL2_Vertex3fv( const GLfloat *v )
{ {
GL2_Vertex3f( v[0], v[1], v[2] ); GL2_Vertex3f( v[0], v[1], v[2] );
} }
void GL2_Color4f( GLfloat r, GLfloat g, GLfloat b, GLfloat a ) static void APIENTRY GL2_Color4f( GLfloat r, GLfloat g, GLfloat b, GLfloat a )
{ {
gl2wrap.color[0] = r; gl2wrap.color[0] = r;
gl2wrap.color[1] = g; gl2wrap.color[1] = g;
@ -584,22 +586,22 @@ void GL2_Color4f( GLfloat r, GLfloat g, GLfloat b, GLfloat a )
} }
} }
void GL2_Color3f( GLfloat r, GLfloat g, GLfloat b ) static void APIENTRY GL2_Color3f( GLfloat r, GLfloat g, GLfloat b )
{ {
GL2_Color4f( r, g, b, 1.f ); GL2_Color4f( r, g, b, 1.f );
} }
void GL2_Color4ub( GLubyte r, GLubyte g, GLubyte b, GLubyte a ) static void APIENTRY GL2_Color4ub( GLubyte r, GLubyte g, GLubyte b, GLubyte a )
{ {
GL2_Color4f( (GLfloat)r / 255.f, (GLfloat)g / 255.f, (GLfloat)b / 255.f, (GLfloat)a / 255.f ); GL2_Color4f( (GLfloat)r / 255.f, (GLfloat)g / 255.f, (GLfloat)b / 255.f, (GLfloat)a / 255.f );
} }
void GL2_Color4ubv( const GLubyte *v ) static void APIENTRY GL2_Color4ubv( const GLubyte *v )
{ {
GL2_Color4ub( v[0], v[1], v[2], v[3] ); GL2_Color4ub( v[0], v[1], v[2], v[3] );
} }
void GL2_TexCoord2f( GLfloat u, GLfloat v ) static void APIENTRY GL2_TexCoord2f( GLfloat u, GLfloat v )
{ {
// by spec glTexCoord always updates texunit 0 // by spec glTexCoord always updates texunit 0
GLfloat *p = gl2wrap.attrbuf[GL2_ATTR_TEXCOORD0] + gl2wrap.end * 2; GLfloat *p = gl2wrap.attrbuf[GL2_ATTR_TEXCOORD0] + gl2wrap.end * 2;
@ -608,7 +610,7 @@ void GL2_TexCoord2f( GLfloat u, GLfloat v )
*p++ = v; *p++ = v;
} }
void GL2_MultiTexCoord2f( GLenum tex, GLfloat u, GLfloat v ) static void APIENTRY GL2_MultiTexCoord2f( GLenum tex, GLfloat u, GLfloat v )
{ {
GLfloat *p; GLfloat *p;
// assume there can only be two // assume there can only be two
@ -626,24 +628,15 @@ void GL2_MultiTexCoord2f( GLenum tex, GLfloat u, GLfloat v )
*p++ = v; *p++ = v;
} }
void GL2_Normal3fv( const GLfloat *v )
{
/* this does not seem to be necessary */
}
void GL2_ShadeModel( GLenum unused ) static void APIENTRY GL2_AlphaFunc( GLenum mode, GLfloat ref )
{
/* this doesn't do anything in vitaGL except spit errors in debug mode, so stub it out */
}
void GL2_AlphaFunc( GLenum mode, GLfloat ref )
{ {
gl2wrap.alpharef = ref; gl2wrap.alpharef = ref;
gl2wrap.uchanged = GL_TRUE; gl2wrap.uchanged = GL_TRUE;
// mode is always GL_GREATER // mode is always GL_GREATER
} }
void GL2_Fogf( GLenum param, GLfloat val ) static void APIENTRY GL2_Fogf( GLenum param, GLfloat val )
{ {
if ( param == GL_FOG_DENSITY ) if ( param == GL_FOG_DENSITY )
{ {
@ -652,7 +645,7 @@ void GL2_Fogf( GLenum param, GLfloat val )
} }
} }
void GL2_Fogfv( GLenum param, const GLfloat *val ) static void APIENTRY GL2_Fogfv( GLenum param, const GLfloat *val )
{ {
if ( param == GL_FOG_COLOR ) if ( param == GL_FOG_COLOR )
{ {
@ -663,49 +656,34 @@ void GL2_Fogfv( GLenum param, const GLfloat *val )
} }
} }
void GL2_DrawBuffer( GLenum mode ) static void APIENTRY GL2_Enable( GLenum e )
{
/* unsupported */
}
void GL2_Hint( GLenum hint, GLenum val )
{
/* none of the used hints are supported; stub to prevent errors */
}
void GL2_Enable( GLenum e )
{ {
if( e == GL_TEXTURE_2D ) if( e == GL_TEXTURE_2D )
{pglUseProgramObjectARB(0);} {}
else if( e == GL_FOG ) else if( e == GL_FOG )
fogging = 1; fogging = 1;
else if( e == GL_ALPHA_TEST ) else if( e == GL_ALPHA_TEST )
alpha_test_state = 1; alpha_test_state = 1;
else if(glConfig.context != CONTEXT_TYPE_GL) else
{
rpglEnable(e); rpglEnable(e);
return;
}
rpglEnable(e);
} }
void GL2_Disable( GLenum e ) static void APIENTRY GL2_Disable( GLenum e )
{ {
if( e == GL_TEXTURE_2D ) if( e == GL_TEXTURE_2D )
{} {}
if( e == GL_FOG ) else if( e == GL_FOG )
fogging = 0; fogging = 0;
else if( e == GL_ALPHA_TEST ) else if( e == GL_ALPHA_TEST )
alpha_test_state = 0; alpha_test_state = 0;
else if(glConfig.context != CONTEXT_TYPE_GL) else
{ {
rpglDisable(e); rpglDisable(e);
return;
} }
rpglDisable(e);
} }
void GL2_MatrixMode( GLenum m ) static void APIENTRY GL2_MatrixMode( GLenum m )
{ {
// if(gl2wrap_matrix.mode == m) // if(gl2wrap_matrix.mode == m)
// return; // return;
@ -724,7 +702,7 @@ void GL2_MatrixMode( GLenum m )
} }
} }
void GL2_LoadIdentity( void ) static void APIENTRY GL2_LoadIdentity( void )
{ {
float *m = (float*)gl2wrap_matrix.current; float *m = (float*)gl2wrap_matrix.current;
m[1] = m[2] = m[3] = m[4] = 0.0f; m[1] = m[2] = m[3] = m[4] = 0.0f;
@ -735,7 +713,7 @@ void GL2_LoadIdentity( void )
} }
void GL2_Ortho(double l, double r, double b, double t, double n, double f) static void APIENTRY GL2_Ortho(double l, double r, double b, double t, double n, double f)
{ {
GLfloat m0 = 2 / (r - l); GLfloat m0 = 2 / (r - l);
GLfloat m5 = 2 / (t - b); GLfloat m5 = 2 / (t - b);
@ -789,21 +767,19 @@ static void GL2_UpdateMVP( gl2wrap_prog_t *prog )
pglUniformMatrix4fvARB(prog->uMVP, 1, false, (void*)gl2wrap_matrix.mvp); pglUniformMatrix4fvARB(prog->uMVP, 1, false, (void*)gl2wrap_matrix.mvp);
} }
static void GL2_LoadMatrixf( const GLfloat *m ) static void APIENTRY GL2_LoadMatrixf( const GLfloat *m )
{ {
memcpy( gl2wrap_matrix.current, m, 16*sizeof(float) ); memcpy( gl2wrap_matrix.current, m, 16*sizeof(float) );
} }
static void GL2_Scalef(float x, float y, float z) static void ( APIENTRY*_pglDepthRangef)(GLfloat far, GLfloat near);
{
} static void APIENTRY GL2_DepthRange(GLdouble far, GLdouble near)
static void GL2_Translatef(float x, float y, float z)
{ {
_pglDepthRangef(far, near);
} }
#define GL2_OVERRIDE_PTR( name ) \ #define GL2_OVERRIDE_PTR( name ) \
{ \ { \
pgl ## name = GL2_ ## name; \ pgl ## name = GL2_ ## name; \
@ -815,10 +791,12 @@ static void GL2_Translatef(float x, float y, float z)
pgl ## name = GL2_ ## name; \ pgl ## name = GL2_ ## name; \
} }
#define GL2_OVERRIDE_PTR_B( name ) \
static void APIENTRY stub( void ){}
#define GL2_STUB( name ) \
{ \ { \
rpgl ## name = pgl ## name; \ *((void**)&pgl ## name) = (void*)stub; \
pgl ## name = GL2_ ## name; \
} }
void GL2_ShimInstall( void ) void GL2_ShimInstall( void )
@ -830,15 +808,13 @@ void GL2_ShimInstall( void )
GL2_OVERRIDE_PTR( Color4f ) GL2_OVERRIDE_PTR( Color4f )
GL2_OVERRIDE_PTR( Color4ub ) GL2_OVERRIDE_PTR( Color4ub )
GL2_OVERRIDE_PTR( Color4ubv ) GL2_OVERRIDE_PTR( Color4ubv )
GL2_OVERRIDE_PTR( Normal3fv ) GL2_STUB( Normal3fv )
GL2_OVERRIDE_PTR( TexCoord2f ) GL2_OVERRIDE_PTR( TexCoord2f )
GL2_OVERRIDE_PTR( MultiTexCoord2f ) GL2_OVERRIDE_PTR( MultiTexCoord2f )
GL2_OVERRIDE_PTR( ShadeModel )
GL2_OVERRIDE_PTR( DrawBuffer )
GL2_OVERRIDE_PTR( AlphaFunc ) GL2_OVERRIDE_PTR( AlphaFunc )
GL2_OVERRIDE_PTR( Fogf ) GL2_OVERRIDE_PTR( Fogf )
GL2_OVERRIDE_PTR( Fogfv ) GL2_OVERRIDE_PTR( Fogfv )
GL2_OVERRIDE_PTR( Hint ) GL2_STUB( Hint ) // fog
GL2_OVERRIDE_PTR( Begin ) GL2_OVERRIDE_PTR( Begin )
GL2_OVERRIDE_PTR( End ) GL2_OVERRIDE_PTR( End )
GL2_OVERRIDE_PTR_B( Enable ) GL2_OVERRIDE_PTR_B( Enable )
@ -847,10 +823,26 @@ void GL2_ShimInstall( void )
GL2_OVERRIDE_PTR( LoadIdentity ) GL2_OVERRIDE_PTR( LoadIdentity )
GL2_OVERRIDE_PTR( Ortho ) GL2_OVERRIDE_PTR( Ortho )
GL2_OVERRIDE_PTR( LoadMatrixf ) GL2_OVERRIDE_PTR( LoadMatrixf )
GL2_OVERRIDE_PTR( Scalef ) GL2_STUB( Scalef )
GL2_OVERRIDE_PTR( Translatef ) GL2_STUB( Translatef )
GL2_OVERRIDE_PTR_B( TexImage2D ) GL2_STUB( TexEnvi )
GL2_OVERRIDE_PTR_B( TexParameteri ) GL2_STUB( TexEnvf )
GL2_STUB( ClientActiveTextureARB )
GL2_STUB( ActiveTextureARB )
GL2_STUB( Fogi )
GL2_STUB( ShadeModel )
#ifdef XASH_GLES
_pglDepthRangef = gEngfuncs.GL_GetProcAddress("glDepthRangef");
GL2_STUB( PolygonMode )
GL2_STUB( PointSize )
GL2_OVERRIDE_PTR( DepthRange )
GL2_STUB( DrawBuffer )
#endif
if( glConfig.context != CONTEXT_TYPE_GL )
{
GL2_OVERRIDE_PTR_B( TexImage2D )
GL2_OVERRIDE_PTR_B( TexParameteri )
}
GL2_OVERRIDE_PTR_B( IsEnabled ) GL2_OVERRIDE_PTR_B( IsEnabled )

Loading…
Cancel
Save