patches to allow for multiple view ports

This commit is contained in:
Bill Currie 2004-05-07 03:54:35 +00:00
parent 4f71b39827
commit 8a237169c3
8 changed files with 44 additions and 35 deletions

View file

@ -59,6 +59,7 @@ qpic_t *Draw_CachePic (const char *path, qboolean alpha);
void Draw_ClearCache (void); void Draw_ClearCache (void);
void GL_Set2D (void); void GL_Set2D (void);
void GL_DrawReset (void);
void GL_FlushText (void); void GL_FlushText (void);
#endif // _DRAW_H #endif // _DRAW_H

View file

@ -899,6 +899,11 @@ GL_Set2D (void)
qfglEnableClientState (GL_TEXTURE_COORD_ARRAY); qfglEnableClientState (GL_TEXTURE_COORD_ARRAY);
qfglTexCoordPointer (2, GL_FLOAT, 0, textCoords); qfglTexCoordPointer (2, GL_FLOAT, 0, textCoords);
qfglDisableClientState (GL_COLOR_ARRAY); qfglDisableClientState (GL_COLOR_ARRAY);
}
void
GL_DrawReset (void)
{
tVAcount = 0; tVAcount = 0;
tV = textVertices; tV = textVertices;
tC = textCoords; tC = textCoords;

View file

@ -44,6 +44,7 @@ static __attribute__ ((unused)) const char rcsid[] =
#include "QF/console.h" #include "QF/console.h"
#include "QF/cvar.h" #include "QF/cvar.h"
#include "QF/draw.h"
#include "QF/locs.h" #include "QF/locs.h"
#include "QF/mathlib.h" #include "QF/mathlib.h"
#include "QF/qargs.h" #include "QF/qargs.h"
@ -672,6 +673,7 @@ R_RenderView (void)
R_RenderView_ (); R_RenderView_ ();
else else
R_RenderViewFishEye (); R_RenderViewFishEye ();
GL_Set2D ();
} }
#define BOX_FRONT 0 #define BOX_FRONT 0

View file

