From 73adb98f44f142d436db71bdef5a9d3609b7127e Mon Sep 17 00:00:00 2001 From: lordhavoc Date: Tue, 6 Feb 2001 17:26:46 +0000 Subject: [PATCH] better version reports (always mention build number) minor cleanup of qpic system (loading and drawing) minor improvement to lighting engine tweakability (LIGHTSCALE2) minor cleanup to texture tracking (totaltexels now called texeldatasize) r_texturestats texture size reports are now correct (was showing 4x what it should have) r_texturestats report rearranged to put size on the left for easy sorting in console logs cruft removal git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@145 d7cf8633-e32d-0410-b094-e92efae38249 --- gl_draw.c | 182 +++++--------------------------------------------- gl_rsurf.c | 2 +- gl_textures.c | 48 +++++-------- host_cmd.c | 4 +- quakedef.h | 1 + r_light.c | 8 +-- r_light.h | 1 + sv_main.c | 2 +- sys_linux.c | 2 +- 9 files changed, 42 insertions(+), 208 deletions(-) diff --git a/gl_draw.c b/gl_draw.c index 8b0a4378..5a1e715a 100644 --- a/gl_draw.c +++ b/gl_draw.c @@ -23,7 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "quakedef.h" -#define GL_COLOR_INDEX8_EXT 0x80E5 +//#define GL_COLOR_INDEX8_EXT 0x80E5 cvar_t qsg_version = {"qsg_version", "1"}; cvar_t scr_conalpha = {"scr_conalpha", "1"}; @@ -36,88 +36,10 @@ int char_texture; typedef struct { int texnum; - float sl, tl, sh, th; } glpic_t; int conbacktexnum; -/* -============================================================================= - - scrap allocation - - Allocate all the little status bar obejcts into a single texture - to crutch up stupid hardware / drivers - -============================================================================= -*/ - -/* -#define MAX_SCRAPS 2 -#define BLOCK_WIDTH 256 -#define BLOCK_HEIGHT 256 - -int scrap_allocated[MAX_SCRAPS][BLOCK_WIDTH]; -byte scrap_texels[MAX_SCRAPS][BLOCK_WIDTH*BLOCK_HEIGHT*4]; -qboolean scrap_dirty; - -// returns a texture number and the position inside it -int Scrap_AllocBlock (int w, int h, int *x, int *y) -{ - int i, j; - int best, best2; - int texnum; - - for (texnum=0 ; texnum= best) - break; - if (scrap_allocated[texnum][i+j] > best2) - best2 = scrap_allocated[texnum][i+j]; - } - if (j == w) - { // this is a valid spot - *x = i; - *y = best = best2; - } - } - - if (best + h > BLOCK_HEIGHT) - continue; - - for (i=0 ; idata; - // load little ones into the scrap - /* - if (p->width < 64 && p->height < 64) - { - int x, y; - int i, j, k; - int texnum; - - texnum = Scrap_AllocBlock (p->width, p->height, &x, &y); - scrap_dirty = true; - k = 0; - for (i=0 ; iheight ; i++) - for (j=0 ; jwidth ; j++, k++) - scrap_texels[texnum][(y+i)*BLOCK_WIDTH + x + j] = p->data[k]; - if (!scraptexnum[texnum]) - scraptexnum[texnum] = GL_LoadTexture (va("scrapslot%d", texnum), BLOCK_WIDTH, BLOCK_HEIGHT, scrap_texels[texnum], false, true, 1); - gl->texnum = scraptexnum[texnum]; - gl->sl = (x+0.01)/(float)BLOCK_WIDTH; - gl->sh = (x+p->width-0.01)/(float)BLOCK_WIDTH; - gl->tl = (y+0.01)/(float)BLOCK_WIDTH; - gl->th = (y+p->height-0.01)/(float)BLOCK_WIDTH; - - pic_count++; - pic_texels += p->width*p->height; - } - else - { - */ - gl->texnum = GL_LoadPicTexture (p); - gl->sl = 0; - gl->sh = 1; - gl->tl = 0; - gl->th = 1; - //} + gl->texnum = GL_LoadTexture (name, p->width, p->height, p->data, false, true, 1); return p; } @@ -226,11 +113,7 @@ qpic_t *Draw_CachePic (char *path) gl = (glpic_t *)pic->pic.data; gl->texnum = loadtextureimage(path, 0, 0, false, false); if (!gl->texnum) - gl->texnum = GL_LoadPicTexture (dat); - gl->sl = 0; - gl->sh = 1; - gl->tl = 0; - gl->th = 1; + gl->texnum = GL_LoadTexture (path, dat->width, dat->height, dat->data, false, true, 1); qfree(dat); @@ -245,7 +128,6 @@ Draw_Init =============== */ void rmain_registercvars(); -extern int buildnumber; void gl_draw_start() { @@ -265,8 +147,6 @@ void gl_draw_start() conbacktexnum = loadtextureimage("gfx/conback", 0, 0, false, false); -// memset(scraptexnum, 0, sizeof(scraptexnum)); - // get the other pics we need draw_disc = Draw_PicFromWad ("disc"); } @@ -355,8 +235,11 @@ void Draw_Character (int x, int y, int num) glEnd (); // LordHavoc: revert to LINEAR mode - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + if (glwidth < (int) vid.width) + { + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + } } /* @@ -404,8 +287,11 @@ void Draw_String (int x, int y, char *str, int maxlen) glEnd (); // LordHavoc: revert to LINEAR mode - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + if (glwidth < (int) vid.width) + { + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + } } void Draw_GenericPic (int texnum, float red, float green, float blue, float alpha, int x, int y, int width, int height) @@ -429,21 +315,7 @@ Draw_AlphaPic */ void Draw_AlphaPic (int x, int y, qpic_t *pic, float alpha) { - glpic_t *gl; - -// if (scrap_dirty) -// Scrap_Upload (); - gl = (glpic_t *)pic->data; - if (!r_render.value) - return; - glColor4f(1,1,1,alpha); - glBindTexture(GL_TEXTURE_2D, gl->texnum); - glBegin (GL_QUADS); - glTexCoord2f (gl->sl, gl->tl);glVertex2f (x, y); - glTexCoord2f (gl->sh, gl->tl);glVertex2f (x+pic->width, y); - glTexCoord2f (gl->sh, gl->th);glVertex2f (x+pic->width, y+pic->height); - glTexCoord2f (gl->sl, gl->th);glVertex2f (x, y+pic->height); - glEnd (); + Draw_GenericPic(((glpic_t *)pic->data)->texnum, 1,1,1,alpha, x,y,pic->width, pic->height); } @@ -454,21 +326,7 @@ Draw_Pic */ void Draw_Pic (int x, int y, qpic_t *pic) { - glpic_t *gl; - -// if (scrap_dirty) -// Scrap_Upload (); - gl = (glpic_t *)pic->data; - if (!r_render.value) - return; - glColor3f(1,1,1); - glBindTexture(GL_TEXTURE_2D, gl->texnum); - glBegin (GL_QUADS); - glTexCoord2f (gl->sl, gl->tl);glVertex2f (x, y); - glTexCoord2f (gl->sh, gl->tl);glVertex2f (x+pic->width, y); - glTexCoord2f (gl->sh, gl->th);glVertex2f (x+pic->width, y+pic->height); - glTexCoord2f (gl->sl, gl->th);glVertex2f (x, y+pic->height); - glEnd (); + Draw_GenericPic(((glpic_t *)pic->data)->texnum, 1,1,1,1, x,y,pic->width, pic->height); } @@ -496,16 +354,6 @@ void Draw_PicTranslate (int x, int y, qpic_t *pic, byte *translation) if (!r_render.value) return; Draw_GenericPic (c, 1,1,1,1, x, y, pic->width, pic->height); - /* - glBindTexture(GL_TEXTURE_2D, c); - glColor3f(1,1,1); - glBegin (GL_QUADS); - glTexCoord2f (0, 0);glVertex2f (x, y); - glTexCoord2f (1, 0);glVertex2f (x+pic->width, y); - glTexCoord2f (1, 1);glVertex2f (x+pic->width, y+pic->height); - glTexCoord2f (0, 1);glVertex2f (x, y+pic->height); - glEnd (); - */ } diff --git a/gl_rsurf.c b/gl_rsurf.c index 753f5db2..70afc094 100644 --- a/gl_rsurf.c +++ b/gl_rsurf.c @@ -413,7 +413,7 @@ int RSurf_Light(int *dlightbits, glpoly_t *polys) cg = light->color[1]; cb = light->color[2]; radius = light->radius*light->radius*LIGHTSCALE; - radius2 = radius * (256.0f / LIGHTSCALE); + radius2 = radius * (256.0f / LIGHTSCALE2); wv = wvert; for (p = polys;p;p = p->next) { diff --git a/gl_textures.c b/gl_textures.c index e2b6aeaa..8afef82c 100644 --- a/gl_textures.c +++ b/gl_textures.c @@ -17,7 +17,7 @@ int texels; typedef struct { int texnum; - int totaltexels; + int texeldatasize; byte *texels[MAXMIPS]; unsigned short texelsize[MAXMIPS][2]; char identifier[64]; @@ -107,25 +107,26 @@ void GL_TextureStats_Print(char *name, int total, int crc, int mip, int alpha) name = ""; while (name[c] && c < 28) n[c++] = name[c]; - while (c < 28) - n[c++] = ' '; + // no need to pad since the name was moved to last +// while (c < 28) +// n[c++] = ' '; n[c] = 0; - Con_Printf("%s %5i %04X %s %s\n", n, total, crc, mip ? "yes" : "no ", alpha ? "yes " : "no "); + Con_Printf("%5i %04X %s %s %s\n", total, crc, mip ? "yes" : "no ", alpha ? "yes " : "no ", n); } void GL_TextureStats_f(void) { int i, s = 0, sc = 0, t = 0; gltexture_t *glt; - Con_Printf("name kbytes crc mip alpha\n"); + Con_Printf("kbytes crc mip alpha name\n"); for (i = 0, glt = gltextures;i < numgltextures;i++, glt++) { - GL_TextureStats_Print(glt->identifier, ((glt->totaltexels * 4) + 512) >> 10, glt->crc, glt->mipmap, glt->alpha); - t += glt->totaltexels; + GL_TextureStats_Print(glt->identifier, (glt->texeldatasize + 512) >> 10, glt->crc, glt->mipmap, glt->alpha); + t += glt->texeldatasize; if (glt->identifier[0] == '&') { sc++; - s += glt->totaltexels; + s += glt->texeldatasize; } } Con_Printf("%i textures, totalling %.3fMB, %i are (usually) unnecessary model skins totalling %.3fMB\n", numgltextures, t / 1048576.0, sc, s / 1048576.0); @@ -137,18 +138,16 @@ void GL_TextureStats_PrintTotal(void) gltexture_t *glt; for (i = 0, glt = gltextures;i < numgltextures;i++, glt++) { - t += glt->totaltexels; + t += glt->texeldatasize; if (glt->identifier[0] == '&') { sc++; - s += glt->totaltexels; + s += glt->texeldatasize; } } Con_Printf("%i textures, totalling %.3fMB, %i are (usually) unnecessary model skins totalling %.3fMB\n", numgltextures, t / 1048576.0, sc, s / 1048576.0); } -extern int buildnumber; - char engineversion[40]; void GL_UploadTexture (gltexture_t *glt); @@ -332,7 +331,7 @@ void GL_FreeTexels(gltexture_t *glt) void GL_AllocTexels(gltexture_t *glt, int width, int height, int mipmapped) { - int i, w, h, size, done; + int i, w, h, size; if (glt->texels[0]) GL_FreeTexels(glt); glt->texelsize[0][0] = width; @@ -342,12 +341,11 @@ void GL_AllocTexels(gltexture_t *glt, int width, int height, int mipmapped) size = 0; w = width;h = height; i = 0; - done = false; - for (i = 0;i < MAXMIPS;i++) + while (i < MAXMIPS) { glt->texelsize[i][0] = w; glt->texelsize[i][1] = h; - glt->texels[i] = (void *)size; + glt->texels[i++] = (void *)size; size += w*h*4; if (w > 1) { @@ -358,12 +356,9 @@ void GL_AllocTexels(gltexture_t *glt, int width, int height, int mipmapped) else if (h > 1) h >>= 1; else - { - i++; break; - } } - glt->totaltexels = size; + glt->texeldatasize = size; while (i < MAXMIPS) glt->texels[i++] = NULL; glt->texels[0] = qmalloc(size); @@ -373,7 +368,7 @@ void GL_AllocTexels(gltexture_t *glt, int width, int height, int mipmapped) else { size = width*height*4; - glt->totaltexels = size; + glt->texeldatasize = size; glt->texels[0] = qmalloc(size); for (i = 1;i < MAXMIPS;i++) glt->texels[i] = NULL; @@ -503,7 +498,6 @@ int GL_LoadTexture (char *identifier, int width, int height, byte *data, qboolea { Con_DPrintf("GL_LoadTexture: cache mismatch, replacing old texture\n"); goto GL_LoadTexture_setup; // drop out with glt pointing to the texture to replace - //Sys_Error ("GL_LoadTexture: cache mismatch"); } if ((gl_lerpimages.value != 0) != glt->lerped) goto GL_LoadTexture_setup; // drop out with glt pointing to the texture to replace @@ -624,16 +618,6 @@ GL_LoadTexture_setup: return glt->texnum; } -/* -================ -GL_LoadPicTexture -================ -*/ -int GL_LoadPicTexture (qpic_t *pic) -{ - return GL_LoadTexture ("", pic->width, pic->height, pic->data, false, true, 1); -} - int GL_GetTextureSlots (int count) { gltexture_t *glt, *first; diff --git a/host_cmd.c b/host_cmd.c index 5051ed0e..f757184a 100644 --- a/host_cmd.c +++ b/host_cmd.c @@ -80,7 +80,7 @@ void Host_Status_f (void) print = SV_ClientPrintf; print ("host: %s\n", Cvar_VariableString ("hostname")); - print ("version: %4.2f\n", VERSION); + print ("version: %4.2f (build %i)\n", VERSION, buildnumber); if (tcpipAvailable) print ("tcp/ip: %s\n", my_tcpip_address); if (ipxAvailable) @@ -708,7 +708,7 @@ void Host_Name_f (void) void Host_Version_f (void) { - Con_Printf ("Version %4.2f\n", VERSION); + Con_Printf ("Version %4.2f (build %i)\n", VERSION, buildnumber); Con_Printf ("Exe: "__TIME__" "__DATE__"\n"); } diff --git a/quakedef.h b/quakedef.h index 7f274b77..e49cc204 100644 --- a/quakedef.h +++ b/quakedef.h @@ -22,6 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define QUAKE_GAME // as opposed to utilities #define VERSION 1.50 +extern int buildnumber; #ifndef FALSE #define FALSE 0 diff --git a/r_light.c b/r_light.c index 63dfe266..04504d21 100644 --- a/r_light.c +++ b/r_light.c @@ -579,7 +579,7 @@ void R_DynamicLightPoint(vec3_t color, vec3_t org, int *dlightbits) r = cl_dlights[k].radius*cl_dlights[k].radius*LIGHTSCALE; if (f < r) { - brightness = r * 16.0f / f; + brightness = r * (256.0f / LIGHTSCALE2) / f; color[0] += brightness * cl_dlights[k].color[0]; color[1] += brightness * cl_dlights[k].color[1]; color[2] += brightness * cl_dlights[k].color[2]; @@ -608,7 +608,7 @@ void R_DynamicLightPointNoMask(vec3_t color, vec3_t org) r = cl_dlights[i].radius*cl_dlights[i].radius*LIGHTSCALE; if (f < r) { - brightness = r * 16.0f / f; + brightness = r * (256.0f / LIGHTSCALE2) / f; if (cl_dlights[i].dark) brightness = -brightness; color[0] += brightness * cl_dlights[i].color[0]; @@ -701,7 +701,7 @@ void R_LightModel(int numverts, vec3_t center, vec3_t basecolor) nearlight[nearlights].color[0] = cl_dlights[i].color[0] * cl_dlights[i].radius * cl_dlights[i].radius * mod[0]; nearlight[nearlights].color[1] = cl_dlights[i].color[1] * cl_dlights[i].radius * cl_dlights[i].radius * mod[1]; nearlight[nearlights].color[2] = cl_dlights[i].color[2] * cl_dlights[i].radius * cl_dlights[i].radius * mod[2]; - t1 = (128.0f / LIGHTSCALE) / t2; + t1 = (128.0f / LIGHTSCALE2) / t2; basecolor[0] += nearlight[nearlights].color[0] * t1; basecolor[1] += nearlight[nearlights].color[1] * t1; basecolor[2] += nearlight[nearlights].color[2] * t1; @@ -728,7 +728,7 @@ void R_LightModel(int numverts, vec3_t center, vec3_t basecolor) dist[0] = cl_dlights[i].color[0] * cl_dlights[i].radius * cl_dlights[i].radius * mod[0]; dist[1] = cl_dlights[i].color[1] * cl_dlights[i].radius * cl_dlights[i].radius * mod[1]; dist[2] = cl_dlights[i].color[2] * cl_dlights[i].radius * cl_dlights[i].radius * mod[2]; - t1 = (192.0f / LIGHTSCALE) / t2; + t1 = (224.0f / LIGHTSCALE2) / t2; basecolor[0] += dist[0] * t1; basecolor[1] += dist[1] * t1; basecolor[2] += dist[2] * t1; diff --git a/r_light.h b/r_light.h index b52a4cdc..bd8167be 100644 --- a/r_light.h +++ b/r_light.h @@ -15,3 +15,4 @@ typedef struct // LordHavoc: this affects the lighting scale of the whole game #define LIGHTOFFSET 16384.0f #define LIGHTSCALE 4.0f +#define LIGHTSCALE2 4.0f diff --git a/sv_main.c b/sv_main.c index 4514e973..27ed2e5b 100644 --- a/sv_main.c +++ b/sv_main.c @@ -192,7 +192,7 @@ void SV_SendServerinfo (client_t *client) char message[2048]; MSG_WriteByte (&client->message, svc_print); - sprintf (message, "%c\nDARKPLACES VERSION %4.2f SERVER (%i CRC)", 2, VERSION, pr_crc); + sprintf (message, "%c\nDARKPLACES VERSION %4.2f BUILD %i SERVER (%i CRC)", 2, VERSION, buildnumber, pr_crc); MSG_WriteString (&client->message,message); MSG_WriteByte (&client->message, svc_serverinfo); diff --git a/sys_linux.c b/sys_linux.c index fd1e5365..c5b9b135 100644 --- a/sys_linux.c +++ b/sys_linux.c @@ -438,7 +438,7 @@ int main (int c, char **v) else { fcntl(0, F_SETFL, fcntl (0, F_GETFL, 0) | FNDELAY); - printf ("Linux DarkPlaces -- Version %0.3f\n", VERSION); + printf ("Linux DarkPlaces -- Version %0.3f (build %i)\n", VERSION, buildnumber); } oldtime = Sys_FloatTime () - 0.1; -- 2.39.2