summaryrefslogtreecommitdiff
path: root/src/gl_state.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gl_state.c')
-rw-r--r--src/gl_state.c321
1 files changed, 168 insertions, 153 deletions
diff --git a/src/gl_state.c b/src/gl_state.c
index 353fc98..b6a3151 100644
--- a/src/gl_state.c
+++ b/src/gl_state.c
@@ -8,7 +8,7 @@ of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
@@ -23,225 +23,234 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
glState_t gls;
-void GL_BindTexture( int texnum ) {
+void GL_BindTexture(int texnum)
+{
#ifdef _DEBUG
- if( gl_nobind->integer && !gls.tmu ) {
+ if (gl_nobind->integer && !gls.tmu) {
texnum = TEXNUM_DEFAULT;
}
#endif
- if( gls.texnum[gls.tmu] == texnum ) {
+ if (gls.texnum[gls.tmu] == texnum) {
return;
}
- qglBindTexture( GL_TEXTURE_2D, texnum );
+ qglBindTexture(GL_TEXTURE_2D, texnum);
gls.texnum[gls.tmu] = texnum;
c.texSwitches++;
}
-void GL_SelectTMU( int tmu ) {
- if( gls.tmu == tmu ) {
+void GL_SelectTMU(int tmu)
+{
+ if (gls.tmu == tmu) {
return;
}
- if( tmu < 0 || tmu >= gl_config.numTextureUnits ) {
- Com_Error( ERR_FATAL, "GL_SelectTMU: bad tmu %d", tmu );
+ if (tmu < 0 || tmu >= gl_config.numTextureUnits) {
+ Com_Error(ERR_FATAL, "GL_SelectTMU: bad tmu %d", tmu);
}
- qglActiveTextureARB( GL_TEXTURE0_ARB + tmu );
- qglClientActiveTextureARB( GL_TEXTURE0_ARB + tmu );
+ qglActiveTextureARB(GL_TEXTURE0_ARB + tmu);
+ qglClientActiveTextureARB(GL_TEXTURE0_ARB + tmu);
gls.tmu = tmu;
}
-void GL_TexEnv( GLenum texenv ) {
- if( gls.texenv[gls.tmu] == texenv ) {
+void GL_TexEnv(GLenum texenv)
+{
+ if (gls.texenv[gls.tmu] == texenv) {
return;
}
- switch( texenv ) {
+ switch (texenv) {
case GL_REPLACE:
case GL_MODULATE:
case GL_BLEND:
case GL_ADD:
- qglTexEnvi( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, texenv );
+ qglTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, texenv);
break;
default:
- Com_Error( ERR_FATAL, "GL_TexEnv: bad texenv" );
+ Com_Error(ERR_FATAL, "GL_TexEnv: bad texenv");
break;
}
gls.texenv[gls.tmu] = texenv;
}
-void GL_CullFace( glCullFace_t cull ) {
- if( gls.cull == cull ) {
+void GL_CullFace(glCullFace_t cull)
+{
+ if (gls.cull == cull) {
return;
}
- switch( cull ) {
+ switch (cull) {
case GLS_CULL_DISABLE:
- qglDisable( GL_CULL_FACE );
+ qglDisable(GL_CULL_FACE);
break;
case GLS_CULL_FRONT:
- qglEnable( GL_CULL_FACE );
- qglCullFace( GL_FRONT );
+ qglEnable(GL_CULL_FACE);
+ qglCullFace(GL_FRONT);
break;
case GLS_CULL_BACK:
- qglEnable( GL_CULL_FACE );
- qglCullFace( GL_BACK );
+ qglEnable(GL_CULL_FACE);
+ qglCullFace(GL_BACK);
break;
default:
- Com_Error( ERR_FATAL, "GL_CullFace: bad cull" );
+ Com_Error(ERR_FATAL, "GL_CullFace: bad cull");
break;
}
gls.cull = cull;
}
-void GL_Bits( glStateBits_t bits ) {
+void GL_Bits(glStateBits_t bits)
+{
glStateBits_t diff = bits ^ gls.bits;
- if( !diff ) {
+ if (!diff) {
return;
}
- if( diff & GLS_BLEND_MASK ) {
- if( bits & GLS_BLEND_MASK ) {
- qglEnable( GL_BLEND );
- if( bits & GLS_BLEND_BLEND ) {
- qglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
- } else if( bits & GLS_BLEND_ADD ) {
- qglBlendFunc( GL_SRC_ALPHA, GL_ONE );
- } else if( bits & GLS_BLEND_MODULATE ) {
- qglBlendFunc( GL_DST_COLOR, GL_ONE );
+ if (diff & GLS_BLEND_MASK) {
+ if (bits & GLS_BLEND_MASK) {
+ qglEnable(GL_BLEND);
+ if (bits & GLS_BLEND_BLEND) {
+ qglBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ } else if (bits & GLS_BLEND_ADD) {
+ qglBlendFunc(GL_SRC_ALPHA, GL_ONE);
+ } else if (bits & GLS_BLEND_MODULATE) {
+ qglBlendFunc(GL_DST_COLOR, GL_ONE);
}
} else {
- qglDisable( GL_BLEND );
+ qglDisable(GL_BLEND);
}
}
-
- if( diff & GLS_DEPTHMASK_FALSE ) {
- if( bits & GLS_DEPTHMASK_FALSE ) {
- qglDepthMask( GL_FALSE );
+
+ if (diff & GLS_DEPTHMASK_FALSE) {
+ if (bits & GLS_DEPTHMASK_FALSE) {
+ qglDepthMask(GL_FALSE);
} else {
- qglDepthMask( GL_TRUE );
+ qglDepthMask(GL_TRUE);
}
}
-
- if( diff & GLS_DEPTHTEST_DISABLE ) {
- if( bits & GLS_DEPTHTEST_DISABLE ) {
- qglDisable( GL_DEPTH_TEST );
+
+ if (diff & GLS_DEPTHTEST_DISABLE) {
+ if (bits & GLS_DEPTHTEST_DISABLE) {
+ qglDisable(GL_DEPTH_TEST);
} else {
- qglEnable( GL_DEPTH_TEST );
+ qglEnable(GL_DEPTH_TEST);
}
}
- if( diff & GLS_ALPHATEST_ENABLE ) {
- if( bits & GLS_ALPHATEST_ENABLE ) {
- qglEnable( GL_ALPHA_TEST );
+ if (diff & GLS_ALPHATEST_ENABLE) {
+ if (bits & GLS_ALPHATEST_ENABLE) {
+ qglEnable(GL_ALPHA_TEST);
} else {
- qglDisable( GL_ALPHA_TEST );
+ qglDisable(GL_ALPHA_TEST);
}
}
-
+
gls.bits = bits;
}
-void GL_Setup2D( void ) {
- qglViewport( 0, 0, r_config.width, r_config.height );
+void GL_Setup2D(void)
+{
+ qglViewport(0, 0, r_config.width, r_config.height);
- qglMatrixMode( GL_PROJECTION );
+ qglMatrixMode(GL_PROJECTION);
qglLoadIdentity();
- qglOrtho( 0, r_config.width, r_config.height, 0, -1, 1 );
+ qglOrtho(0, r_config.width, r_config.height, 0, -1, 1);
draw.scale = 1;
draw.colors[0].u32 = U32_WHITE;
draw.colors[1].u32 = U32_WHITE;
- if( draw.flags & DRAW_CLIP_MASK ) {
- qglDisable( GL_SCISSOR_TEST );
+ if (draw.flags & DRAW_CLIP_MASK) {
+ qglDisable(GL_SCISSOR_TEST);
}
draw.flags = 0;
- qglMatrixMode( GL_MODELVIEW );
+ qglMatrixMode(GL_MODELVIEW);
qglLoadIdentity();
- GL_Bits( GLS_DEPTHTEST_DISABLE );
- GL_CullFace( GLS_CULL_DISABLE );
+ GL_Bits(GLS_DEPTHTEST_DISABLE);
+ GL_CullFace(GLS_CULL_DISABLE);
}
-void GL_Setup3D( void ) {
+void GL_Setup3D(void)
+{
GLdouble xmin, xmax, ymin, ymax;
int yb = glr.fd.y + glr.fd.height;
- qglViewport( glr.fd.x, r_config.height - yb,
- glr.fd.width, glr.fd.height );
+ qglViewport(glr.fd.x, r_config.height - yb,
+ glr.fd.width, glr.fd.height);
- qglMatrixMode( GL_PROJECTION );
+ qglMatrixMode(GL_PROJECTION);
qglLoadIdentity();
- ymax = gl_znear->value * tan( glr.fd.fov_y * M_PI / 360.0 );
+ ymax = gl_znear->value * tan(glr.fd.fov_y * M_PI / 360.0);
ymin = -ymax;
- xmax = gl_znear->value * tan( glr.fd.fov_x * M_PI / 360.0 );
+ xmax = gl_znear->value * tan(glr.fd.fov_x * M_PI / 360.0);
xmin = -xmax;
- qglFrustum( xmin, xmax, ymin, ymax, gl_znear->value, gl_zfar->value );
-
- qglMatrixMode( GL_MODELVIEW );
+ qglFrustum(xmin, xmax, ymin, ymax, gl_znear->value, gl_zfar->value);
+
+ qglMatrixMode(GL_MODELVIEW);
qglLoadIdentity();
- qglRotatef( -90, 1, 0, 0 ); /* put z axis up */
- qglRotatef( 90, 0, 0, 1 ); /* put y axis west, x axis north */
- qglRotatef( -glr.fd.viewangles[ROLL], 1, 0, 0 );
- qglRotatef( -glr.fd.viewangles[PITCH], 0, 1, 0 );
- qglRotatef( -glr.fd.viewangles[YAW], 0, 0, 1 );
- qglTranslatef( -glr.fd.vieworg[0], -glr.fd.vieworg[1], -glr.fd.vieworg[2] );
+ qglRotatef(-90, 1, 0, 0); /* put z axis up */
+ qglRotatef(90, 0, 0, 1); /* put y axis west, x axis north */
+ qglRotatef(-glr.fd.viewangles[ROLL], 1, 0, 0);
+ qglRotatef(-glr.fd.viewangles[PITCH], 0, 1, 0);
+ qglRotatef(-glr.fd.viewangles[YAW], 0, 0, 1);
+ qglTranslatef(-glr.fd.vieworg[0], -glr.fd.vieworg[1], -glr.fd.vieworg[2]);
- AngleVectors( glr.fd.viewangles,
- glr.viewaxis[0], glr.viewaxis[1], glr.viewaxis[2] );
- VectorInverse( glr.viewaxis[1] );
+ AngleVectors(glr.fd.viewangles,
+ glr.viewaxis[0], glr.viewaxis[1], glr.viewaxis[2]);
+ VectorInverse(glr.viewaxis[1]);
- GL_Bits( GLS_DEFAULT );
- GL_CullFace( GLS_CULL_FRONT );
+ GL_Bits(GLS_DEFAULT);
+ GL_CullFace(GLS_CULL_FRONT);
- qglClear( GL_DEPTH_BUFFER_BIT );
+ qglClear(GL_DEPTH_BUFFER_BIT);
}
-void GL_SetDefaultState( void ) {
- qglClearColor( 0, 0, 0, 1 );
- qglClearDepth( 1 );
- qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
- qglEnable( GL_DEPTH_TEST );
- qglDepthFunc( GL_LEQUAL );
- qglDepthRange( 0, 1 );
- qglDepthMask( GL_TRUE );
- qglDisable( GL_BLEND );
- qglDisable( GL_ALPHA_TEST );
- qglAlphaFunc( GL_GREATER, 0.666f );
- qglHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
- qglPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
-
- qglEnableClientState( GL_VERTEX_ARRAY );
- qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
-
- GL_SelectTMU( 0 );
- GL_BindTexture( 0 );
- qglEnable( GL_TEXTURE_2D );
- GL_Bits( GLS_DEFAULT );
+void GL_SetDefaultState(void)
+{
+ qglClearColor(0, 0, 0, 1);
+ qglClearDepth(1);
+ qglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+ qglEnable(GL_DEPTH_TEST);
+ qglDepthFunc(GL_LEQUAL);
+ qglDepthRange(0, 1);
+ qglDepthMask(GL_TRUE);
+ qglDisable(GL_BLEND);
+ qglDisable(GL_ALPHA_TEST);
+ qglAlphaFunc(GL_GREATER, 0.666f);
+ qglHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
+ qglPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+
+ qglEnableClientState(GL_VERTEX_ARRAY);
+ qglEnableClientState(GL_TEXTURE_COORD_ARRAY);
+
+ GL_SelectTMU(0);
+ GL_BindTexture(0);
+ qglEnable(GL_TEXTURE_2D);
+ GL_Bits(GLS_DEFAULT);
}
// for screenshots
-byte *IMG_ReadPixels( qboolean reverse, int *width, int *height ) {
+byte *IMG_ReadPixels(qboolean reverse, int *width, int *height)
+{
byte *pixels;
- pixels = FS_AllocTempMem( r_config.width * r_config.height * 3 );
+ pixels = FS_AllocTempMem(r_config.width * r_config.height * 3);
- qglReadPixels( 0, 0, r_config.width, r_config.height,
- reverse ? GL_BGR : GL_RGB, GL_UNSIGNED_BYTE, pixels );
+ qglReadPixels(0, 0, r_config.width, r_config.height,
+ reverse ? GL_BGR : GL_RGB, GL_UNSIGNED_BYTE, pixels);
*width = r_config.width;
*height = r_config.height;
@@ -249,92 +258,98 @@ byte *IMG_ReadPixels( qboolean reverse, int *width, int *height ) {
return pixels;
}
-void GL_EnableOutlines( void ) {
- if( gls.fp_enabled ) {
- qglDisable( GL_FRAGMENT_PROGRAM_ARB );
+void GL_EnableOutlines(void)
+{
+ if (gls.fp_enabled) {
+ qglDisable(GL_FRAGMENT_PROGRAM_ARB);
}
- qglDisable( GL_TEXTURE_2D );
- qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
- qglPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
- qglDepthRange( 0, 0 );
- qglColor4f( 1, 1, 1, 1 );
+ qglDisable(GL_TEXTURE_2D);
+ qglDisableClientState(GL_TEXTURE_COORD_ARRAY);
+ qglPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+ qglDepthRange(0, 0);
+ qglColor4f(1, 1, 1, 1);
}
-void GL_DisableOutlines( void ) {
- qglDepthRange( 0, 1 );
- qglPolygonMode( GL_FRONT_AND_BACK, GL_FILL );
- qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
- qglEnable( GL_TEXTURE_2D );
- if( gls.fp_enabled ) {
- qglEnable( GL_FRAGMENT_PROGRAM_ARB );
+void GL_DisableOutlines(void)
+{
+ qglDepthRange(0, 1);
+ qglPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+ qglEnableClientState(GL_TEXTURE_COORD_ARRAY);
+ qglEnable(GL_TEXTURE_2D);
+ if (gls.fp_enabled) {
+ qglEnable(GL_FRAGMENT_PROGRAM_ARB);
}
}
-void GL_EnableWarp( void ) {
+void GL_EnableWarp(void)
+{
vec4_t param;
- qglEnable( GL_FRAGMENT_PROGRAM_ARB );
- qglBindProgramARB( GL_FRAGMENT_PROGRAM_ARB, gl_static.prognum_warp );
+ qglEnable(GL_FRAGMENT_PROGRAM_ARB);
+ qglBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, gl_static.prognum_warp);
param[0] = glr.fd.time;
param[1] = glr.fd.time;
param[2] = param[3] = 0;
- qglProgramLocalParameter4fvARB( GL_FRAGMENT_PROGRAM_ARB, 0, param );
+ qglProgramLocalParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, 0, param);
gls.fp_enabled = qtrue;
}
-void GL_DisableWarp( void ) {
- qglBindProgramARB( GL_FRAGMENT_PROGRAM_ARB, 0 );
- qglDisable( GL_FRAGMENT_PROGRAM_ARB );
+void GL_DisableWarp(void)
+{
+ qglBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, 0);
+ qglDisable(GL_FRAGMENT_PROGRAM_ARB);
gls.fp_enabled = qfalse;
}
-void GL_InitPrograms( void ) {
+void GL_InitPrograms(void)
+{
GLuint prog;
- if( gl_config.ext_supported & QGL_ARB_fragment_program ) {
- if( gl_fragment_program->integer ) {
- Com_Printf( "...enabling GL_ARB_fragment_program\n" );
- QGL_InitExtensions( QGL_ARB_fragment_program );
+ if (gl_config.ext_supported & QGL_ARB_fragment_program) {
+ if (gl_fragment_program->integer) {
+ Com_Printf("...enabling GL_ARB_fragment_program\n");
+ QGL_InitExtensions(QGL_ARB_fragment_program);
gl_config.ext_enabled |= QGL_ARB_fragment_program;
} else {
- Com_Printf( "...ignoring GL_ARB_fragment_program\n" );
+ Com_Printf("...ignoring GL_ARB_fragment_program\n");
}
- } else if( gl_fragment_program->integer ) {
- Com_Printf( "GL_ARB_fragment_program not found\n" );
- Cvar_Set( "gl_fragment_program", "0" );
+ } else if (gl_fragment_program->integer) {
+ Com_Printf("GL_ARB_fragment_program not found\n");
+ Cvar_Set("gl_fragment_program", "0");
}
- if( !qglProgramStringARB ) {
+ if (!qglProgramStringARB) {
return;
}
GL_ClearErrors();
- qglGenProgramsARB( 1, &prog );
- qglBindProgramARB( GL_FRAGMENT_PROGRAM_ARB, prog );
- qglProgramStringARB( GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
- sizeof( gl_prog_warp ) - 1, gl_prog_warp );
-
- if( GL_ShowErrors( "Failed to initialize fragment program" ) ) {
- qglBindProgramARB( GL_FRAGMENT_PROGRAM_ARB, 0 );
- qglDeleteProgramsARB( 1, &prog );
+ qglGenProgramsARB(1, &prog);
+ qglBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, prog);
+ qglProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
+ sizeof(gl_prog_warp) - 1, gl_prog_warp);
+
+ if (GL_ShowErrors("Failed to initialize fragment program")) {
+ qglBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, 0);
+ qglDeleteProgramsARB(1, &prog);
return;
}
- qglBindProgramARB( GL_FRAGMENT_PROGRAM_ARB, 0 );
+ qglBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, 0);
gl_static.prognum_warp = prog;
}
-void GL_ShutdownPrograms( void ) {
- if( !qglDeleteProgramsARB ) {
+void GL_ShutdownPrograms(void)
+{
+ if (!qglDeleteProgramsARB) {
return;
}
- if( gl_static.prognum_warp ) {
- qglDeleteProgramsARB( 1, &gl_static.prognum_warp );
+ if (gl_static.prognum_warp) {
+ qglDeleteProgramsARB(1, &gl_static.prognum_warp);
gl_static.prognum_warp = 0;
}
- QGL_ShutdownExtensions( QGL_ARB_fragment_program );
+ QGL_ShutdownExtensions(QGL_ARB_fragment_program);
gl_config.ext_enabled &= ~QGL_ARB_fragment_program;
}