scr_conalpha added

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2022 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
TimeServ 2006-02-25 21:03:56 +00:00
parent 40a6ec9b85
commit ec3d886864
8 changed files with 83 additions and 28 deletions

View file

@ -94,6 +94,8 @@ int scr_copyeverything;
float scr_con_current; float scr_con_current;
float scr_conlines; // lines of console to display float scr_conlines; // lines of console to display
qboolean scr_con_forcedraw;
float oldscreensize, oldfov; float oldscreensize, oldfov;
extern cvar_t scr_viewsize; extern cvar_t scr_viewsize;
extern cvar_t scr_fov; extern cvar_t scr_fov;
@ -1336,6 +1338,8 @@ void SCR_SetUpToDrawConsole (void)
#endif #endif
Con_CheckResize (); Con_CheckResize ();
scr_con_forcedraw = false;
if (scr_drawloading) if (scr_drawloading)
return; // never a console with loading plaque return; // never a console with loading plaque
@ -1351,6 +1355,7 @@ void SCR_SetUpToDrawConsole (void)
{ {
scr_conlines = vid.height; // full screen scr_conlines = vid.height; // full screen
scr_con_current = scr_conlines; scr_con_current = scr_conlines;
scr_con_forcedraw = true;
} }
else if (key_dest == key_console || scr_chatmode) else if (key_dest == key_console || scr_chatmode)
{ {

View file

@ -160,6 +160,8 @@ cvar_t scr_sshot_type = SCVAR("scr_sshot_type", "jpg");
cvar_t scr_centersbar = SCVAR("scr_centersbar", "0"); cvar_t scr_centersbar = SCVAR("scr_centersbar", "0");
cvar_t scr_consize = SCVAR("scr_consize", "0.5"); cvar_t scr_consize = SCVAR("scr_consize", "0.5");
cvar_t scr_conalpha = SCVAR("scr_conalpha", "0.7");
cvar_t scr_viewsize = SCVARF("viewsize","100", CVAR_ARCHIVE); cvar_t scr_viewsize = SCVARF("viewsize","100", CVAR_ARCHIVE);
cvar_t scr_fov = SCVARF("fov","90", CVAR_ARCHIVE); // 10 - 170 cvar_t scr_fov = SCVARF("fov","90", CVAR_ARCHIVE); // 10 - 170
cvar_t scr_conspeed = SCVAR("scr_conspeed","300"); cvar_t scr_conspeed = SCVAR("scr_conspeed","300");
@ -496,6 +498,7 @@ void Renderer_Init(void)
//screen //screen
Cvar_Register (&scr_conspeed, SCREENOPTIONS); Cvar_Register (&scr_conspeed, SCREENOPTIONS);
Cvar_Register (&scr_conalpha, SCREENOPTIONS);
Cvar_Register (&scr_showram, SCREENOPTIONS); Cvar_Register (&scr_showram, SCREENOPTIONS);
Cvar_Register (&scr_showturtle, SCREENOPTIONS); Cvar_Register (&scr_showturtle, SCREENOPTIONS);
Cvar_Register (&scr_showpause, SCREENOPTIONS); Cvar_Register (&scr_showpause, SCREENOPTIONS);

View file

@ -248,7 +248,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
.extern DP_Count .extern DP_Count
.extern DP_u .extern DP_u
.extern DP_v .extern DP_v
.extern DP_32768 .extern DP_Partfac
.extern DP_Color .extern DP_Color
.extern DP_Pix .extern DP_Pix
.extern DP_EntryTable .extern DP_EntryTable

View file

@ -74,6 +74,7 @@ shader_t *shader_console;
#endif #endif
extern cvar_t con_ocranaleds; extern cvar_t con_ocranaleds;
extern cvar_t gl_blend2d; extern cvar_t gl_blend2d;
extern cvar_t scr_conalpha;
qbyte *draw_chars; // 8*8 graphic characters qbyte *draw_chars; // 8*8 graphic characters
mpic_t *draw_disc; mpic_t *draw_disc;
@ -1881,14 +1882,26 @@ void GLDraw_ConsoleBackground (int lines)
{ {
// char ver[80]; // char ver[80];
// int x, i; // int x, i;
int y; float a;
extern qboolean scr_con_forcedraw;
y = (vid.height * 3) >> 2;
conback->width = vid.conwidth; conback->width = vid.conwidth;
conback->height = vid.conheight; conback->height = vid.conheight;
if (scr_con_forcedraw)
{
a = 1; // console background is necessary
}
else
{
if (scr_conalpha.value <= 0)
return;
a = scr_conalpha.value;
}
if (scr_chatmode == 2) if (scr_chatmode == 2)
{ {
y=0;
conback->height>>=1; conback->height>>=1;
conback->width>>=1; conback->width>>=1;
} }
@ -1897,20 +1910,20 @@ void GLDraw_ConsoleBackground (int lines)
if (shader_console) if (shader_console)
{ {
currententity = &r_worldentity; currententity = &r_worldentity;
GLDraw_ShaderPic(0, lines - conback->height, vid.width, vid.height, shader_console, 1, 1, 1, (1.2*lines)/y); GLDraw_ShaderPic(0, lines - conback->height, vid.width, vid.height, shader_console, 1, 1, 1, a);
qglBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); qglBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
return; return;
} }
} }
#endif #endif
if (lines > y) if (a >= 1)
{ {
qglColor3f (1,1,1); qglColor3f (1,1,1);
GLDraw_Pic(0, lines-conback->height, conback); GLDraw_Pic(0, lines-conback->height, conback);
} }
else else
{ {
GLDraw_AlphaPic (0, lines - conback->height, conback, (float)(1.2 * lines)/y); GLDraw_AlphaPic (0, lines - conback->height, conback, a);
} }
} }

