diff --git a/code/renderer/tr_init.c b/code/renderer/tr_init.c index dfe6ca02..c58006fc 100644 --- a/code/renderer/tr_init.c +++ b/code/renderer/tr_init.c @@ -102,6 +102,7 @@ cvar_t *r_depthbits; cvar_t *r_colorbits; cvar_t *r_primitives; cvar_t *r_texturebits; +cvar_t *r_ext_multisample; cvar_t *r_drawBuffer; cvar_t *r_lightmap; @@ -900,6 +901,8 @@ void R_Register( void ) r_colorbits = ri.Cvar_Get( "r_colorbits", "0", CVAR_ARCHIVE | CVAR_LATCH ); r_stencilbits = ri.Cvar_Get( "r_stencilbits", "8", CVAR_ARCHIVE | CVAR_LATCH ); r_depthbits = ri.Cvar_Get( "r_depthbits", "0", CVAR_ARCHIVE | CVAR_LATCH ); + r_ext_multisample = ri.Cvar_Get( "r_ext_multisample", "0", CVAR_ARCHIVE | CVAR_LATCH ); + ri.Cvar_CheckRange( r_ext_multisample, 0, 4, qtrue ); r_overBrightBits = ri.Cvar_Get ("r_overBrightBits", "1", CVAR_ARCHIVE | CVAR_LATCH ); r_ignorehwgamma = ri.Cvar_Get( "r_ignorehwgamma", "0", CVAR_ARCHIVE | CVAR_LATCH); r_mode = ri.Cvar_Get( "r_mode", "3", CVAR_ARCHIVE | CVAR_LATCH ); diff --git a/code/renderer/tr_local.h b/code/renderer/tr_local.h index 897d54b9..3abcfbea 100644 --- a/code/renderer/tr_local.h +++ b/code/renderer/tr_local.h @@ -1008,6 +1008,7 @@ extern cvar_t *r_stencilbits; // number of desired stencil bits extern cvar_t *r_depthbits; // number of desired depth bits extern cvar_t *r_colorbits; // number of desired color bits, only relevant for fullscreen extern cvar_t *r_texturebits; // number of desired texture bits +extern cvar_t *r_ext_multisample; // 0 = use framebuffer depth // 16 = use 16-bit textures // 32 = use 32-bit textures diff --git a/code/sdl/sdl_glimp.c b/code/sdl/sdl_glimp.c index f1df177b..0b143d74 100644 --- a/code/sdl/sdl_glimp.c +++ b/code/sdl/sdl_glimp.c @@ -208,6 +208,7 @@ static int GLimp_SetMode( int mode, qboolean fullscreen ) int sdlcolorbits; int colorbits, depthbits, stencilbits; int tcolorbits, tdepthbits, tstencilbits; + int samples; int i = 0; SDL_Surface *vidscreen = NULL; Uint32 flags = SDL_OPENGL; @@ -270,6 +271,7 @@ static int GLimp_SetMode( int mode, qboolean fullscreen ) else depthbits = r_depthbits->value; stencilbits = r_stencilbits->value; + samples = r_ext_multisample->value; for (i = 0; i < 16; i++) { @@ -337,6 +339,9 @@ static int GLimp_SetMode( int mode, qboolean fullscreen ) SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, tdepthbits ); SDL_GL_SetAttribute( SDL_GL_STENCIL_SIZE, tstencilbits ); + SDL_GL_SetAttribute( SDL_GL_MULTISAMPLEBUFFERS, samples ? 1 : 0 ); + SDL_GL_SetAttribute( SDL_GL_MULTISAMPLESAMPLES, samples ); + if(r_stereoEnabled->integer) { glConfig.stereoEnabled = qtrue; @@ -674,6 +679,7 @@ void GLimp_Init( void ) { ri.Printf( PRINT_ALL, "Setting r_mode %d failed, falling back on r_mode %d\n", r_mode->integer, R_MODE_FALLBACK ); + ri.Cvar_Set("r_ext_multisample", "0"); if( !GLimp_StartDriverAndSetMode( R_MODE_FALLBACK, r_fullscreen->integer ) ) success = qfalse; }