mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-05-31 08:41:11 +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 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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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]) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue