From 8a237169c3116437b4a98258f7969048313bb0f5 Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Fri, 7 May 2004 03:54:35 +0000 Subject: [PATCH] patches to allow for multiple view ports --- include/QF/draw.h | 1 + libs/video/renderer/gl/gl_draw.c | 5 +++ libs/video/renderer/gl/gl_rmain.c | 2 ++ libs/video/renderer/gl/gl_screen.c | 4 ++- libs/video/renderer/r_screen.c | 8 ++--- nq/source/cl_view.c | 1 + qw/source/cl_view.c | 1 + qw/source/sv_demo.c | 57 ++++++++++++++---------------- 8 files changed, 44 insertions(+), 35 deletions(-) diff --git a/include/QF/draw.h b/include/QF/draw.h index 67ee46fce..e05d52027 100644 --- a/include/QF/draw.h +++ b/include/QF/draw.h @@ -59,6 +59,7 @@ qpic_t *Draw_CachePic (const char *path, qboolean alpha); void Draw_ClearCache (void); void GL_Set2D (void); +void GL_DrawReset (void); void GL_FlushText (void); #endif // _DRAW_H diff --git a/libs/video/renderer/gl/gl_draw.c b/libs/video/renderer/gl/gl_draw.c index f2b1cf8aa..a5f2f6096 100644 --- a/libs/video/renderer/gl/gl_draw.c +++ b/libs/video/renderer/gl/gl_draw.c @@ -899,6 +899,11 @@ GL_Set2D (void) qfglEnableClientState (GL_TEXTURE_COORD_ARRAY); qfglTexCoordPointer (2, GL_FLOAT, 0, textCoords); qfglDisableClientState (GL_COLOR_ARRAY); +} + +void +GL_DrawReset (void) +{ tVAcount = 0; tV = textVertices; tC = textCoords; diff --git a/libs/video/renderer/gl/gl_rmain.c b/libs/video/renderer/gl/gl_rmain.c index 2ed5f8900..f5d16f3fc 100644 --- a/libs/video/renderer/gl/gl_rmain.c +++ b/libs/video/renderer/gl/gl_rmain.c @@ -44,6 +44,7 @@ static __attribute__ ((unused)) const char rcsid[] = #include "QF/console.h" #include "QF/cvar.h" +#include "QF/draw.h" #include "QF/locs.h" #include "QF/mathlib.h" #include "QF/qargs.h" @@ -672,6 +673,7 @@ R_RenderView (void) R_RenderView_ (); else R_RenderViewFishEye (); + GL_Set2D (); } #define BOX_FRONT 0 diff --git a/libs/video/renderer/gl/gl_screen.c b/libs/video/renderer/gl/gl_screen.c index be25287bd..0d7d9f46e 100644 --- a/libs/video/renderer/gl/gl_screen.c +++ b/libs/video/renderer/gl/gl_screen.c @@ -231,7 +231,9 @@ SCR_UpdateScreen (double realtime, SCR_Func *scr_funcs) V_RenderView (); SCR_SetUpToDrawConsole (); - GL_Set2D (); + if (!r_worldentity.model) + GL_Set2D (); + GL_DrawReset (); // also makes polyblend apply to whole screen if (v_blend[3]) { diff --git a/libs/video/renderer/r_screen.c b/libs/video/renderer/r_screen.c index f7082c8f0..803d1afbc 100644 --- a/libs/video/renderer/r_screen.c +++ b/libs/video/renderer/r_screen.c @@ -169,17 +169,17 @@ SCR_CalcRefdef (void) // bound field of view Cvar_SetValue (scr_fov, bound (1, scr_fov->value, 170)); - r_refdef.fov_x = scr_fov->value; - r_refdef.fov_y = - CalcFov (r_refdef.fov_x, r_refdef.vrect.width, r_refdef.vrect.height); - vrect.x = 0; vrect.y = 0; vrect.width = vid.width; vrect.height = vid.height; R_SetVrect (&vrect, &scr_vrect, r_lineadj); + r_refdef.vrect = scr_vrect; + r_refdef.fov_x = scr_fov->value; + r_refdef.fov_y = + CalcFov (r_refdef.fov_x, r_refdef.vrect.width, r_refdef.vrect.height); // notify the refresh of the change R_ViewChanged (vid.aspect); diff --git a/nq/source/cl_view.c b/nq/source/cl_view.c index 175d592aa..ca1048ab5 100644 --- a/nq/source/cl_view.c +++ b/nq/source/cl_view.c @@ -704,6 +704,7 @@ V_CalcRefdef (void) void V_RenderView (void) { + r_worldentity.model = cl.worldmodel; if (!cl.worldmodel || cls.signon != SIGNONS) return; diff --git a/qw/source/cl_view.c b/qw/source/cl_view.c index c8d62be26..2df6fa001 100644 --- a/qw/source/cl_view.c +++ b/qw/source/cl_view.c @@ -717,6 +717,7 @@ V_RenderView (void) { cl.simangles[ROLL] = 0; // FIXME @@@ + r_worldentity.model = cl.worldmodel; if (cls.state != ca_active) return; diff --git a/qw/source/sv_demo.c b/qw/source/sv_demo.c index fca86bd05..951cf19de 100644 --- a/qw/source/sv_demo.c +++ b/qw/source/sv_demo.c @@ -57,9 +57,9 @@ demo_t demo; #define MIN_DEMO_MEMORY 0x100000 #define USACACHE (sv_demoUseCache->int_val && svs.demomemsize) #define DWRITE(a,b,d) dwrite((QFile *) d, a, b) -#define MAXSIZE (demobuffer->end < demobuffer->last ? \ - demobuffer->start - demobuffer->end : \ - demobuffer->maxsize - demobuffer->end) +#define MAXSIZE (demo.dbuffer.end < demo.dbuffer.last ? \ + demo.dbuffer.start - demo.dbuffer.end : \ + demo.dbuffer.maxsize - demo.dbuffer.end) static int demo_max_size; static int demo_size; @@ -80,7 +80,6 @@ cvar_t *serverdemo; int (*dwrite) (QFile * file, const void *buf, int count); -static dbuffer_t *demobuffer; static int header = (int) &((header_t *) 0)->data; entity_state_t demo_entities[UPDATE_MASK + 1][MAX_DEMO_PACKET_ENTITIES]; @@ -173,7 +172,7 @@ SV_DemoWriteToDisk (int type, int to, float time) demo.dbuf->h = NULL; oldm = demo.dbuf->bufsize; - oldd = demobuffer->start; + oldd = demo.dbuffer.start; while (pos < demo.dbuf->bufsize) { size = p->size; pos += header + size; @@ -195,20 +194,20 @@ SV_DemoWriteToDisk (int type, int to, float time) demo.dbuf->sz.data += size + header; pos -= size + header; demo.dbuf->sz.maxsize -= size + header; - demobuffer->start += size + header; + demo.dbuffer.start += size + header; } // move along p = (header_t *) (p->data + size); } - if (demobuffer->start == demobuffer->last) { - if (demobuffer->start == demobuffer->end) { - demobuffer->end = 0; // demobuffer is empty - demo.dbuf->sz.data = demobuffer->data; + if (demo.dbuffer.start == demo.dbuffer.last) { + if (demo.dbuffer.start == demo.dbuffer.end) { + demo.dbuffer.end = 0; // demo.dbuffer is empty + demo.dbuf->sz.data = demo.dbuffer.data; } // go back to begining of the buffer - demobuffer->last = demobuffer->end; - demobuffer->start = 0; + demo.dbuffer.last = demo.dbuffer.end; + demo.dbuffer.start = 0; } } @@ -270,7 +269,7 @@ SV_DemoWritePackets (int num) // find two frames // one before the exact time (time - msec) and one after, - // then we can interpolte exact position for current frame + // then we can interpolate exact position for current frame for (i = 0, cl = frame->clients, demoinfo = demo.info; i < MAX_CLIENTS; i++, cl++, demoinfo++) { if (cl->parsecount != demo.lastwritten) @@ -433,7 +432,7 @@ DemoSetBuf (byte type, int to) demo.dbuf->bufsize += header; demo.dbuf->sz.cursize = demo.dbuf->bufsize; - demobuffer->end += header; + demo.dbuffer.end += header; demo.dbuf->h = p; } @@ -442,12 +441,12 @@ DemoMoveBuf (void) { // set the last message mark to the previous frame (i/e begining of this // one) - demobuffer->last = demobuffer->end - demo.dbuf->bufsize; + demo.dbuffer.last = demo.dbuffer.end - demo.dbuf->bufsize; // move buffer to the begining of demo buffer - memmove (demobuffer->data, demo.dbuf->sz.data, demo.dbuf->bufsize); - demo.dbuf->sz.data = demobuffer->data; - demobuffer->end = demo.dbuf->bufsize; + memmove (demo.dbuffer.data, demo.dbuf->sz.data, demo.dbuf->bufsize); + demo.dbuf->sz.data = demo.dbuffer.data; + demo.dbuffer.end = demo.dbuf->bufsize; demo.dbuf->h = NULL; // it will be setup again demo.dbuf->sz.maxsize = MAXSIZE + demo.dbuf->bufsize; } @@ -461,11 +460,11 @@ DemoWrite_Begin (byte type, int to, int size) // will it fit? while (demo.dbuf->bufsize + size + header > demo.dbuf->sz.maxsize) { // if we reached the end of buffer move msgbuf to the begining - if (!move && demobuffer->end > demobuffer->start) + if (!move && demo.dbuffer.end > demo.dbuffer.start) move = true; SV_DemoWritePackets (1); - if (move && demobuffer->start > demo.dbuf->bufsize + header + size) + if (move && demo.dbuffer.start > demo.dbuf->bufsize + header + size) DemoMoveBuf (); } @@ -486,8 +485,8 @@ DemoWrite_Begin (byte type, int to, int size) demo.dbuf->bufsize += size; demo.dbuf->h->size += size; - if ((demobuffer->end += size) > demobuffer->last) - demobuffer->last = demobuffer->end; + if ((demo.dbuffer.end += size) > demo.dbuffer.last) + demo.dbuffer.last = demo.dbuffer.end; } /* @@ -616,13 +615,11 @@ SV_DemoPings (void) static void DemoBuffer_Init (dbuffer_t *dbuffer, byte *buf, size_t size) { - demobuffer = dbuffer; - - demobuffer->data = buf; - demobuffer->maxsize = size; - demobuffer->start = 0; - demobuffer->end = 0; - demobuffer->last = 0; + dbuffer->data = buf; + dbuffer->maxsize = size; + dbuffer->start = 0; + dbuffer->end = 0; + dbuffer->last = 0; } /* @@ -642,7 +639,7 @@ DemoSetMsgBuf (demobuf_t *prev, demobuf_t *cur) demo.dbuf = cur; memset (demo.dbuf, 0, sizeof (*demo.dbuf)); - demo.dbuf->sz.data = demobuffer->data + demobuffer->end; + demo.dbuf->sz.data = demo.dbuffer.data + demo.dbuffer.end; demo.dbuf->sz.maxsize = MAXSIZE; }