X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=gl_draw.c;h=f618099724e9c68bfe6df50a66c8e1765254ef13;hb=c08148da33d6cb6c6d4b73d03f06eb9a89995f33;hp=59603aa29a9d50c14d3d5359f975ca9a0ead5ea2;hpb=6824d8ddc8a43cae0609be5bbe8bee01fa1a4225;p=xonotic%2Fdarkplaces.git diff --git a/gl_draw.c b/gl_draw.c index 59603aa2..f6180997 100644 --- a/gl_draw.c +++ b/gl_draw.c @@ -26,12 +26,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. static rtexture_t *char_texture; +cachepic_t *r_crosshairs[NUMCROSSHAIRS]; //============================================================================= /* Support Routines */ #define FONT_FILESIZE 13468 -#define MAX_CACHED_PICS 256 +#define MAX_CACHED_PICS 1024 #define CACHEPICHASHSIZE 256 static cachepic_t *cachepichash[CACHEPICHASHSIZE]; static cachepic_t cachepics[MAX_CACHED_PICS]; @@ -50,9 +51,7 @@ static rtexture_t *draw_generateconchars(void) unsigned char buffer[65536][4], *data = NULL; double random; - fs_filesize = FONT_FILESIZE; - data = LoadTGA (concharimage, 256, 256); - fs_filesize = -1; + data = LoadTGA (concharimage, FONT_FILESIZE, 256, 256); // Gold numbers for (i = 0;i < 8192;i++) { @@ -141,9 +140,6 @@ static rtexture_t *draw_generatemousepointer(void) return R_LoadTexture2D(drawtexturepool, "mousepointer", 16, 16, &buffer[0][0], TEXTYPE_RGBA, TEXF_ALPHA | TEXF_PRECACHE, NULL); } -// must match NUMCROSSHAIRS in r_crosshairs.c -#define NUMCROSSHAIRS 6 - static char *crosshairtexdata[NUMCROSSHAIRS] = { "................" @@ -305,17 +301,16 @@ Draw_CachePic // FIXME: move this to client somehow cachepic_t *Draw_CachePic (const char *path, qboolean persistent) { - int i, crc, hashkey; + int crc, hashkey; cachepic_t *pic; qpic_t *p; int flags; if (!strncmp(CLVIDEOPREFIX, path, sizeof(CLVIDEOPREFIX) - 1)) - { clvideo_t *video; - video = CL_GetVideo(path); + video = CL_GetVideoByName(path); if( video ) return &video->cpif; } @@ -328,7 +323,7 @@ cachepic_t *Draw_CachePic (const char *path, qboolean persistent) if (numcachepics == MAX_CACHED_PICS) { - Con_Printf ("Draw_CachePic: numcachepics == MAX_CACHED_PICS"); + Con_Printf ("Draw_CachePic: numcachepics == MAX_CACHED_PICS\n"); // FIXME: support NULL in callers? return cachepics; // return the first one } @@ -341,7 +336,7 @@ cachepic_t *Draw_CachePic (const char *path, qboolean persistent) flags = TEXF_ALPHA; if (persistent) flags |= TEXF_PRECACHE; - if (!strcmp(path, "gfx/colorcontrol/ditherpattern.tga")) + if (!strcmp(path, "gfx/colorcontrol/ditherpattern")) flags |= TEXF_CLAMP; // load the pic from disk @@ -355,38 +350,33 @@ cachepic_t *Draw_CachePic (const char *path, qboolean persistent) { if (!strcmp(path, "gfx/conchars")) { - unsigned char *pix; - // conchars is a raw image and with the wrong transparent color - pix = (unsigned char *)p; - for (i = 0;i < 128 * 128;i++) - if (pix[i] == 0) - pix[i] = 255; - pic->tex = R_LoadTexture2D(drawtexturepool, path, 128, 128, pix, TEXTYPE_PALETTE, flags, palette_complete); + // conchars is a raw image and with color 0 as transparent instead of 255 + pic->tex = R_LoadTexture2D(drawtexturepool, path, 128, 128, (unsigned char *)p, TEXTYPE_PALETTE, flags, palette_font); } else - pic->tex = R_LoadTexture2D(drawtexturepool, path, p->width, p->height, p->data, TEXTYPE_PALETTE, flags, palette_complete); + pic->tex = R_LoadTexture2D(drawtexturepool, path, p->width, p->height, p->data, TEXTYPE_PALETTE, flags, palette_transparent); } } if (pic->tex == NULL && !strcmp(path, "gfx/conchars")) pic->tex = draw_generateconchars(); - if (pic->tex == NULL && !strcmp(path, "ui/mousepointer.tga")) + if (pic->tex == NULL && !strcmp(path, "ui/mousepointer")) pic->tex = draw_generatemousepointer(); - if (pic->tex == NULL && !strcmp(path, "gfx/prydoncursor001.tga")) + if (pic->tex == NULL && !strcmp(path, "gfx/prydoncursor001")) pic->tex = draw_generatemousepointer(); - if (pic->tex == NULL && !strcmp(path, "gfx/crosshair1.tga")) + if (pic->tex == NULL && !strcmp(path, "gfx/crosshair1")) pic->tex = draw_generatecrosshair(0); - if (pic->tex == NULL && !strcmp(path, "gfx/crosshair2.tga")) + if (pic->tex == NULL && !strcmp(path, "gfx/crosshair2")) pic->tex = draw_generatecrosshair(1); - if (pic->tex == NULL && !strcmp(path, "gfx/crosshair3.tga")) + if (pic->tex == NULL && !strcmp(path, "gfx/crosshair3")) pic->tex = draw_generatecrosshair(2); - if (pic->tex == NULL && !strcmp(path, "gfx/crosshair4.tga")) + if (pic->tex == NULL && !strcmp(path, "gfx/crosshair4")) pic->tex = draw_generatecrosshair(3); - if (pic->tex == NULL && !strcmp(path, "gfx/crosshair5.tga")) + if (pic->tex == NULL && !strcmp(path, "gfx/crosshair5")) pic->tex = draw_generatecrosshair(4); - if (pic->tex == NULL && !strcmp(path, "gfx/crosshair6.tga")) + if (pic->tex == NULL && !strcmp(path, "gfx/crosshair6")) pic->tex = draw_generatecrosshair(5); - if (pic->tex == NULL && !strcmp(path, "gfx/colorcontrol/ditherpattern.tga")) + if (pic->tex == NULL && !strcmp(path, "gfx/colorcontrol/ditherpattern")) pic->tex = draw_generateditherpattern(); if (pic->tex == NULL) { @@ -424,7 +414,7 @@ cachepic_t *Draw_NewPic(const char *picname, int width, int height, int alpha, u { if (numcachepics == MAX_CACHED_PICS) { - Con_Printf ("Draw_NewPic: numcachepics == MAX_CACHED_PICS"); + Con_Printf ("Draw_NewPic: numcachepics == MAX_CACHED_PICS\n"); // FIXME: support NULL in callers? return cachepics; // return the first one } @@ -471,12 +461,15 @@ Draw_Init */ static void gl_draw_start(void) { + int i; drawtexturepool = R_AllocTexturePool(); numcachepics = 0; memset(cachepichash, 0, sizeof(cachepichash)); char_texture = Draw_CachePic("gfx/conchars", true)->tex; + for (i = 0;i < NUMCROSSHAIRS;i++) + r_crosshairs[i] = Draw_CachePic(va("gfx/crosshair%i", i), false); } static void gl_draw_shutdown(void) @@ -537,15 +530,13 @@ void R_DrawQueue(void) r_view_x = bound(0, r_refdef.x, vid.width - r_refdef.width); r_view_y = bound(0, r_refdef.y, vid.height - r_refdef.height); r_view_z = 0; - r_view_fov_x = bound(0.1, r_refdef.fov_x, 170); - r_view_fov_y = bound(0.1, r_refdef.fov_y, 170); r_view_matrix = r_refdef.viewentitymatrix; GL_ColorMask(r_refdef.colormask[0], r_refdef.colormask[1], r_refdef.colormask[2], 1); qglViewport(r_view_x, vid.height - (r_view_y + r_view_height), r_view_width, r_view_height); GL_SetupView_Mode_Ortho(0, 0, vid_conwidth.integer, vid_conheight.integer, -10, 100); qglDepthFunc(GL_LEQUAL); - R_Mesh_Matrix(&r_identitymatrix); + R_Mesh_Matrix(&identitymatrix); chartexnum = R_GetTexture(char_texture); @@ -666,6 +657,17 @@ void R_DrawQueue(void) case DRAWQUEUE_RESETCLIP: GL_ScissorTest(false); break; + case DRAWQUEUE_LINEWIDTH: + qglLineWidth(x); + break; + case DRAWQUEUE_LINES: + mesh = (drawqueuemesh_t *)(dq + 1); + GL_Color(c[0], c[1], c[2], c[3]); + qglBegin(GL_LINE_LOOP); + for (num = 0;num < mesh->num_vertices;num++) + qglVertex2f(mesh->data_vertex3f[num*3+0], mesh->data_vertex3f[num*3+1]); + qglEnd(); + break; } }