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 GL_Set2D (void);
void GL_DrawReset (void);
void GL_FlushText (void);
#endif // _DRAW_H

View file

@ -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;

View file

@ -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

View file

@ -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]) {

View file

@ -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);

View file

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

View file

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

View file

@ -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;
}