@ -231,7 +231,9 @@ SCR_UpdateScreen (double realtime, SCR_Func *scr_funcs)
V_RenderView (); V_RenderView ();
SCR_SetUpToDrawConsole (); SCR_SetUpToDrawConsole ();
GL_Set2D (); if (!r_worldentity.model)
GL_Set2D ();
GL_DrawReset ();
// also makes polyblend apply to whole screen // also makes polyblend apply to whole screen
if (v_blend[3]) { if (v_blend[3]) {

View file

@ -169,17 +169,17 @@ SCR_CalcRefdef (void)
// bound field of view // bound field of view
Cvar_SetValue (scr_fov, bound (1, scr_fov->value, 170)); 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.x = 0;
vrect.y = 0; vrect.y = 0;
vrect.width = vid.width; vrect.width = vid.width;
vrect.height = vid.height; vrect.height = vid.height;
R_SetVrect (&vrect, &scr_vrect, r_lineadj); R_SetVrect (&vrect, &scr_vrect, r_lineadj);
r_refdef.vrect = scr_vrect; 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 // notify the refresh of the change
R_ViewChanged (vid.aspect); R_ViewChanged (vid.aspect);

View file

@ -704,6 +704,7 @@ V_CalcRefdef (void)
void void
V_RenderView (void) V_RenderView (void)
{ {
r_worldentity.model = cl.worldmodel;
if (!cl.worldmodel || cls.signon != SIGNONS) if (!cl.worldmodel || cls.signon != SIGNONS)
return; return;

View file

@ -717,6 +717,7 @@ V_RenderView (void)
{ {
cl.simangles[ROLL] = 0; // FIXME @@@ cl.simangles[ROLL] = 0; // FIXME @@@
r_worldentity.model = cl.worldmodel;
if (cls.state != ca_active) if (cls.state != ca_active)
return; return;

View file

@ -57,9 +57,9 @@ demo_t demo;
#define MIN_DEMO_MEMORY 0x100000 #define MIN_DEMO_MEMORY 0x100000
#define USACACHE (sv_demoUseCache->int_val && svs.demomemsize) #define USACACHE (sv_demoUseCache->int_val && svs.demomemsize)
#define DWRITE(a,b,d) dwrite((QFile *) d, a, b) #define DWRITE(a,b,d) dwrite((QFile *) d, a, b)
#define MAXSIZE (demobuffer->end < demobuffer->last ? \ #define MAXSIZE (demo.dbuffer.end < demo.dbuffer.last ? \
demobuffer->start - demobuffer->end : \ demo.dbuffer.start - demo.dbuffer.end : \
demobuffer->maxsize - demobuffer->end) demo.dbuffer.maxsize - demo.dbuffer.end)
static int demo_max_size; static int demo_max_size;
static int demo_size; static int demo_size;
@ -80,7 +80,6 @@ cvar_t *serverdemo;
int (*dwrite) (QFile * file, const void *buf, int count); int (*dwrite) (QFile * file, const void *buf, int count);
static dbuffer_t *demobuffer;
static int header = (int) &((header_t *) 0)->data; static int header = (int) &((header_t *) 0)->data;
entity_state_t demo_entities[UPDATE_MASK + 1][MAX_DEMO_PACKET_ENTITIES]; 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; demo.dbuf->h = NULL;
oldm = demo.dbuf->bufsize; oldm = demo.dbuf->bufsize;
oldd = demobuffer->start; oldd = demo.dbuffer.start;
while (pos < demo.dbuf->bufsize) { while (pos < demo.dbuf->bufsize) {
size = p->size; size = p->size;
pos += header + size; pos += header + size;
@ -195,20 +194,20 @@ SV_DemoWriteToDisk (int type, int to, float time)
demo.dbuf->sz.data += size + header; demo.dbuf->sz.data += size + header;
pos -= size + header; pos -= size + header;
demo.dbuf->sz.maxsize -= size + header; demo.dbuf->sz.maxsize -= size + header;
demobuffer->start += size + header; demo.dbuffer.start += size + header;
} }
// move along // move along
p = (header_t *) (p->data + size); p = (header_t *) (p->data + size);
} }
if (demobuffer->start == demobuffer->last) { if (demo.dbuffer.start == demo.dbuffer.last) {
if (demobuffer->start == demobuffer->end) { if (demo.dbuffer.start == demo.dbuffer.end) {
demobuffer->end = 0; // demobuffer is empty demo.dbuffer.end = 0; // demo.dbuffer is empty
demo.dbuf->sz.data = demobuffer->data; demo.dbuf->sz.data = demo.dbuffer.data;
} }
// go back to begining of the buffer // go back to begining of the buffer
demobuffer->last = demobuffer->end; demo.dbuffer.last = demo.dbuffer.end;
demobuffer->start = 0; demo.dbuffer.start = 0;
} }
} }
@ -270,7 +269,7 @@ SV_DemoWritePackets (int num)
// find two frames // find two frames
// one before the exact time (time - msec) and one after, // 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; for (i = 0, cl = frame->clients, demoinfo = demo.info; i < MAX_CLIENTS;
i++, cl++, demoinfo++) { i++, cl++, demoinfo++) {
if (cl->parsecount != demo.lastwritten) if (cl->parsecount != demo.lastwritten)
@ -433,7 +432,7 @@ DemoSetBuf (byte type, int to)
demo.dbuf->bufsize += header; demo.dbuf->bufsize += header;
demo.dbuf->sz.cursize = demo.dbuf->bufsize; demo.dbuf->sz.cursize = demo.dbuf->bufsize;
demobuffer->end += header; demo.dbuffer.end += header;
demo.dbuf->h = p; demo.dbuf->h = p;
} }
@ -442,12 +441,12 @@ DemoMoveBuf (void)
{ {
// set the last message mark to the previous frame (i/e begining of this // set the last message mark to the previous frame (i/e begining of this
// one) // 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 // move buffer to the begining of demo buffer
memmove (demobuffer->data, demo.dbuf->sz.data, demo.dbuf->bufsize); memmove (demo.dbuffer.data, demo.dbuf->sz.data, demo.dbuf->bufsize);
demo.dbuf->sz.data = demobuffer->data; demo.dbuf->sz.data = demo.dbuffer.data;
demobuffer->end = demo.dbuf->bufsize; demo.dbuffer.end = demo.dbuf->bufsize;
demo.dbuf->h = NULL; // it will be setup again demo.dbuf->h = NULL; // it will be setup again
demo.dbuf->sz.maxsize = MAXSIZE + demo.dbuf->bufsize; demo.dbuf->sz.maxsize = MAXSIZE + demo.dbuf->bufsize;
} }
@ -461,11 +460,11 @@ DemoWrite_Begin (byte type, int to, int size)
// will it fit? // will it fit?
while (demo.dbuf->bufsize + size + header > demo.dbuf->sz.maxsize) { while (demo.dbuf->bufsize + size + header > demo.dbuf->sz.maxsize) {
// if we reached the end of buffer move msgbuf to the begining // 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; move = true;
SV_DemoWritePackets (1); SV_DemoWritePackets (1);
if (move && demobuffer->start > demo.dbuf->bufsize + header + size) if (move && demo.dbuffer.start > demo.dbuf->bufsize + header + size)
DemoMoveBuf (); DemoMoveBuf ();
} }
@ -486,8 +485,8 @@ DemoWrite_Begin (byte type, int to, int size)
demo.dbuf->bufsize += size; demo.dbuf->bufsize += size;
demo.dbuf->h->size += size; demo.dbuf->h->size += size;
if ((demobuffer->end += size) > demobuffer->last) if ((demo.dbuffer.end += size) > demo.dbuffer.last)
demobuffer->last = demobuffer->end; demo.dbuffer.last = demo.dbuffer.end;
} }
/* /*
@ -616,13 +615,11 @@ SV_DemoPings (void)
static void static void
DemoBuffer_Init (dbuffer_t *dbuffer, byte *buf, size_t size) DemoBuffer_Init (dbuffer_t *dbuffer, byte *buf, size_t size)
{ {
demobuffer = dbuffer; dbuffer->data = buf;
dbuffer->maxsize = size;
demobuffer->data = buf; dbuffer->start = 0;
demobuffer->maxsize = size; dbuffer->end = 0;
demobuffer->start = 0; dbuffer->last = 0;
demobuffer->end = 0;
demobuffer->last = 0;
} }
/* /*
@ -642,7 +639,7 @@ DemoSetMsgBuf (demobuf_t *prev, demobuf_t *cur)
demo.dbuf = cur; demo.dbuf = cur;
memset (demo.dbuf, 0, sizeof (*demo.dbuf)); 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; demo.dbuf->sz.maxsize = MAXSIZE;
} }