summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Nazarov <skuller@skuller.net>2008-01-16 14:53:19 +0000
committerAndrey Nazarov <skuller@skuller.net>2008-01-16 14:53:19 +0000
commit46502022b2a4dcf6fd5af0817cc050a918b21280 (patch)
tree2ce78f5a8f30a8bb0f3b65ff8b4f44270b41181c
parent402aa3569a98a81f7f861bd13bb34038215c989c (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.c41
-rw-r--r--source/gl_main.c6
-rw-r--r--source/gl_tess.c8
-rw-r--r--source/r_images.c4
-rw-r--r--source/sys_unix.c184
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 ) {