View file

@ -23,7 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "d_local.h" #include "d_local.h"
//Spike: Particles are depth sorted. So why depth write? They are the last to be drawn anyway. //Spike: Particles are depth sorted. So why depth write? They are the last to be drawn anyway.
#define PARTICLEFACTOR 0x8000 // Change DP_Partfac in ASM to match this
/* /*
============== ==============
@ -87,7 +87,7 @@ void D_DrawParticle (particle_t *pparticle)
pz = d_pzbuffer + (d_zwidth * v) + u; pz = d_pzbuffer + (d_zwidth * v) + u;
pdest = d_viewbuffer + d_scantable[v] + u; pdest = d_viewbuffer + d_scantable[v] + u;
izi = (int)(zi * 0x8000); izi = (int)(zi * PARTICLEFACTOR);
pix = izi >> d_pix_shift; pix = izi >> d_pix_shift;
pix *= pparticle->scale; pix *= pparticle->scale;
@ -244,9 +244,9 @@ void D_DrawParticle16 (particle_t *pparticle)
} }
pz = d_pzbuffer + (d_zwidth * v) + u; pz = d_pzbuffer + (d_zwidth * v) + u;
izi = (int)(zi * 0x8000); izi = (int)(zi * PARTICLEFACTOR);
pix = ((int)(izi*pparticle->scale)) >> d_pix_shift; pix = ((int)(izi*pparticle->scale));
if (pix < d_pix_min) if (pix < d_pix_min)
pix = d_pix_min; pix = d_pix_min;
@ -319,7 +319,7 @@ void D_DrawParticle32 (particle_t *pparticle)
} }
pz = d_pzbuffer + (d_zwidth * v) + u; pz = d_pzbuffer + (d_zwidth * v) + u;
izi = (int)(zi * 0x8000); izi = (int)(zi * PARTICLEFACTOR);
pix = ((int)(izi*pparticle->scale)) >> d_pix_shift; pix = ((int)(izi*pparticle->scale)) >> d_pix_shift;
@ -419,7 +419,7 @@ void D_DrawParticleTrans (particle_t *pparticle, blendmode_t blendmode)
} }
pz = d_pzbuffer + (d_zwidth * v) + u; pz = d_pzbuffer + (d_zwidth * v) + u;
izi = (int)(zi * 0x8000); izi = (int)(zi * PARTICLEFACTOR);
pix = ((int)(izi*pparticle->scale)) >> d_pix_shift; pix = ((int)(izi*pparticle->scale)) >> d_pix_shift;

View file

@ -134,7 +134,7 @@ C(D_DrawParticle):
fxch %st(1) // u | v | 1/z fxch %st(1) // u | v | 1/z
fadds float_point5 // u | v | 1/z fadds float_point5 // u | v | 1/z
fxch %st(2) // 1/z | v | u fxch %st(2) // 1/z | v | u
fmuls DP_32768 // 1/z * 0x8000 | v | u fmuls DP_Partfac // 1/z * 0x8000 | v | u
fxch %st(2) // u | v | 1/z * 0x8000 fxch %st(2) // u | v | 1/z * 0x8000
// FIXME: use Terje's fp->int trick here? // FIXME: use Terje's fp->int trick here?

View file

@ -146,11 +146,11 @@ entryvec_table_16: .long 0, Entry2_16, Entry3_16, Entry4_16
//------------------------------------------------------- //-------------------------------------------------------
// local variables for d_parta.s // local variables for d_parta.s
//------------------------------------------------------- //-------------------------------------------------------
.globl DP_Count, DP_u, DP_v, DP_32768, DP_Color, DP_Pix, DP_EntryTable .globl DP_Count, DP_u, DP_v, DP_Partfac, DP_Color, DP_Pix, DP_EntryTable
DP_Count: .long 0 DP_Count: .long 0
DP_u: .long 0 DP_u: .long 0
DP_v: .long 0 DP_v: .long 0
DP_32768: .single 32768.0 DP_Partfac: .single 32768.0
DP_Color: .long 0 DP_Color: .long 0
DP_Pix: .long 0 DP_Pix: .long 0

View file

@ -32,6 +32,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
extern unsigned int *d_8to32table; extern unsigned int *d_8to32table;
extern cvar_t con_ocranaleds; extern cvar_t con_ocranaleds;
extern cvar_t scr_conalpha;
extern qboolean scr_con_forcedraw;
typedef struct { typedef struct {
vrect_t rect; vrect_t rect;
@ -2016,6 +2018,9 @@ void SWDraw_ConsoleBackground (int lines)
char ver[100]; char ver[100];
static char saveback[320*8]; static char saveback[320*8];
if (!scr_con_forcedraw && scr_conalpha.value <= 0)
return;
conback = (mpic_t *)SWDraw_SafeCachePic ("gfx/conback.lmp"); conback = (mpic_t *)SWDraw_SafeCachePic ("gfx/conback.lmp");
if (!conback) if (!conback)
conback = (mpic_t *)SWDraw_SafeCachePic("pics/conback.pcx"); conback = (mpic_t *)SWDraw_SafeCachePic("pics/conback.pcx");
@ -2054,30 +2059,56 @@ void SWDraw_ConsoleBackground (int lines)
{ {
dest = vid.conbuffer; dest = vid.conbuffer;
for (y=0 ; y<lines ; y++, dest += vid.conrowbytes) if (scr_conalpha.value < 1 && !scr_con_forcedraw)
{ {
D_SetTransLevel(scr_conalpha.value, BM_BLEND);
v = (vid.conheight - lines + y)*200/vid.conheight; for (y=0 ; y<lines ; y++, dest += vid.conrowbytes)
src = conback->data + v*320;
if (vid.conwidth == 320)
memcpy (dest, src, vid.conwidth);
else
{ {
v = (vid.conheight - lines + y)*200/vid.conheight;
src = conback->data + v*320;
f = 0; f = 0;
fstep = 320*0x10000/vid.conwidth; fstep = 320*0x10000/vid.conwidth;
for (x=0 ; x<vid.conwidth ; x+=4) for (x=0 ; x<vid.conwidth ; x+=4)
{ {
dest[x] = src[f>>16]; dest[x] = Trans(dest[x], src[f>>16]);
f += fstep; f += fstep;
dest[x+1] = src[f>>16]; dest[x+1] = Trans(dest[x+1], src[f>>16]);
f += fstep; f += fstep;
dest[x+2] = src[f>>16]; dest[x+2] = Trans(dest[x+2], src[f>>16]);
f += fstep; f += fstep;
dest[x+3] = src[f>>16]; dest[x+3] = Trans(dest[x+3], src[f>>16]);
f += fstep; f += fstep;
} }
} }
} }
else
{
for (y=0 ; y<lines ; y++, dest += vid.conrowbytes)
{
v = (vid.conheight - lines + y)*200/vid.conheight;
src = conback->data + v*320;
if (vid.conwidth == 320)
memcpy (dest, src, vid.conwidth);
else
{
f = 0;
fstep = 320*0x10000/vid.conwidth;
for (x=0 ; x<vid.conwidth ; x+=4)
{
dest[x] = src[f>>16];
f += fstep;
dest[x+1] = src[f>>16];
f += fstep;
dest[x+2] = src[f>>16];
f += fstep;
dest[x+3] = src[f>>16];
f += fstep;
}
}
}
}
} }
else if (r_pixbytes == 2) else if (r_pixbytes == 2)
{ {
@ -2114,8 +2145,11 @@ void SWDraw_ConsoleBackground (int lines)
extern cvar_t d_smooth; extern cvar_t d_smooth;
unsigned int *p24dest; unsigned int *p24dest;
unsigned char *pal = (qbyte *)d_8to32table; unsigned char *pal = (qbyte *)d_8to32table;
int alpha = ((float)(lines)/((vid.height * 3) >> 2))*255; int alpha;
if (alpha > 255) alpha = 255; if (scr_con_forcedraw)
alpha = 255;
else
alpha = bound(0, scr_conalpha.value*255, 255);
p24dest = (unsigned int *)vid.conbuffer; p24dest = (unsigned int *)vid.conbuffer;
dest = (unsigned char *)vid.conbuffer; dest = (unsigned char *)vid.conbuffer;