]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_screen.c
update client color values when new values are recieved from server
[xonotic/darkplaces.git] / cl_screen.c
index 36477292f811612384a0457d7289f1311efc9d9e..bbe0883416bf13f8bf151c775922bce80cc7a84f 100644 (file)
@@ -1,5 +1,6 @@
 
 #include "quakedef.h"
+#include "cl_video.h"
 
 cvar_t scr_viewsize = {CVAR_SAVE, "viewsize","100"};
 cvar_t scr_fov = {CVAR_SAVE, "fov","90"};      // 10 - 170
@@ -479,7 +480,7 @@ void DrawQ_Pic(float x, float y, char *picname, float width, float height, float
        if (alpha < (1.0f / 255.0f))
                return;
        size = sizeof(*dq) + ((strlen(picname) + 1 + 3) & ~3);
-       if (r_refdef.drawqueuesize + size > MAX_DRAWQUEUE)
+       if (r_refdef.drawqueuesize + size > r_refdef.maxdrawqueuesize)
                return;
        red = bound(0, red, 1);
        green = bound(0, green, 1);
@@ -517,7 +518,7 @@ void DrawQ_String(float x, float y, char *string, int maxlen, float scalex, floa
        if (x >= vid.conwidth || y >= vid.conheight || x < (-scalex * maxlen) || y < (-scaley))
                return;
        size = sizeof(*dq) + ((len + 1 + 3) & ~3);
-       if (r_refdef.drawqueuesize + size > MAX_DRAWQUEUE)
+       if (r_refdef.drawqueuesize + size > r_refdef.maxdrawqueuesize)
                return;
        red = bound(0, red, 1);
        green = bound(0, green, 1);
@@ -545,7 +546,7 @@ void DrawQ_Fill (float x, float y, float w, float h, float red, float green, flo
        if (alpha < (1.0f / 255.0f))
                return;
        size = sizeof(*dq) + 4;
-       if (r_refdef.drawqueuesize + size > MAX_DRAWQUEUE)
+       if (r_refdef.drawqueuesize + size > r_refdef.maxdrawqueuesize)
                return;
        red = bound(0, red, 1);
        green = bound(0, green, 1);
@@ -565,34 +566,41 @@ void DrawQ_Fill (float x, float y, float w, float h, float red, float green, flo
        r_refdef.drawqueuesize += dq->size;
 }
 
-//only used for the player color selection menu
-void DrawQ_PicTranslate (int x, int y, char *picname, qbyte *translation)
+void DrawQ_Mesh (drawqueuemesh_t *mesh, int flags)
 {
-       int i, c;
-       unsigned int trans[4096];
-       cachepic_t *pic;
-
-       pic = Draw_CachePic(picname);
-       if (pic == NULL)
-               return;
-
-       c = pic->width * pic->height;
-       if (c > 4096)
-       {
-               Con_Printf("DrawQ_PicTranslate: image larger than 4k buffer\n");
+       int size;
+       void *p;
+       drawqueue_t *dq;
+       drawqueuemesh_t *m;
+       size = sizeof(*dq);
+       size += sizeof(drawqueuemesh_t);
+       size += sizeof(int) * mesh->numindices;
+       size += sizeof(float[3]) * mesh->numvertices;
+       size += sizeof(float[2]) * mesh->numvertices;
+       size += sizeof(float[4]) * mesh->numvertices;
+       if (r_refdef.drawqueuesize + size > r_refdef.maxdrawqueuesize)
                return;
-       }
-
-       for (i = 0;i < c;i++)
-               trans[i] = d_8to24table[translation[menuplyr_pixels[i]]];
-
-       // FIXME: this is renderer stuff?
-       R_UpdateTexture (pic->tex, (qbyte *)trans);
-
-       DrawQ_Pic(x, y, picname, 0, 0, 1, 1, 1, 1, 0);
+       dq = (void *)(r_refdef.drawqueue + r_refdef.drawqueuesize);
+       dq->size = size;
+       dq->command = DRAWQUEUE_MESH;
+       dq->flags = flags;
+       dq->color = 0;
+       dq->x = 0;
+       dq->y = 0;
+       dq->scalex = 0;
+       dq->scaley = 0;
+       p = (void *)(dq + 1);
+       m = p;(qbyte *)p += sizeof(drawqueuemesh_t);
+       m->numindices = mesh->numindices;
+       m->numvertices = mesh->numvertices;
+       m->texture = mesh->texture;
+       m->indices   = p;memcpy(m->indices  , mesh->indices  , m->numindices  * sizeof(int     ));(qbyte *)p += m->numindices  * sizeof(int     );
+       m->vertices  = p;memcpy(m->vertices , mesh->vertices , m->numvertices * sizeof(float[3]));(qbyte *)p += m->numvertices * sizeof(float[3]);
+       m->texcoords = p;memcpy(m->texcoords, mesh->texcoords, m->numvertices * sizeof(float[2]));(qbyte *)p += m->numvertices * sizeof(float[2]);
+       m->colors    = p;memcpy(m->colors   , mesh->colors   , m->numvertices * sizeof(float[4]));(qbyte *)p += m->numvertices * sizeof(float[4]);
+       r_refdef.drawqueuesize += dq->size;
 }
 
-
 /*
 ====================
 CalcFov
@@ -922,7 +930,7 @@ void CL_SetupScreenSize(void)
 
 void CL_UpdateScreen(void)
 {
-       if (!scr_initialized || !con_initialized)
+       if (!scr_initialized || !con_initialized || vid_hidden)
                return;                         // not initialized yet
 
        if (cl_avidemo.integer)
@@ -960,6 +968,8 @@ void CL_UpdateScreen(void)
                SCR_DrawLoading();
        }
 
+       CL_DrawVideo();
+
        R_TimeReport("2d");
 
        // add r_speeds text to queue