X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=gl_draw.c;h=d6879c8b6f6fc27d6552bf551ea5ea470b6a306a;hb=aa33d8f8642530f7f266d6cde1422f95aa74b2be;hp=5c1fe52cea3a2bd1def73a7f64ada100c38a34d9;hpb=fcdba793fd4de548112e84b01c80513a99c91ef8;p=xonotic%2Fdarkplaces.git diff --git a/gl_draw.c b/gl_draw.c index 5c1fe52c..d6879c8b 100644 --- a/gl_draw.c +++ b/gl_draw.c @@ -30,6 +30,7 @@ static rtexture_t *char_texture; //============================================================================= /* Support Routines */ +#define FONT_FILESIZE 13468 #define MAX_CACHED_PICS 256 #define CACHEPICHASHSIZE 256 static cachepic_t *cachepichash[CACHEPICHASHSIZE]; @@ -38,20 +39,18 @@ static int numcachepics; static rtexturepool_t *drawtexturepool; -static qbyte concharimage[13396] = +static qbyte concharimage[FONT_FILESIZE] = { #include "lhfont.h" }; -extern qbyte *LoadTGA (qbyte *f, int matchwidth, int matchheight); - static rtexture_t *draw_generateconchars(void) { int i; qbyte buffer[65536][4], *data = NULL; double random; - fs_filesize = 13396; + fs_filesize = FONT_FILESIZE; data = LoadTGA (concharimage, 256, 256); fs_filesize = -1; // Gold numbers @@ -91,12 +90,15 @@ static rtexture_t *draw_generateconchars(void) buffer[i][3] = data[i*4+0]; } +#if 0 + Image_WriteTGARGBA ("gfx/generated_conchars.tga", 256, 256, &buffer[0][0]); +#endif + Mem_Free(data); return R_LoadTexture2D(drawtexturepool, "conchars", 256, 256, &buffer[0][0], TEXTYPE_RGBA, TEXF_ALPHA | TEXF_PRECACHE, NULL); } -static qbyte pointerimage[256] = -{ +static char *pointerimage = "333333332......." "26777761........" "2655541........." @@ -113,7 +115,7 @@ static qbyte pointerimage[256] = "................" "................" "................" -}; +; static rtexture_t *draw_generatemousepointer(void) { @@ -140,9 +142,9 @@ static rtexture_t *draw_generatemousepointer(void) } // must match NUMCROSSHAIRS in r_crosshairs.c -#define NUMCROSSHAIRS 5 +#define NUMCROSSHAIRS 6 -static qbyte *crosshairtexdata[NUMCROSSHAIRS] = +static char *crosshairtexdata[NUMCROSSHAIRS] = { "................" "................" @@ -190,10 +192,10 @@ static qbyte *crosshairtexdata[NUMCROSSHAIRS] = ".......44......." ".......44......." "................" + "................" ".......77......." ".......77......." "................" - "................" , "................" "................" @@ -209,7 +211,7 @@ static qbyte *crosshairtexdata[NUMCROSSHAIRS] = "........7......." "........7......." "........7......." - "................" + "........7......." "................" , "................" @@ -228,6 +230,23 @@ static qbyte *crosshairtexdata[NUMCROSSHAIRS] = "................" "................" "................" + , + "................" + "................" + "................" + "................" + "................" + "................" + "................" + ".......55......." + ".......55......." + "................" + "................" + "................" + "................" + "................" + "................" + "................" }; static rtexture_t *draw_generatecrosshair(int num) @@ -291,7 +310,9 @@ cachepic_t *Draw_CachePic (const char *path, qboolean persistent) qpic_t *p; int flags; - if (!strncmp(CLVIDEOPREFIX, path, sizeof(CLVIDEOPREFIX) - 1)) { + if (!strncmp(CLVIDEOPREFIX, path, sizeof(CLVIDEOPREFIX) - 1)) + + { clvideo_t *video; video = CL_GetVideo(path); @@ -299,14 +320,18 @@ cachepic_t *Draw_CachePic (const char *path, qboolean persistent) return &video->cpif; } - crc = CRC_Block(path, strlen(path)); + crc = CRC_Block((qbyte *)path, strlen(path)); hashkey = ((crc >> 8) ^ crc) % CACHEPICHASHSIZE; for (pic = cachepichash[hashkey];pic;pic = pic->chain) if (!strcmp (path, pic->name)) return pic; if (numcachepics == MAX_CACHED_PICS) - Sys_Error ("numcachepics == MAX_CACHED_PICS"); + { + Con_Printf ("Draw_CachePic: numcachepics == MAX_CACHED_PICS"); + // FIXME: support NULL in callers? + return cachepics; // return the first one + } pic = cachepics + (numcachepics++); strlcpy (pic->name, path, sizeof(pic->name)); // link into list @@ -326,7 +351,7 @@ cachepic_t *Draw_CachePic (const char *path, qboolean persistent) // compatibility with older versions pic->tex = loadtextureimage(drawtexturepool, path + 4, 0, 0, false, flags); // failed to find gfx/whatever.tga or similar, try the wad - if (pic->tex == NULL && (p = W_GetLumpName (path + 4))) + if (pic->tex == NULL && (p = (qpic_t *)W_GetLumpName (path + 4))) { if (!strcmp(path, "gfx/conchars")) { @@ -359,6 +384,8 @@ cachepic_t *Draw_CachePic (const char *path, qboolean persistent) pic->tex = draw_generatecrosshair(3); if (pic->tex == NULL && !strcmp(path, "gfx/crosshair5.tga")) pic->tex = draw_generatecrosshair(4); + if (pic->tex == NULL && !strcmp(path, "gfx/crosshair6.tga")) + pic->tex = draw_generatecrosshair(5); if (pic->tex == NULL && !strcmp(path, "gfx/colorcontrol/ditherpattern.tga")) pic->tex = draw_generateditherpattern(); if (pic->tex == NULL) @@ -377,7 +404,7 @@ cachepic_t *Draw_NewPic(const char *picname, int width, int height, int alpha, q int crc, hashkey; cachepic_t *pic; - crc = CRC_Block(picname, strlen(picname)); + crc = CRC_Block((qbyte *)picname, strlen(picname)); hashkey = ((crc >> 8) ^ crc) % CACHEPICHASHSIZE; for (pic = cachepichash[hashkey];pic;pic = pic->chain) if (!strcmp (picname, pic->name)) @@ -396,7 +423,11 @@ cachepic_t *Draw_NewPic(const char *picname, int width, int height, int alpha, q if (pic == NULL) { if (numcachepics == MAX_CACHED_PICS) - Sys_Error ("numcachepics == MAX_CACHED_PICS"); + { + Con_Printf ("Draw_NewPic: numcachepics == MAX_CACHED_PICS"); + // FIXME: support NULL in callers? + return cachepics; // return the first one + } pic = cachepics + (numcachepics++); strcpy (pic->name, picname); // link into list @@ -419,7 +450,7 @@ void Draw_FreePic(const char *picname) int hashkey; cachepic_t *pic; // this doesn't really free the pic, but does free it's texture - crc = CRC_Block(picname, strlen(picname)); + crc = CRC_Block((qbyte *)picname, strlen(picname)); hashkey = ((crc >> 8) ^ crc) % CACHEPICHASHSIZE; for (pic = cachepichash[hashkey];pic;pic = pic->chain) { @@ -605,7 +636,7 @@ void R_DrawQueue(void) } break; case DRAWQUEUE_MESH: - mesh = (void *)(dq + 1); + mesh = (drawqueuemesh_t *)(dq + 1); m.pointer_vertex = mesh->data_vertex3f; m.pointer_color = mesh->data_color4f; m.pointer_texcoord[0] = mesh->data_texcoord2f;