half-alpha character rendering for software
changed background to not blink added BX_COLOREDTEXT extension (although the FTE extension conflicts) fix to console clearing which should hopefully speed things up a little bit git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@1886 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
4807ec631b
commit
8f550d6d1f
7 changed files with 206 additions and 184 deletions
|
@ -23,22 +23,22 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
|
||||
// This is the standard RGBI palette used in CGA text mode
|
||||
consolecolours_t consolecolours[MAXCONCOLOURS] = {
|
||||
{ 0, 0, 0, 0, 0, 0 }, // black
|
||||
{ 0, 0, 170, 0, 0, 0.67}, // blue
|
||||
{ 0, 170, 0, 0, 0.67, 0 }, // green
|
||||
{ 0, 170, 170, 0, 0.67, 0.67}, // cyan
|
||||
{170, 0, 0, 0.67, 0, 0 }, // red
|
||||
{170, 0, 170, 0.67, 0, 0.67}, // magenta
|
||||
{170, 85, 0, 0.67, 0.33, 0 }, // brown
|
||||
{170, 170, 170, 0.67, 0.67, 0.67}, // light gray
|
||||
{ 85, 85, 85, 0.33, 0.33, 0.33}, // dark gray
|
||||
{ 85, 85, 255, 0.33, 0.33, 1 }, // light blue
|
||||
{ 85, 255, 85, 0.33, 1, 0.33}, // light green
|
||||
{ 85, 255, 255, 0.33, 1, 1 }, // light cyan
|
||||
{255, 85, 85, 1, 0.33, 0.33}, // light red
|
||||
{255, 85, 255, 1, 0.33, 1 }, // light magenta
|
||||
{255, 255, 85, 1, 1, 0.33}, // yellow
|
||||
{255, 255, 255, 1, 1, 1 } // white
|
||||
{0, 0, 0 }, // black
|
||||
{0, 0, 0.67}, // blue
|
||||
{0, 0.67, 0 }, // green
|
||||
{0, 0.67, 0.67}, // cyan
|
||||
{0.67, 0, 0 }, // red
|
||||
{0.67, 0, 0.67}, // magenta
|
||||
{0.67, 0.33, 0 }, // brown
|
||||
{0.67, 0.67, 0.67}, // light gray
|
||||
{0.33, 0.33, 0.33}, // dark gray
|
||||
{0.33, 0.33, 1 }, // light blue
|
||||
{0.33, 1, 0.33}, // light green
|
||||
{0.33, 1, 1 }, // light cyan
|
||||
{1, 0.33, 0.33}, // light red
|
||||
{1, 0.33, 1 }, // light magenta
|
||||
{1, 1, 0.33}, // yellow
|
||||
{1, 1, 1 } // white
|
||||
};
|
||||
|
||||
// This is for remapping the Q3 color codes to character masks, including ^9
|
||||
|
@ -405,7 +405,7 @@ void Con_Clear_f (void)
|
|||
//wide chars, not standard ascii
|
||||
for (i = 0; i < sizeof(con_main.text)/sizeof(conchar_t); i++)
|
||||
{
|
||||
con_main.text[i] = ' ';
|
||||
con_main.text[i] = CON_DEFAULTCHAR;
|
||||
// Q_memset (con_main.text, ' ', sizeof(con_main.text));
|
||||
}
|
||||
}
|
||||
|
@ -472,7 +472,7 @@ void Con_ResizeCon (console_t *con)
|
|||
con->linewidth = width;
|
||||
con->totallines = CON_TEXTSIZE / con->linewidth;
|
||||
for (i = 0; i < CON_TEXTSIZE; i++)
|
||||
con->text[i] = ' ';
|
||||
con->text[i] = CON_DEFAULTCHAR;
|
||||
// Q_memset (con->text, ' ', sizeof(con->text));
|
||||
}
|
||||
else
|
||||
|
@ -493,7 +493,7 @@ void Con_ResizeCon (console_t *con)
|
|||
|
||||
Q_memcpy (tbuf, con->text, sizeof(con->text));
|
||||
for (i = 0; i < sizeof(con->text)/sizeof(conchar_t); i++)
|
||||
con->text[i] = ' ';
|
||||
con->text[i] = CON_DEFAULTCHAR;
|
||||
// Q_memset (con->text, ' ', sizeof(con->text));
|
||||
|
||||
for (i=0 ; i<numlines ; i++)
|
||||
|
@ -584,7 +584,7 @@ void Con_Linefeed (console_t *con)
|
|||
min = (con->current%con->totallines)*con->linewidth;
|
||||
max = min + con->linewidth;
|
||||
for (i = min; i < max; i++)
|
||||
con->text[i] = ' ';
|
||||
con->text[i] = CON_DEFAULTCHAR;
|
||||
|
||||
// Q_memset (&con->text[(con->current%con_totallines)*con_linewidth]
|
||||
// , ' ', con_linewidth*sizeof(unsigned short));
|
||||
|
|
|
@ -25,7 +25,6 @@ typedef unsigned int conchar_t;
|
|||
|
||||
#define MAXCONCOLOURS 16
|
||||
typedef struct {
|
||||
int ir, ig, ib;
|
||||
float fr, fg, fb;
|
||||
} consolecolours_t;
|
||||
|
||||
|
@ -51,6 +50,8 @@ extern conchar_t q3codemasks[MAXQ3COLOURS];
|
|||
#define CON_Q3MASK 0x0F100000
|
||||
#define CON_WHITEMASK 0x0F000000 // must be constant. things assume this
|
||||
|
||||
#define CON_DEFAULTCHAR (CON_WHITEMASK | 32)
|
||||
|
||||
// RGBI standard colors
|
||||
#define COLOR_BLACK 0
|
||||
#define COLOR_DARKBLUE 1
|
||||
|
|
|
@ -1288,13 +1288,6 @@ void GLDraw_ColouredCharacter (int x, int y, unsigned int num)
|
|||
{
|
||||
unsigned int col;
|
||||
|
||||
if (num & CON_BLINKTEXT)
|
||||
{
|
||||
if (!cl_noblink.value)
|
||||
if ((int)(realtime*3) & 1)
|
||||
return;
|
||||
}
|
||||
|
||||
// draw background
|
||||
if (num & CON_NONCLEARBG)
|
||||
{
|
||||
|
@ -1302,6 +1295,13 @@ void GLDraw_ColouredCharacter (int x, int y, unsigned int num)
|
|||
GLDraw_FillRGB(x, y, 8, 8, consolecolours[col].fr, consolecolours[col].fg, consolecolours[col].fb);
|
||||
}
|
||||
|
||||
if (num & CON_BLINKTEXT)
|
||||
{
|
||||
if (!cl_noblink.value)
|
||||
if ((int)(realtime*3) & 1)
|
||||
return;
|
||||
}
|
||||
|
||||
// render character with foreground color
|
||||
col = (num & CON_FGMASK) >> CON_FGSHIFT;
|
||||
qglColor4f(consolecolours[col].fr, consolecolours[col].fg, consolecolours[col].fb, (num & CON_HALFALPHA)?0.5:1);
|
||||
|
|
|
@ -6244,6 +6244,7 @@ typedef struct lh_extension_s {
|
|||
|
||||
|
||||
lh_extension_t QSG_Extensions[] = {
|
||||
{"BX_COLOREDTEXT"},
|
||||
{"DP_CON_SET"},
|
||||
#ifndef SERVERONLY
|
||||
{"DP_CON_SETA"}, //because the server doesn't write configs.
|
||||
|
|
|
@ -19,6 +19,9 @@ int swzpal[TRANS_LEVELS][256];
|
|||
palremap_t *RebuildMenuTint(void);
|
||||
palremap_t *mtpalremap;
|
||||
|
||||
// IB remap
|
||||
palremap_t *ib_remap;
|
||||
|
||||
extern cvar_t r_menutint;
|
||||
int mtmodified;
|
||||
|
||||
|
@ -42,6 +45,7 @@ void D_ShutdownTrans(void)
|
|||
|
||||
mtpalremap = NULL;
|
||||
mtmodified = 0;
|
||||
ib_remap = NULL;
|
||||
}
|
||||
|
||||
void D_InitTrans(void)
|
||||
|
@ -54,6 +58,7 @@ void D_InitTrans(void)
|
|||
srctable = swzpal[0];
|
||||
dsttable = swzpal[TRANS_MAX];
|
||||
mtpalremap = RebuildMenuTint();
|
||||
ib_remap = D_IdentityRemap();
|
||||
}
|
||||
|
||||
// TODO: INLINE THESE FUNCTIONS
|
||||
|
@ -86,7 +91,7 @@ void Set_TransLevelI(int level)
|
|||
}
|
||||
*/
|
||||
|
||||
void D_SetTransLevel(float level, blendmode_t blend) //MUST be between 0 and 1
|
||||
void D_SetTransLevel(float level, blendmode_t blend)
|
||||
{
|
||||
int ilvl;
|
||||
|
||||
|
|
|
@ -64,6 +64,12 @@ int swmenu_numcachepics;
|
|||
|
||||
qbyte sw_crosshaircolor;
|
||||
|
||||
// current rendering blend for sw
|
||||
extern palremap_t *ib_remap;
|
||||
int ib_index;
|
||||
int ib_ri, ib_gi, ib_bi, ib_ai;
|
||||
qboolean ib_colorblend, ib_alphablend;
|
||||
|
||||
/*
|
||||
================
|
||||
Draw_CachePic
|
||||
|
@ -670,15 +676,16 @@ void SWDraw_Character (int x, int y, unsigned int num)
|
|||
#define draw(p) drawpal(host_basepal[p*3]>>3,host_basepal[p*3+1]>>3,host_basepal[p*3+2]>>3)
|
||||
*/
|
||||
|
||||
#define draw(x) pr->pal[x]
|
||||
#define draw(x) ib_remap->pal[x]
|
||||
#define tdraw(x, y) Trans(x, ib_remap->pal[y])
|
||||
void SWDraw_ColouredCharacter (int x, int y, unsigned int num)
|
||||
{
|
||||
qbyte *source;
|
||||
int drawline;
|
||||
int row, col;
|
||||
extern cvar_t cl_noblink;
|
||||
unsigned int colour, bgcolour;
|
||||
qboolean drawbg = false;
|
||||
unsigned int colour;
|
||||
qboolean alpha;
|
||||
|
||||
if (y <= -8)
|
||||
return; // totally off screen
|
||||
|
@ -687,10 +694,18 @@ void SWDraw_ColouredCharacter (int x, int y, unsigned int num)
|
|||
return;
|
||||
|
||||
colour = (num & CON_FGMASK) >> CON_FGSHIFT;
|
||||
bgcolour = (num & CON_BGMASK) >> CON_BGSHIFT;
|
||||
alpha = !!(num & CON_HALFALPHA);
|
||||
|
||||
if (num & CON_NONCLEARBG)
|
||||
drawbg = true;
|
||||
{
|
||||
unsigned int bgcolour;
|
||||
|
||||
bgcolour = (num & CON_BGMASK) >> CON_BGSHIFT;
|
||||
SWDraw_FillRGB(x, (y < 0) ? 0 : y, 8, (y < 0) ? 8 + y : 8,
|
||||
consolecolours[bgcolour].fr,
|
||||
consolecolours[bgcolour].fg,
|
||||
consolecolours[bgcolour].fb);
|
||||
}
|
||||
|
||||
if (num & CON_BLINKTEXT)
|
||||
{
|
||||
|
@ -699,12 +714,17 @@ void SWDraw_ColouredCharacter (int x, int y, unsigned int num)
|
|||
return;
|
||||
}
|
||||
|
||||
if (colour == COLOR_WHITE && !drawbg)
|
||||
if (colour == COLOR_WHITE && !alpha)
|
||||
{
|
||||
Draw_Character(x, y, num);
|
||||
return;
|
||||
}
|
||||
|
||||
SWDraw_ImageColours(consolecolours[colour].fr,
|
||||
consolecolours[colour].fg,
|
||||
consolecolours[colour].fb,
|
||||
alpha ? 0.5 : 1);
|
||||
|
||||
num &= 255;
|
||||
row = num>>4;
|
||||
col = num&15;
|
||||
|
@ -721,31 +741,29 @@ void SWDraw_ColouredCharacter (int x, int y, unsigned int num)
|
|||
|
||||
if (r_pixbytes == 1)
|
||||
{
|
||||
palremap_t *pr;
|
||||
qbyte *dest;
|
||||
dest = vid.conbuffer + y*vid.conrowbytes + x;
|
||||
|
||||
pr = D_GetPaletteRemap(consolecolours[colour].ir,
|
||||
consolecolours[colour].ig,
|
||||
consolecolours[colour].ib,
|
||||
false, true, TOP_DEFAULT, BOTTOM_DEFAULT);
|
||||
|
||||
if (drawbg)
|
||||
if (alpha)
|
||||
{
|
||||
int bgidx = GetPalette(consolecolours[bgcolour].ir,
|
||||
consolecolours[bgcolour].ig,
|
||||
consolecolours[bgcolour].ib);
|
||||
|
||||
while (drawline--)
|
||||
{
|
||||
dest[0] = source[0] ? draw(source[0]) : bgidx;
|
||||
dest[1] = source[1] ? draw(source[1]) : bgidx;
|
||||
dest[2] = source[2] ? draw(source[2]) : bgidx;
|
||||
dest[3] = source[3] ? draw(source[3]) : bgidx;
|
||||
dest[4] = source[4] ? draw(source[4]) : bgidx;
|
||||
dest[5] = source[5] ? draw(source[5]) : bgidx;
|
||||
dest[6] = source[6] ? draw(source[6]) : bgidx;
|
||||
dest[7] = source[7] ? draw(source[7]) : bgidx;
|
||||
if (source[0])
|
||||
dest[0] = tdraw(dest[0], source[0]);
|
||||
if (source[1])
|
||||
dest[1] = tdraw(dest[1], source[1]);
|
||||
if (source[2])
|
||||
dest[2] = tdraw(dest[2], source[2]);
|
||||
if (source[3])
|
||||
dest[3] = tdraw(dest[3], source[3]);
|
||||
if (source[4])
|
||||
dest[4] = tdraw(dest[4], source[4]);
|
||||
if (source[5])
|
||||
dest[5] = tdraw(dest[5], source[5]);
|
||||
if (source[6])
|
||||
dest[6] = tdraw(dest[6], source[6]);
|
||||
if (source[7])
|
||||
dest[7] = tdraw(dest[7], source[7]);
|
||||
source += 128;
|
||||
dest += vid.conrowbytes;
|
||||
}
|
||||
|
@ -774,38 +792,27 @@ void SWDraw_ColouredCharacter (int x, int y, unsigned int num)
|
|||
dest += vid.conrowbytes;
|
||||
}
|
||||
}
|
||||
|
||||
D_DereferenceRemap(pr);
|
||||
}
|
||||
else if (r_pixbytes == 2)
|
||||
{
|
||||
unsigned short *dest16;
|
||||
unsigned char *pal = (unsigned char *)d_8to32table;
|
||||
int i;
|
||||
int rm, gm, bm;
|
||||
|
||||
dest16 = (unsigned short *)vid.conbuffer + y*vid.conrowbytes + x;
|
||||
|
||||
rm = consolecolours[colour].ir>>3;
|
||||
gm = consolecolours[colour].ig>>3;
|
||||
bm = consolecolours[colour].ib>>3;
|
||||
|
||||
if (drawbg)
|
||||
if (alpha)
|
||||
{
|
||||
int bgidx16 = (consolecolours[bgcolour].ir>>3) |
|
||||
(consolecolours[bgcolour].ig>>3)<<5 |
|
||||
(consolecolours[bgcolour].ib>>3)<<10;
|
||||
|
||||
while (drawline--)
|
||||
{
|
||||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
if (source[i])
|
||||
dest16[i] = (((16+pal[source[i]*4+0]*bm)>>8)<<10)+
|
||||
(((16+pal[source[i]*4+1]*gm)>>8)<<5)+
|
||||
((16+pal[source[i]*4+2]*rm)>>8);
|
||||
else
|
||||
dest16[i] = bgidx16;
|
||||
{
|
||||
dest16[i] = ((((128+pal[source[i]*4+0]*ib_ri)>>12)<<10) + ((dest16[i]&0x7B00)>>1)) |
|
||||
((((128+pal[source[i]*4+1]*ib_gi)>>12)<<5) + ((dest16[i]&0x03D0)>>1)) |
|
||||
((128+pal[source[i]*4+2]*ib_bi)>>12) + ((dest16[i]&0x001E)>>1);
|
||||
}
|
||||
}
|
||||
source += 128;
|
||||
dest16 += vid.conrowbytes;
|
||||
|
@ -818,9 +825,9 @@ void SWDraw_ColouredCharacter (int x, int y, unsigned int num)
|
|||
for (i = 0; i < 8; i++)
|
||||
{
|
||||
if (source[i])
|
||||
dest16[i] = (((16+pal[source[i]*4+0]*bm)>>8)<<10)+
|
||||
(((16+pal[source[i]*4+1]*gm)>>8)<<5)+
|
||||
((16+pal[source[i]*4+2]*rm)>>8);
|
||||
dest16[i] = (((128+pal[source[i]*4+0]*ib_ri)>>11)<<10)|
|
||||
(((128+pal[source[i]*4+1]*ib_gi)>>11)<<5)|
|
||||
((128+pal[source[i]*4+2]*ib_bi)>>11);
|
||||
}
|
||||
source += 128;
|
||||
dest16 += vid.conrowbytes;
|
||||
|
@ -833,8 +840,8 @@ void SWDraw_ColouredCharacter (int x, int y, unsigned int num)
|
|||
int i;
|
||||
unsigned char *pal = (unsigned char *)d_8to32table;
|
||||
dest = vid.conbuffer + (y*vid.conrowbytes + x)*r_pixbytes;
|
||||
|
||||
if (drawbg)
|
||||
|
||||
if (alpha)
|
||||
{
|
||||
while (drawline--)
|
||||
{
|
||||
|
@ -842,16 +849,10 @@ void SWDraw_ColouredCharacter (int x, int y, unsigned int num)
|
|||
{
|
||||
if (source[i])
|
||||
{
|
||||
dest[0+i*4] = (128+pal[source[i]*4+0]*consolecolours[colour].ib)>>8;
|
||||
dest[1+i*4] = (128+pal[source[i]*4+1]*consolecolours[colour].ig)>>8;
|
||||
dest[2+i*4] = (128+pal[source[i]*4+2]*consolecolours[colour].ir)>>8;
|
||||
dest[0+i*4] = ((128+pal[source[i]*4+0]*ib_bi)>>9) + (dest[0+i*4]>>1);
|
||||
dest[1+i*4] = ((128+pal[source[i]*4+1]*ib_gi)>>9) + (dest[1+i*4]>>1);
|
||||
dest[2+i*4] = ((128+pal[source[i]*4+2]*ib_ri)>>9) + (dest[2+i*4]>>1);
|
||||
}
|
||||
else
|
||||
{
|
||||
dest[0+i*4] = consolecolours[bgcolour].ib;
|
||||
dest[1+i*4] = consolecolours[bgcolour].ig;
|
||||
dest[2+i*4] = consolecolours[bgcolour].ir;
|
||||
}
|
||||
}
|
||||
source += 128;
|
||||
dest += vid.conrowbytes*r_pixbytes;
|
||||
|
@ -865,9 +866,9 @@ void SWDraw_ColouredCharacter (int x, int y, unsigned int num)
|
|||
{
|
||||
if (source[i])
|
||||
{
|
||||
dest[0+i*4] = (128+pal[source[i]*4+0]*consolecolours[colour].ib)>>8;
|
||||
dest[1+i*4] = (128+pal[source[i]*4+1]*consolecolours[colour].ig)>>8;
|
||||
dest[2+i*4] = (128+pal[source[i]*4+2]*consolecolours[colour].ir)>>8;
|
||||
dest[0+i*4] = (128+pal[source[i]*4+0]*ib_bi)>>8;
|
||||
dest[1+i*4] = (128+pal[source[i]*4+1]*ib_gi)>>8;
|
||||
dest[2+i*4] = (128+pal[source[i]*4+2]*ib_ri)>>8;
|
||||
}
|
||||
}
|
||||
source += 128;
|
||||
|
@ -877,6 +878,7 @@ void SWDraw_ColouredCharacter (int x, int y, unsigned int num)
|
|||
}
|
||||
}
|
||||
#undef draw
|
||||
#undef tdraw
|
||||
|
||||
/*
|
||||
================
|
||||
|
@ -1822,16 +1824,46 @@ void SWDraw_SubImage8(
|
|||
}
|
||||
}
|
||||
|
||||
static qboolean SWDraw_Image_Blend;
|
||||
static int SWDraw_Image_Red=1, SWDraw_Image_Green=1, SWDraw_Image_Blue=1, SWDraw_Image_Alpha=1;
|
||||
void SWDraw_ImageColours (float r, float g, float b, float a) //like glcolour4f
|
||||
{
|
||||
SWDraw_Image_Red=r*255;
|
||||
SWDraw_Image_Green=g*255;
|
||||
SWDraw_Image_Blue=b*255;
|
||||
SWDraw_Image_Alpha=a*255;
|
||||
int ri, gi, bi, ai;
|
||||
|
||||
SWDraw_Image_Blend = r<1 || b<1 || g<1 || a<1;
|
||||
if (r_pixbytes == 1)
|
||||
D_SetTransLevel(a, BM_BLEND); // 8bpp doesn't maintain blending correctly
|
||||
|
||||
ri = 255*r;
|
||||
gi = 255*g;
|
||||
bi = 255*b;
|
||||
ai = 255*a;
|
||||
|
||||
if (ri == ib_ri && gi == ib_gi && bi == ib_bi && ai == ib_ai)
|
||||
{
|
||||
// nothing changed
|
||||
return;
|
||||
}
|
||||
|
||||
ib_colorblend = (ri == 255 && gi == 255 && bi == 255) ? false : true;
|
||||
ib_alphablend = (ai == 255) ? false : true;
|
||||
|
||||
ib_ri = ri;
|
||||
ib_gi = gi;
|
||||
ib_bi = bi;
|
||||
ib_ai = ai;
|
||||
|
||||
switch (r_pixbytes)
|
||||
{
|
||||
case 1:
|
||||
D_DereferenceRemap(ib_remap);
|
||||
ib_remap = D_GetPaletteRemap(ri, gi, bi, false, true, TOP_DEFAULT, BOTTOM_DEFAULT);
|
||||
ib_index = GetPalette(ri, gi, bi);
|
||||
return;
|
||||
case 2:
|
||||
ib_index = ((ri << 3) >> 10) | ((gi << 3) >> 5) | (bi << 3);
|
||||
return;
|
||||
case 4:
|
||||
ib_index = (ri << 16) | (gi << 8) | bi;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void SWDraw_Image (float xp, float yp, float wp, float hp, float s1, float t1, float s2, float t2, mpic_t *pic)
|
||||
|
@ -1920,11 +1952,11 @@ void SWDraw_Image (float xp, float yp, float wp, float hp, float s1, float t1, f
|
|||
}
|
||||
else
|
||||
{
|
||||
if (SWDraw_Image_Blend) //blend it on
|
||||
if (ib_colorblend || ib_alphablend) //blend it on
|
||||
{
|
||||
SWDraw_SubImageBlend32(xp, yp, wp, hp, s1, t1, s2, t2,
|
||||
pic->width, pic->height, pic->data,
|
||||
SWDraw_Image_Red, SWDraw_Image_Green, SWDraw_Image_Blue, SWDraw_Image_Alpha);
|
||||
ib_ri, ib_gi, ib_bi, ib_ai);
|
||||
|
||||
}
|
||||
else //block colour (fast)
|
||||
|
@ -2397,10 +2429,41 @@ Draw_Fill
|
|||
Fills a box of pixels with a single color
|
||||
=============
|
||||
*/
|
||||
void SWDraw_Fill32 (int x, int y, int w, int h, unsigned int c)
|
||||
{
|
||||
int u, v;
|
||||
unsigned int *p32dest;
|
||||
|
||||
p32dest = (unsigned int*)vid.buffer + y*vid.rowbytes + x;
|
||||
for (v=0 ; v<h ; v++, p32dest += vid.rowbytes)
|
||||
for (u=0 ; u<w ; u++)
|
||||
p32dest[u] = c;
|
||||
}
|
||||
|
||||
void SWDraw_Fill16 (int x, int y, int w, int h, unsigned short c)
|
||||
{
|
||||
int u, v;
|
||||
unsigned short *p16dest;
|
||||
|
||||
p16dest = (unsigned short*)vid.buffer + y*vid.rowbytes + x;
|
||||
for (v=0 ; v<h ; v++, p16dest += vid.rowbytes)
|
||||
for (u=0 ; u<w ; u++)
|
||||
p16dest[u] = c;
|
||||
}
|
||||
|
||||
void SWDraw_Fill8 (int x, int y, int w, int h, unsigned char c)
|
||||
{
|
||||
int u, v;
|
||||
|
||||
qbyte *dest;
|
||||
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 SWDraw_Fill (int x, int y, int w, int h, int c)
|
||||
{
|
||||
int u, v;
|
||||
|
||||
if (x < 0 || x + w > vid.width ||
|
||||
y < 0 || y + h > vid.height) {
|
||||
Con_Printf("Bad Draw_Fill(%d, %d, %d, %d, %c)\n",
|
||||
|
@ -2408,31 +2471,47 @@ void SWDraw_Fill (int x, int y, int w, int h, int c)
|
|||
return;
|
||||
}
|
||||
|
||||
if (r_pixbytes == 1)
|
||||
switch (r_pixbytes)
|
||||
{
|
||||
qbyte *dest;
|
||||
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;
|
||||
case 1:
|
||||
SWDraw_Fill8(x, y, w, h, (unsigned char)c);
|
||||
break;
|
||||
case 2:
|
||||
SWDraw_Fill16(x, y, w, h, d_8to16table[c]);
|
||||
break;
|
||||
case 4:
|
||||
SWDraw_Fill32(x, y, w, h, d_8to32table[c]);
|
||||
break;
|
||||
}
|
||||
else if (r_pixbytes == 4)
|
||||
{
|
||||
unsigned int *p32dest;
|
||||
}
|
||||
|
||||
p32dest = (unsigned int*)vid.buffer + y*vid.rowbytes + x;
|
||||
for (v=0 ; v<h ; v++, p32dest += vid.rowbytes)
|
||||
for (u=0 ; u<w ; u++)
|
||||
p32dest[u] = d_8to32table[c];
|
||||
void SWDraw_FillRGB (int x, int y, int w, int h, float r, float g, float b)
|
||||
{
|
||||
unsigned int c;
|
||||
|
||||
|
||||
if (x < 0 || x + w > vid.width ||
|
||||
y < 0 || y + h > vid.height) {
|
||||
Con_Printf("Bad Draw_FillRGB(%d, %d, %d, %d)\n",
|
||||
x, y, w, h);
|
||||
return;
|
||||
}
|
||||
else if (r_pixbytes == 2)
|
||||
{
|
||||
unsigned short *p16dest;
|
||||
|
||||
p16dest = (unsigned short*)vid.buffer + y*vid.rowbytes + x;
|
||||
for (v=0 ; v<h ; v++, p16dest += vid.rowbytes)
|
||||
for (u=0 ; u<w ; u++)
|
||||
p16dest[u] = d_8to16table[c];
|
||||
|
||||
switch (r_pixbytes)
|
||||
{
|
||||
case 1:
|
||||
c = GetPalette(r*255, g*255, b*255);
|
||||
SWDraw_Fill8(x, y, w, h, (unsigned char)c);
|
||||
break;
|
||||
case 2:
|
||||
c = ((int)(r*31) << 10) | ((int)(g*31) << 5) | (int)(b*31);
|
||||
SWDraw_Fill16(x, y, w, h, (unsigned short)c);
|
||||
break;
|
||||
case 4:
|
||||
c = ((int)(r*255)<<16) | ((int)(g*255)<<8) | (int)(b*255);
|
||||
SWDraw_Fill32(x, y, w, h, c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
//=============================================================================
|
||||
|
@ -2506,71 +2585,6 @@ void SWDraw_FadeScreen (void)
|
|||
VID_LockBuffer ();
|
||||
}
|
||||
|
||||
#if 0
|
||||
void SWDraw_Box(int x1, int y1, int x2, int y2, int paletteindex, float alpha)
|
||||
{
|
||||
int x;
|
||||
int y;
|
||||
int w;
|
||||
int h;
|
||||
|
||||
qbyte *dest;
|
||||
unsigned int *puidest;
|
||||
unsigned uc;
|
||||
int u, v;
|
||||
|
||||
D_SetTransLevel(alpha, BM_MERGE);
|
||||
if (alpha < TRANS_LOWER_CAP)
|
||||
return;
|
||||
|
||||
if (x1 < x2)
|
||||
{
|
||||
x = x1;
|
||||
w = x2-x1;
|
||||
}
|
||||
else
|
||||
{
|
||||
x = x2;
|
||||
w = x1-x2;
|
||||
}
|
||||
|
||||
if (y1 < y2)
|
||||
{
|
||||
y = y1;
|
||||
h = y2-y1;
|
||||
}
|
||||
else
|
||||
{
|
||||
y = y2;
|
||||
h = y1-y2;
|
||||
}
|
||||
|
||||
|
||||
if (x < 0 || x + w > vid.width ||
|
||||
y < 0 || y + h > vid.height) {
|
||||
Con_Printf("Bad SWDraw_Box(%d, %d, %d, %d, %i)\n",
|
||||
x, y, w, h, paletteindex);
|
||||
return;
|
||||
}
|
||||
|
||||
if (r_pixbytes == 1)
|
||||
{
|
||||
dest = vid.buffer + y*vid.rowbytes + x;
|
||||
for (v=0 ; v<h ; v++, dest += vid.rowbytes)
|
||||
for (u=0 ; u<w ; u++)
|
||||
dest[u] = Trans(dest[u], paletteindex);
|
||||
}
|
||||
else if (r_pixbytes == 4)
|
||||
{
|
||||
uc = d_8to32table[paletteindex];
|
||||
|
||||
puidest = (unsigned int *)vid.buffer + y * (vid.rowbytes) + x;
|
||||
for (v=0 ; v<h ; v++, puidest += vid.rowbytes)
|
||||
for (u=0 ; u<w ; u++)
|
||||
puidest[u] = uc;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
//=============================================================================
|
||||
|
||||
|
|
|
@ -39,6 +39,7 @@ void SWDraw_BeginDisc (void);
|
|||
void SWDraw_EndDisc (void);
|
||||
void SWDraw_TileClear (int x, int y, int w, int h);
|
||||
void SWDraw_Fill (int x, int y, int w, int h, int c);
|
||||
void SWDraw_FillRGB (int x, int y, int w, int h, float r, float g, float b);
|
||||
void SWDraw_FadeScreen (void);
|
||||
void SWDraw_String (int x, int y, const qbyte *str);
|
||||
void SWDraw_Alt_String (int x, int y, const qbyte *str);
|
||||
|
|
Loading…
Reference in a new issue