Fixed the bloom/gl_max_size issues.

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2180 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
Spoike 2006-04-08 15:16:47 +00:00
parent 15e372e2c5
commit 9b9b696afe

View file

@ -136,7 +136,7 @@ void R_Bloom_InitBackUpTexture( int width, int height )
r_screenbackuptexture_size = width; r_screenbackuptexture_size = width;
r_bloombackuptexture = GL_LoadTexture("***r_bloombackuptexture***", width, height, data, false, false ); r_bloombackuptexture = GL_LoadTexture32("***r_bloombackuptexture***", width, height, data, false, false );
Z_Free ( data ); Z_Free ( data );
} }
@ -175,7 +175,7 @@ void R_Bloom_InitEffectTexture( void )
data = Z_Malloc( BLOOM_SIZE * BLOOM_SIZE * 4 ); data = Z_Malloc( BLOOM_SIZE * BLOOM_SIZE * 4 );
r_bloomeffecttexture = GL_LoadTexture("***r_bloomeffecttexture***", BLOOM_SIZE, BLOOM_SIZE, data, false, false ); r_bloomeffecttexture = GL_LoadTexture32("***r_bloomeffecttexture***", BLOOM_SIZE, BLOOM_SIZE, data, false, false );
Z_Free ( data ); Z_Free ( data );
} }
@ -187,6 +187,7 @@ R_Bloom_InitTextures
*/ */
void R_Bloom_InitTextures( void ) void R_Bloom_InitTextures( void )
{ {
extern int gl_filter_max;
qbyte *data; qbyte *data;
int size; int size;
int maxtexsize; int maxtexsize;
@ -209,7 +210,12 @@ void R_Bloom_InitTextures( void )
size = screen_texture_width * screen_texture_height * 4; size = screen_texture_width * screen_texture_height * 4;
data = Z_Malloc( size ); data = Z_Malloc( size );
memset( data, 255, size ); memset( data, 255, size );
r_bloomscreentexture = GL_LoadTexture("***r_bloomscreentexture***", screen_texture_width, screen_texture_height, data, false, false ); if (!r_bloomscreentexture)
r_bloomscreentexture = texture_extension_number++;
GL_Bind(r_bloomscreentexture);
qglTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, screen_texture_width, screen_texture_height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
qglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
Z_Free ( data ); Z_Free ( data );
@ -223,7 +229,7 @@ void R_Bloom_InitTextures( void )
{ {
r_screendownsamplingtexture_size = (int)(BLOOM_SIZE * 2); r_screendownsamplingtexture_size = (int)(BLOOM_SIZE * 2);
data = Z_Malloc( r_screendownsamplingtexture_size * r_screendownsamplingtexture_size * 4 ); data = Z_Malloc( r_screendownsamplingtexture_size * r_screendownsamplingtexture_size * 4 );
r_bloomdownsamplingtexture = GL_LoadTexture("***r_bloomdownsamplingtexture***", r_screendownsamplingtexture_size, r_screendownsamplingtexture_size, data, false, false ); r_bloomdownsamplingtexture = GL_LoadTexture32("***r_bloomdownsamplingtexture***", r_screendownsamplingtexture_size, r_screendownsamplingtexture_size, data, false, false );
Z_Free ( data ); Z_Free ( data );
} }
@ -256,6 +262,7 @@ void R_InitBloomTextures( void )
if( !r_bloom.value ) if( !r_bloom.value )
return; return;
r_bloomscreentexture = 0; //this came from a vid_restart, where none of the textures are valid any more.
R_Bloom_InitTextures (); R_Bloom_InitTextures ();
} }
@ -486,19 +493,34 @@ void R_Bloom_DownsampleView( void )
int midsample_width = r_screendownsamplingtexture_size * sampleText_tcw; int midsample_width = r_screendownsamplingtexture_size * sampleText_tcw;
int midsample_height = r_screendownsamplingtexture_size * sampleText_tch; int midsample_height = r_screendownsamplingtexture_size * sampleText_tch;
if (qglGetError())
Con_Printf("GL Error whilst rendering bloom\n");
//copy the screen and draw resized //copy the screen and draw resized
GL_Bind(r_bloomscreentexture); GL_Bind(r_bloomscreentexture);
if (qglGetError())
Con_Printf("GL Error whilst rendering bloom\n");
qglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, curView_x, glheight - (curView_y + curView_height), curView_width, curView_height); qglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, curView_x, glheight - (curView_y + curView_height), curView_width, curView_height);
if (qglGetError())
Con_Printf("GL Error whilst rendering bloom\n");
R_Bloom_Quad( 0, glheight-midsample_height, midsample_width, midsample_height, screenText_tcw, screenText_tch ); R_Bloom_Quad( 0, glheight-midsample_height, midsample_width, midsample_height, screenText_tcw, screenText_tch );
if (qglGetError())
Con_Printf("GL Error whilst rendering bloom\n");
//now copy into Downsampling (mid-sized) texture //now copy into Downsampling (mid-sized) texture
GL_Bind(r_bloomdownsamplingtexture); GL_Bind(r_bloomdownsamplingtexture);
qglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, midsample_width, midsample_height); qglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, midsample_width, midsample_height);
if (qglGetError())
Con_Printf("GL Error whilst rendering bloom\n");
//now draw again in bloom size //now draw again in bloom size
qglColor4f( 0.5f, 0.5f, 0.5f, 1.0f ); qglColor4f( 0.5f, 0.5f, 0.5f, 1.0f );
R_Bloom_Quad( 0, glheight-sample_height, sample_width, sample_height, sampleText_tcw, sampleText_tch ); R_Bloom_Quad( 0, glheight-sample_height, sample_width, sample_height, sampleText_tcw, sampleText_tch );
if (qglGetError())
Con_Printf("GL Error whilst rendering bloom\n");
//now blend the big screen texture into the bloom generation space (hoping it adds some blur) //now blend the big screen texture into the bloom generation space (hoping it adds some blur)
qglEnable( GL_BLEND ); qglEnable( GL_BLEND );
qglBlendFunc(GL_ONE, GL_ONE); qglBlendFunc(GL_ONE, GL_ONE);
@ -508,6 +530,9 @@ void R_Bloom_DownsampleView( void )
qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
qglDisable( GL_BLEND ); qglDisable( GL_BLEND );
if (qglGetError())
Con_Printf("GL Error whilst rendering bloom\n");
} else { //downsample simple } else { //downsample simple
GL_Bind(r_bloomscreentexture); GL_Bind(r_bloomscreentexture);
@ -548,6 +573,9 @@ void R_BloomBlend (void)//refdef_t *fd, meshlist_t *meshlist )
qglColor4f( 1, 1, 1, 1 ); qglColor4f( 1, 1, 1, 1 );
if (qglGetError())
Con_Printf("GL Error whilst rendering bloom\n");
//set up current sizes //set up current sizes
curView_x = scr_vrect.x*((float)glwidth/vid.width); curView_x = scr_vrect.x*((float)glwidth/vid.width);
curView_y = scr_vrect.y*((float)glheight/vid.height); curView_y = scr_vrect.y*((float)glheight/vid.height);
@ -565,15 +593,24 @@ void R_BloomBlend (void)//refdef_t *fd, meshlist_t *meshlist )
sample_width = BLOOM_SIZE * sampleText_tcw; sample_width = BLOOM_SIZE * sampleText_tcw;
sample_height = BLOOM_SIZE * sampleText_tch; sample_height = BLOOM_SIZE * sampleText_tch;
if (qglGetError())
Con_Printf("GL Error whilst rendering bloom\n");
//copy the screen space we'll use to work into the backup texture //copy the screen space we'll use to work into the backup texture
GL_Bind(r_bloombackuptexture); GL_Bind(r_bloombackuptexture);
qglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, r_screenbackuptexture_size * sampleText_tcw, r_screenbackuptexture_size * sampleText_tch); qglCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, r_screenbackuptexture_size * sampleText_tcw, r_screenbackuptexture_size * sampleText_tch);
if (qglGetError())
Con_Printf("GL Error whilst rendering bloom\n");
//create the bloom image //create the bloom image
R_Bloom_DownsampleView(); R_Bloom_DownsampleView();
if (qglGetError())
Con_Printf("GL Error whilst rendering bloom\n");
R_Bloom_GeneratexDiamonds(); R_Bloom_GeneratexDiamonds();
//R_Bloom_GeneratexCross(); //R_Bloom_GeneratexCross();
if (qglGetError())
Con_Printf("GL Error whilst rendering bloom\n");
//restore the screen-backup to the screen //restore the screen-backup to the screen
qglDisable(GL_BLEND); qglDisable(GL_BLEND);
GL_Bind(r_bloombackuptexture); GL_Bind(r_bloombackuptexture);
@ -589,5 +626,8 @@ void R_BloomBlend (void)//refdef_t *fd, meshlist_t *meshlist )
qglBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); qglBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
if (qglGetError())
Con_Printf("GL Error whilst rendering bloom\n");
} }