diff options
author | Andrey Nazarov <skuller@skuller.net> | 2008-01-16 14:53:19 +0000 |
---|---|---|
committer | Andrey Nazarov <skuller@skuller.net> | 2008-01-16 14:53:19 +0000 |
commit | 46502022b2a4dcf6fd5af0817cc050a918b21280 (patch) | |
tree | 2ce78f5a8f30a8bb0f3b65ff8b4f44270b41181c | |
parent | 402aa3569a98a81f7f861bd13bb34038215c989c (diff) |
Made stdout blocking on Unix.
Made particle texture larger and more round.
`gl_texturemode' now defaults to `GL_LINEAR_MIPMAP_LINEAR'.
`gl_partscale' now defaults to `2'.
Re-added `gl_polyblend' variable.
-rw-r--r-- | source/gl_images.c | 41 | ||||
-rw-r--r-- | source/gl_main.c | 6 | ||||
-rw-r--r-- | source/gl_tess.c | 8 | ||||
-rw-r--r-- | source/r_images.c | 4 | ||||
-rw-r--r-- | source/sys_unix.c | 184 |
5 files changed, 156 insertions, 87 deletions
diff --git a/source/gl_images.c b/source/gl_images.c index 394d7b2..6d08acd 100644 --- a/source/gl_images.c +++ b/source/gl_images.c @@ -968,24 +968,33 @@ static void GL_InitDefaultTexture( void ) { r_notexture = R_CreateImage( "*notexture", pixels, 8, 8, it_wall, if_auto ); } +#define DLIGHT_TEXTURE_SIZE 16 + static void GL_InitParticleTexture( void ) { - int i, j; - byte pixels[8*8*4]; + byte pixels[DLIGHT_TEXTURE_SIZE*DLIGHT_TEXTURE_SIZE*4]; byte *dst; - + float x, y, f; + int i, j; + dst = pixels; - for( i = 0; i < 8; i++ ) { - for( j = 0; j < 8; j++ ) { + for( i = 0; i < DLIGHT_TEXTURE_SIZE; i++ ) { + for( j = 0; j < DLIGHT_TEXTURE_SIZE; j++ ) { + x = j - DLIGHT_TEXTURE_SIZE/2 + 0.5f; + y = i - DLIGHT_TEXTURE_SIZE/2 + 0.5f; + f = sqrt( x * x + y * y ); + f = 1.0f - f / ( DLIGHT_TEXTURE_SIZE/2 - 1.5f ); + if( f < 0 ) f = 0; + else if( f > 1 ) f = 1; dst[0] = 255; dst[1] = 255; dst[2] = 255; - dst[3] = dottexture[ i ][ j ] * 255; + dst[3] = 255*f; dst += 4; - } - } + } + } - r_particletexture = R_CreateImage( "*particletexture", pixels, 8, 8, - it_sprite, if_auto ); + r_particletexture = R_CreateImage( "*particleTexture", pixels, + DLIGHT_TEXTURE_SIZE, DLIGHT_TEXTURE_SIZE, it_pic, if_auto ); qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP ); qglTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP ); } @@ -1074,8 +1083,8 @@ void GL_InitImages( void ) { gl_bilerp_chars = cvar.Get( "gl_bilerp_chars", "0", 0 ); gl_bilerp_chars->changed = gl_bilerp_chars_changed; - gl_texturemode = cvar.Get( "gl_texturemode", "GL_LINEAR_MIPMAP_NEAREST", - CVAR_ARCHIVE ); + gl_texturemode = cvar.Get( "gl_texturemode", + "GL_LINEAR_MIPMAP_LINEAR", CVAR_ARCHIVE ); gl_texturemode->changed = gl_texturemode_changed; gl_anisotropy = cvar.Get( "gl_anisotropy", "1", CVAR_ARCHIVE ); gl_anisotropy->changed = gl_anisotropy_changed; @@ -1083,10 +1092,10 @@ void GL_InitImages( void ) { gl_round_down = cvar.Get( "gl_round_down", "0", CVAR_LATCHED ); gl_picmip = cvar.Get( "gl_picmip", "0", CVAR_LATCHED ); gl_gamma_scale_pics = cvar.Get( "gl_gamma_scale_pics", "0", CVAR_LATCHED ); - gl_texturealphamode = cvar.Get( "gl_texturealphamode", "default", - CVAR_ARCHIVE|CVAR_LATCHED ); - gl_texturesolidmode = cvar.Get( "gl_texturesolidmode", "default", - CVAR_ARCHIVE|CVAR_LATCHED ); + gl_texturealphamode = cvar.Get( "gl_texturealphamode", + "default", CVAR_ARCHIVE|CVAR_LATCHED ); + gl_texturesolidmode = cvar.Get( "gl_texturesolidmode", + "default", CVAR_ARCHIVE|CVAR_LATCHED ); gl_saturation = cvar.Get( "gl_saturation", "1", CVAR_ARCHIVE|CVAR_LATCHED ); gl_intensity = cvar.Get( "intensity", "1", CVAR_ARCHIVE|CVAR_LATCHED ); gl_invert = cvar.Get( "gl_invert", "0", CVAR_ARCHIVE|CVAR_LATCHED ); diff --git a/source/gl_main.c b/source/gl_main.c index b18eb1e..5abeca9 100644 --- a/source/gl_main.c +++ b/source/gl_main.c @@ -67,6 +67,7 @@ cvar_t *gl_fastsky; #if USE_DYNAMIC cvar_t *gl_dynamic; #endif +cvar_t *gl_polyblend; cvar_t *gl_fullbright; cvar_t *gl_hwgamma; cvar_t *gl_fullscreen; @@ -126,7 +127,7 @@ static void GL_SetupFrustum( void ) { static void GL_Blend( void ) { color_t color; - if( glr.fd.blend[3] == 0 ) { + if( !gl_polyblend->integer || glr.fd.blend[3] == 0 ) { return; } @@ -676,7 +677,7 @@ static void GL_ModeChanged( int width, int height, int flags, static void GL_Register( void ) { /* misc */ - gl_partscale = cvar.Get( "gl_partscale", "1.5", 0 ); + gl_partscale = cvar.Get( "gl_partscale", "2", 0 ); #if USE_JPEG gl_screenshot_quality = cvar.Get( "gl_screenshot_quality", "100", 0 ); #endif @@ -706,6 +707,7 @@ static void GL_Register( void ) { #if USE_DYNAMIC gl_dynamic = cvar.Get( "gl_dynamic", "2", CVAR_ARCHIVE ); #endif + gl_polyblend = cvar.Get( "gl_polyblend", "1", 0 ); gl_fullbright = cvar.Get( "r_fullbright", "0", CVAR_CHEAT ); gl_showerrors = cvar.Get( "gl_showerrors", "1", 0 ); gl_fragment_program = cvar.Get( "gl_fragment_program", "0", CVAR_LATCHED ); diff --git a/source/gl_tess.c b/source/gl_tess.c index fc2bce7..cf312fb 100644 --- a/source/gl_tess.c +++ b/source/gl_tess.c @@ -146,7 +146,7 @@ void GL_DrawParticles( void ) { scale = gl_partscale->value; if( dist > 20 ) { - scale += dist * 0.006f; + scale += dist * 0.012f; } if( p->color == 255 ) { @@ -167,9 +167,9 @@ void GL_DrawParticles( void ) { VectorMA( dst_vert, scale, glr.viewaxis[2], dst_vert + 5 ); VectorMA( dst_vert, -scale, glr.viewaxis[1], dst_vert + 10 ); - dst_vert[3] = 0.0625f; dst_vert[4] = 0.0625f; - dst_vert[8] = 1.0625f; dst_vert[9] = 0.0625f; - dst_vert[13] = 0.0625f; dst_vert[14] = 1.0625f; + dst_vert[3] = 0; dst_vert[4] = 0; + dst_vert[8] = 2; dst_vert[9] = 0; + dst_vert[13] = 0; dst_vert[14] = 2; dst_color = ( uint32 * )tess.colors + numVertices; dst_color[0] = *( uint32 * )color; diff --git a/source/r_images.c b/source/r_images.c index 5fcae43..51e04c1 100644 --- a/source/r_images.c +++ b/source/r_images.c @@ -1374,9 +1374,7 @@ image_t *R_FindImage( const char *name, imagetype_t type ) { } if( length <= 4 ) { - /* must have at least 1 char of basename - * and 4 chars of extension part */ - return NULL; + return NULL; // must have at least 1 char of base name } length -= 4; diff --git a/source/sys_unix.c b/source/sys_unix.c index 27898de..a91cf8a 100644 --- a/source/sys_unix.c +++ b/source/sys_unix.c @@ -71,12 +71,6 @@ static struct termios tty_orig; static commandPrompt_t tty_prompt; static int tty_hidden; -static byte sys_output_buffer[MAX_MSGLEN]; -static fifo_t sys_output = { - .data = sys_output_buffer, - .size = sizeof( sys_output_buffer ) -}; - void Sys_Printf( const char *fmt, ... ); /* @@ -87,6 +81,20 @@ TERMINAL SUPPORT =============================================================================== */ +static void Sys_ConsoleWrite( char *data, int count ) { + int ret; + + while( count ) { + ret = write( 1, data, count ); + if( ret <= 0 ) { + Com_Error( ERR_FATAL, "%s: %d bytes written: %s", + __func__, ret, strerror( errno ) ); + } + count -= ret; + data += ret; + } +} + static void Sys_HideInput( void ) { int i; @@ -96,7 +104,7 @@ static void Sys_HideInput( void ) { if( !tty_hidden ) { for( i = 0; i <= tty_prompt.inputLine.cursorPos; i++ ) { - FIFO_Write( &sys_output, "\b \b", 3 ); + Sys_ConsoleWrite( "\b \b", 3 ); } } tty_hidden++; @@ -114,9 +122,9 @@ static void Sys_ShowInput( void ) { tty_hidden--; if( !tty_hidden ) { - FIFO_Write( &sys_output, "]", 1 ); - FIFO_Write( &sys_output, tty_prompt.inputLine.text, - tty_prompt.inputLine.cursorPos ); + Sys_ConsoleWrite( "]", 1 ); + Sys_ConsoleWrite( tty_prompt.inputLine.text, + tty_prompt.inputLine.cursorPos ); } } @@ -159,37 +167,36 @@ Sys_ConsoleOutput ================= */ void Sys_ConsoleOutput( const char *string ) { - char *data, *maxp, *p; - int length; + char buffer[MAXPRINTMSG*2]; + char *m, *p; int color = 0; + p = buffer; + m = buffer + sizeof( buffer ); + if( !tty_enabled ) { - data = p = FIFO_Reserve( &sys_output, &length ); - maxp = p + length; while( *string ) { if( Q_IsColorString( string ) ) { string += 2; continue; } - if( p + 1 > maxp ) { + if( p + 1 > m ) { break; } *p++ = *string++ & 127; } - FIFO_Commit( &sys_output, p - data ); + Sys_ConsoleWrite( buffer, p - buffer ); return; } Sys_HideInput(); - data = p = FIFO_Reserve( &sys_output, &length ); - maxp = p + length; while( *string ) { if( Q_IsColorString( string ) ) { color = string[1]; string += 2; - if( p + 5 > maxp ) { + if( p + 5 > m ) { break; } p[0] = '\033'; @@ -211,15 +218,15 @@ void Sys_ConsoleOutput( const char *string ) { } continue; } - if( p + 1 > maxp ) { + if( p + 1 > m ) { break; } *p++ = *string++ & 127; } if( color ) { - if( p + 4 > maxp ) { - p = maxp - 4; + if( p + 4 > m ) { + p = m - 4; } p[0] = '\033'; p[1] = '['; @@ -228,7 +235,7 @@ void Sys_ConsoleOutput( const char *string ) { p += 4; } - FIFO_Commit( &sys_output, p - data ); + Sys_ConsoleWrite( buffer, p - buffer ); Sys_ShowInput(); } @@ -241,7 +248,7 @@ void Sys_SetConsoleTitle( const char *title ) { return; } len = Com_sprintf( buffer, sizeof( buffer ), "\033]0;%s\007", title ); - FIFO_Write( &sys_output, buffer, len ); + Sys_ConsoleWrite( buffer, len ); } /* @@ -266,14 +273,14 @@ static void Sys_ParseInput( const char *text ) { if( key == tty_orig.c_cc[VERASE] || key == 127 || key == 8 ) { if( f->cursorPos ) { f->text[--f->cursorPos] = 0; - FIFO_Write( &sys_output, "\b \b", 3 ); + Sys_ConsoleWrite( "\b \b", 3 ); } continue; } if( key == tty_orig.c_cc[VKILL] ) { for( i = 0; i < f->cursorPos; i++ ) { - FIFO_Write( &sys_output, "\b \b", 3 ); + Sys_ConsoleWrite( "\b \b", 3 ); } f->cursorPos = 0; continue; @@ -281,8 +288,9 @@ static void Sys_ParseInput( const char *text ) { if( key >= 32 ) { if( f->cursorPos < sizeof( f->text ) - 1 ) { - FIFO_Write( &sys_output, &key, 1 ); - f->text[f->cursorPos] = key; + char c = key; + Sys_ConsoleWrite( &c, 1 ); + f->text[f->cursorPos] = c; f->text[++f->cursorPos] = 0; } continue; @@ -298,7 +306,7 @@ static void Sys_ParseInput( const char *text ) { Sys_Printf( "]%s\n", s ); Cbuf_AddText( s ); } else { - FIFO_Write( &sys_output, "]\n", 2 ); + Sys_ConsoleWrite( "]\n", 2 ); } Sys_ShowInput(); continue; @@ -351,10 +359,8 @@ static void Sys_ParseInput( const char *text ) { } void Sys_RunConsole( void ) { - fd_set rfd, wfd; + fd_set fd; struct timeval tv; - byte *data; - int length; char text[MAX_STRING_CHARS]; int ret; @@ -362,42 +368,31 @@ void Sys_RunConsole( void ) { return; } - FD_ZERO( &rfd ); - FD_ZERO( &wfd ); - FD_SET( 0, &rfd ); // stdin - FD_SET( 1, &wfd ); // stdout + FD_ZERO( &fd ); + FD_SET( 0, &fd ); // stdin tv.tv_sec = 0; tv.tv_usec = 0; - if( select( 2, &rfd, &wfd, NULL, &tv ) == -1 ) { + if( select( 1, &fd, NULL, NULL, &tv ) == -1 ) { Com_Error( ERR_FATAL, "%s: select() failed", __func__ ); } - if( FD_ISSET( 0, &rfd ) ) { - ret = read( 0, text, sizeof( text ) ); - if( !ret ) { - Com_DPrintf( "Read EOF from stdin.\n" ); - Sys_ShutdownTTY(); - Cvar_Set( "sys_stdio", "0" ); - return; - } - if( ret < 0 ) { - Com_Error( ERR_FATAL, "%s: %d bytes read", __func__, ret ); - } - text[ret] = 0; - - Sys_ParseInput( text ); + if( !FD_ISSET( 0, &fd ) ) { + return; } - if( FD_ISSET( 1, &wfd ) ) { - data = FIFO_Peek( &sys_output, &length ); - if( length ) { - ret = write( 1, data, length ); - if( ret <= 0 ) { - Com_Error( ERR_FATAL, "%s: %d bytes written", __func__, ret ); - } - FIFO_Decommit( &sys_output, ret ); - } + ret = read( 0, text, sizeof( text ) - 1 ); + if( !ret ) { + Com_DPrintf( "Read EOF from stdin.\n" ); + Sys_ShutdownTTY(); + Cvar_Set( "sys_stdio", "0" ); + return; } + if( ret < 0 ) { + Com_Error( ERR_FATAL, "%s: %d bytes read", __func__, ret ); + } + text[ret] = 0; + + Sys_ParseInput( text ); } /* @@ -477,6 +472,71 @@ void Hunk_Free( mempool_t *pool ) { memset( pool, 0, sizeof( *pool ) ); } +/* +=============================================================================== + +FIFO + +=============================================================================== +*/ + +#if 0 +qboolean FIFO_Alloc( fifo_t *fifo, int size ) { + byte *mem, *ret; + char temp[32]; + int fd; + + strcpy( temp, "/dev/shm/" APPLICATION "-XXXXXX" ); + fd = mkstemp( temp ); + if( fd < 0 ) { + return qfalse; + } + + unlink( temp ); + + size = ( size + 4095 ) & ~4095; + + if( ftruncate( fd, size << 1 ) == -1 ) { + goto fail2; + } + + mem = mmap( NULL, size << 1, PROT_NONE, MAP_ANONYMOUS|MAP_PRIVATE, -1, 0 ); + if( mem == MAP_FAILED ) { + goto fail2; + } + + ret = mmap( mem, size, PROT_READ|PROT_WRITE, MAP_FIXED|MAP_SHARED, fd, 0 ); + if( ret != mem ) { + goto fail1; + } + + ret = mmap( mem + size, size, PROT_READ|PROT_WRITE, MAP_FIXED|MAP_SHARED, fd, 0 ); + if( ret != mem + size ) { + goto fail1; + } + + fifo->data = mem; + fifo->size = size; + fifo->tail = fifo->head = 0; + return qtrue; + +fail1: + munmap( mem, size << 1 ); +fail2: + close( fd ); + return qfalse; +} + +void FIFO_Free( fifo_t *fifo ) { + if( fifo->data ) { + if( munmap( fifo->data, fifo->size << 1 ) ) { + Com_Error( ERR_FATAL, "%s: munmap failed: %s", + __func__, strerror( errno ) ); + } + } + memset( fifo, 0, sizeof( *fifo ) ); +} +#endif /* =============================================================================== @@ -550,7 +610,7 @@ Sys_GetFileInfo ================ */ qboolean Sys_GetFileInfo( const char *path, fsFileInfo_t *info ) { - struct stat st; + struct stat st; if( stat( path, &st ) == -1 ) { return qfalse; @@ -816,7 +876,7 @@ void Sys_Init( void ) { if( sys_stdio->integer ) { // change stdin and stdout to non-blocking fcntl( 0, F_SETFL, fcntl( 0, F_GETFL, 0 ) | FNDELAY ); - fcntl( 1, F_SETFL, fcntl( 1, F_GETFL, 0 ) | FNDELAY ); + fcntl( 1, F_SETFL, fcntl( 1, F_GETFL, 0 ) & ~FNDELAY ); // init TTY support if( sys_stdio->integer > 1 ) { |