mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-03-19 08:51:59 +00:00
patches to allow for multiple view ports
This commit is contained in:
parent
4f71b39827
commit
8a237169c3
8 changed files with 44 additions and 35 deletions
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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]) {
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -704,6 +704,7 @@ V_CalcRefdef (void)
|
|||
void
|
||||
V_RenderView (void)
|
||||
{
|
||||
r_worldentity.model = cl.worldmodel;
|
||||
if (!cl.worldmodel || cls.signon != SIGNONS)
|
||||
return;
|
||||
|
||||
|
|
|
@ -717,6 +717,7 @@ V_RenderView (void)
|
|||
{
|
||||
cl.simangles[ROLL] = 0; // FIXME @@@
|
||||
|
||||
r_worldentity.model = cl.worldmodel;
|
||||
if (cls.state != ca_active)
|
||||
return;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue