diff options
author | Andrey Nazarov <skuller@skuller.net> | 2008-08-16 10:19:42 +0000 |
---|---|---|
committer | Andrey Nazarov <skuller@skuller.net> | 2008-08-16 10:19:42 +0000 |
commit | 1526e22e4ff29153e9c127081e8ea8d9e2f33b8c (patch) | |
tree | b361766433d4a7b4a111865afd52803e2bbf7754 /source/sw_draw.c | |
parent | e826e5f176f21cd18b3bbc22887a266835ada57c (diff) |
Split some monolithic include files into smaller ones.
Use single BSP models cache for refresh and collision subsystems.
Refresh libraries may not longer be dynamically loaded.
Made gi.TagMalloc use separate tag namespace to avoid
conflicts with engine reserverd tags.
Fixed listing order of MVD channels in chooser menu.
A lot of misc changes... MSVC build is definitely broken now.
Diffstat (limited to 'source/sw_draw.c')
-rw-r--r-- | source/sw_draw.c | 235 |
1 files changed, 105 insertions, 130 deletions
diff --git a/source/sw_draw.c b/source/sw_draw.c index c45c28e..4307b79 100644 --- a/source/sw_draw.c +++ b/source/sw_draw.c @@ -124,7 +124,13 @@ static drawStatic_t draw; static int colorIndices[8]; -void Draw_Init( void ) { +void R_SetScale( float *scale ) { + if( scale ) { + *scale = 1; + } +} + +void R_InitDraw( void ) { int i; memset( &draw, 0, sizeof( draw ) ); @@ -135,7 +141,7 @@ void Draw_Init( void ) { } } -void Draw_SetColor( int flags, const color_t color ) { +void R_SetColor( int flags, const color_t color ) { draw.flags &= ~DRAW_COLOR_MASK; if( flags == DRAW_COLOR_CLEAR ) { @@ -161,7 +167,7 @@ void Draw_SetColor( int flags, const color_t color ) { draw.flags |= flags; } -void Draw_SetClipRect( int flags, const clipRect_t *clip ) { +void R_SetClipRect( int flags, const clipRect_t *clip ) { draw.flags &= ~DRAW_CLIP_MASK; if( flags == DRAW_CLIP_DISABLED ) { @@ -173,34 +179,27 @@ void Draw_SetClipRect( int flags, const clipRect_t *clip ) { /* ============= -Draw_GetPicSize +R_GetPicSize ============= */ -qboolean Draw_GetPicSize( int *w, int *h, qhandle_t hPic ) { - image_t *gl; +qboolean R_GetPicSize( int *w, int *h, qhandle_t pic ) { + image_t *image = IMG_ForHandle( pic ); - gl = R_ImageForHandle( hPic ); if( w ) { - *w = gl->width; + *w = image->width; } if( h ) { - *h = gl->height; + *h = image->height; } - return gl->flags & if_transparent; -} - -qhandle_t R_RegisterFont( const char *name ) { - qhandle_t R_RegisterPic( const char *name ); - - return R_RegisterPic( name ); + return image->flags & if_transparent; } /* ============= -Draw_StretchData +R_DrawStretchData ============= */ -static void Draw_StretchData( int x, int y, int w, int h, int xx, int yy, +static void R_DrawStretchData( int x, int y, int w, int h, int xx, int yy, int ww, int hh, int pitch, byte *data ) { byte *srcpixels, *dstpixels, *dst, *src; @@ -309,10 +308,10 @@ static void Draw_StretchData( int x, int y, int w, int h, int xx, int yy, /* ============= -Draw_FixedData +R_DrawFixedData ============= */ -static void Draw_FixedData( int x, int y, int w, int h, +static void R_DrawFixedData( int x, int y, int w, int h, int pitch, byte *data ) { byte *srcpixels, *dstpixels; @@ -398,7 +397,7 @@ static void Draw_FixedData( int x, int y, int w, int h, } -static void Draw_FixedDataAsMask( int x, int y, int w, int h, +static void R_DrawFixedDataAsMask( int x, int y, int w, int h, int pitch, byte *data, byte tbyte ) { byte *srcpixels, *dstpixels; @@ -485,84 +484,63 @@ static void Draw_FixedDataAsMask( int x, int y, int w, int h, /* ============= -Draw_StretchPic +R_DrawStretcpic ============= */ -void Draw_StretchPicST( int x, int y, int w, int h, float s1, float t1, - float s2, float t2, qhandle_t hPic ) +void R_DrawStretcPicST( int x, int y, int w, int h, float s1, float t1, + float s2, float t2, qhandle_t pic ) { - image_t *image; + image_t *image = IMG_ForHandle( pic ); int xx, yy, ww, hh; - image = R_ImageForHandle( hPic ); - xx = image->width * s1; yy = image->height * t1; ww = image->width * ( s2 - s1 ); hh = image->height * ( t2 - t1 ); - //draw_current->drawStretchPic - Draw_StretchData( x, y, w, h, xx, yy, ww, hh, image->width, - image->pixels[0] ); + R_DrawStretchData( x, y, w, h, xx, yy, ww, hh, + image->width, image->pixels[0] ); } /* ============= -Draw_StretchPic +R_DrawStretchPic ============= */ -void Draw_StretchPic( int x, int y, int w, int h, qhandle_t hPic ) { - image_t *image; - - image = R_ImageForHandle( hPic ); +void R_DrawStretchPic( int x, int y, int w, int h, qhandle_t pic ) { + image_t *image = IMG_ForHandle( pic ); if( w == image->width && h == image->height ) { - Draw_FixedData( x, y, image->width, image->height, - image->width, image->pixels[0] ); + R_DrawFixedData( x, y, image->width, image->height, + image->width, image->pixels[0] ); return; } - //draw_current->drawStretchPic - Draw_StretchData( x, y, w, h, 0, 0, image->width, image->height, - image->width, image->pixels[0] ); + R_DrawStretchData( x, y, w, h, 0, 0, image->width, image->height, + image->width, image->pixels[0] ); } /* ============= -Draw_StretchPic +R_DrawStretcpic ============= */ -void Draw_Pic( int x, int y, qhandle_t hPic ) { - image_t *image; - - image = R_ImageForHandle( hPic ); - - //draw_current->drawFixedPic - Draw_FixedData( x, y, image->width, image->height, - image->width, image->pixels[0] ); +void R_DrawPic( int x, int y, qhandle_t pic ) { + image_t *image = IMG_ForHandle( pic ); + R_DrawFixedData( x, y, image->width, image->height, + image->width, image->pixels[0] ); } -/* -============= -Draw_StretchRaw -============= -*/ -void Draw_StretchRaw( int x, int y, int w, int h, int cols, - int rows, const byte *data ) -{ - Draw_StretchData( x, y, w, h, 0, 0, cols, rows, cols, ( byte * )data ); -} - -void Draw_Char( int x, int y, int flags, int ch, qhandle_t hFont ) { +void R_DrawChar( int x, int y, int flags, int ch, qhandle_t font ) { image_t *image; int xx, yy; byte *data; - if( !hFont ) { + if( !font ) { return; } - image = R_ImageForHandle( hFont ); + image = IMG_ForHandle( font ); if( image->width != 128 || image->height != 128 ) { return; } @@ -571,29 +549,29 @@ void Draw_Char( int x, int y, int flags, int ch, qhandle_t hFont ) { yy = ( ( ch >> 4 ) & 15 ) << 3; data = image->pixels[0] + yy * image->width + xx; if( draw.colorIndex != -1 && !( ch & 128 ) ) { - Draw_FixedDataAsMask( x, y, 8, 8, image->width, data, draw.colorIndex ); + R_DrawFixedDataAsMask( x, y, 8, 8, image->width, data, draw.colorIndex ); } else { - Draw_FixedData( x, y, 8, 8, image->width, data ); + R_DrawFixedData( x, y, 8, 8, image->width, data ); } } /* =============== -Draw_String +R_DrawString =============== */ -int Draw_String( int x, int y, int flags, size_t maxChars, - const char *string, qhandle_t hFont ) +int R_DrawString( int x, int y, int flags, size_t maxChars, + const char *string, qhandle_t font ) { image_t *image; byte c, *data; int xx, yy; int color, mask; - if( !hFont ) { + if( !font ) { return x; } - image = R_ImageForHandle( hFont ); + image = IMG_ForHandle( font ); if( image->width != 128 || image->height != 128 ) { return x; } @@ -642,9 +620,9 @@ int Draw_String( int x, int y, int flags, size_t maxChars, yy = ( c >> 4 ) << 3; data = image->pixels[0] + yy * image->width + xx; if( color != -1 && !( c & 128 ) ) { - Draw_FixedDataAsMask( x, y, 8, 8, image->width, data, color ); + R_DrawFixedDataAsMask( x, y, 8, 8, image->width, data, color ); } else { - Draw_FixedData( x, y, 8, 8, image->width, data ); + R_DrawFixedData( x, y, 8, 8, image->width, data ); } x += 8; @@ -654,30 +632,28 @@ int Draw_String( int x, int y, int flags, size_t maxChars, /* ============= -Draw_TileClear +R_TileClear This repeats a 64*64 tile graphic to fill the screen around a sized down refresh window. ============= */ -void Draw_TileClear( int x, int y, int w, int h, qhandle_t hPic ) { +void R_TileClear( int x, int y, int w, int h, qhandle_t pic ) { int i, j; byte *psrc; byte *pdest; - image_t *pic; + image_t *image; int x2; - if( !hPic ) { + if( !pic ) { return; } - if (x < 0) - { + if (x < 0) { w += x; x = 0; } - if (y < 0) - { + if (y < 0) { h += y; y = 0; } @@ -688,15 +664,14 @@ void Draw_TileClear( int x, int y, int w, int h, qhandle_t hPic ) { if (w <= 0 || h <= 0) return; - pic = R_ImageForHandle( hPic ); - if( pic->width != 64 || pic->height != 64 ) { + image = IMG_ForHandle( pic ); + if( image->width != 64 || image->height != 64 ) { return; } x2 = x + w; pdest = vid.buffer + y*vid.rowbytes; - for (i=0 ; i<h ; i++, pdest += vid.rowbytes) - { - psrc = pic->pixels[0] + pic->width * ((i+y)&63); + for (i=0 ; i<h ; i++, pdest += vid.rowbytes) { + psrc = image->pixels[0] + image->width * ((i+y)&63); for (j=x ; j<x2 ; j++) pdest[j] = psrc[j&63]; } @@ -705,80 +680,80 @@ void Draw_TileClear( int x, int y, int w, int h, qhandle_t hPic ) { /* ============= -Draw_Fill +R_DrawFill Fills a box of pixels with a single color ============= */ -void Draw_Fill (int x, int y, int w, int h, int c) -{ +void R_DrawFill( int x, int y, int w, int h, int c ) { byte *dest; int u, v; - if (x+w > vid.width) + if( x + w > vid.width ) w = vid.width - x; - if (y+h > vid.height) + if( y + h > vid.height ) h = vid.height - y; - if (x < 0) - { + if( x < 0 ) { w += x; x = 0; } - if (y < 0) - { + if( y < 0 ) { h += y; y = 0; } - if (w < 0 || h < 0) + if( w < 0 || h < 0 ) return; - dest = vid.buffer + y*vid.rowbytes + x; - for (v=0 ; v<h ; v++, dest += vid.rowbytes) - for (u=0 ; u<w ; u++) - dest[u] = c; -} -static byte Blend33( int pcolor, int dstcolor ) { - return vid.alphamap[pcolor + dstcolor*256]; -} - -static byte Blend66( int pcolor, int dstcolor ) { - return vid.alphamap[pcolor*256+dstcolor]; + dest = vid.buffer + y * vid.rowbytes + x; + for( v = 0; v < h; v++, dest += vid.rowbytes ) + for( u = 0; u < w; u++ ) + dest[u] = c; } -void Draw_FillEx( int x, int y, int w, int h, const color_t color ) { - int colorIndex; +void R_DrawFillEx( int x, int y, int w, int h, const color_t color ) { + int c; byte *dest; int u, v; - byte (*blendfunc)( int, int ); - colorIndex = color ? R_IndexForColor( color ) : 0xD7; - - blendfunc = NULL; - if( color[3] < 172 ) { - blendfunc = color[3] > 84 ? Blend66 : Blend33; - } - - if (x+w > vid.width) + if( x + w > vid.width ) w = vid.width - x; - if (y+h > vid.height) + if( y + h > vid.height ) h = vid.height - y; - if (x < 0) - { + if( x < 0 ) { w += x; x = 0; } - if (y < 0) - { + if( y < 0 ) { h += y; y = 0; } - if (w < 0 || h < 0) + if( w < 0 || h < 0 ) return; - dest = vid.buffer + y*vid.rowbytes + x; - for (v=0 ; v<h ; v++, dest += vid.rowbytes) - for (u=0 ; u<w ; u++) - dest[u] = blendfunc ? blendfunc( colorIndex, dest[u] ) : colorIndex; - + + c = color ? R_IndexForColor( color ) : 0xD7; + + dest = vid.buffer + y * vid.rowbytes + x; + if( color[3] < 172 ) { + if( color[3] > 84 ) { + for( v = 0; v < h; v++, dest += vid.rowbytes ) { + for( u = 0 ; u < w; u++ ) { + dest[u] = vid.alphamap[c * 256 + dest[u]]; + } + } + } else { + for( v = 0; v < h; v++, dest += vid.rowbytes ) { + for( u = 0 ; u < w; u++ ) { + dest[u] = vid.alphamap[c + dest[u] * 256]; + } + } + } + } else { + for( v = 0; v < h; v++, dest += vid.rowbytes ) { + for( u = 0 ; u < w; u++ ) { + dest[u] = c; + } + } + } } @@ -786,11 +761,11 @@ void Draw_FillEx( int x, int y, int w, int h, const color_t color ) { /* ================ -Draw_FadeScreen +R_DrawFadeScreen ================ */ -void Draw_FadeScreen (void) +void R_DrawFadeScreen (void) { int x,y; byte *pbuf; |