summaryrefslogtreecommitdiff
path: root/apps/plugins/sdl/progs/quake/r_local.h
diff options
context:
space:
mode:
authorFranklin Wei <git@fwei.tk>2018-02-11 15:34:30 -0500
committerFranklin Wei <git@fwei.tk>2019-07-19 22:37:40 -0400
commit5d05b9d3e920a6aa5fcb553758e98ed0da8c91e4 (patch)
tree84406e21639529a185556a33e5de7f43cffc277b /apps/plugins/sdl/progs/quake/r_local.h
parentb70fecf21ddc21877ec1ae7888d9c18a979e37ad (diff)
downloadrockbox-5d05b9d3e920a6aa5fcb553758e98ed0da8c91e4.tar.gz
rockbox-5d05b9d3e920a6aa5fcb553758e98ed0da8c91e4.zip
Quake!
This ports id Software's Quake to run on the SDL plugin runtime. The source code originated from id under the GPLv2 license. I used https://github.com/ahefner/sdlquake as the base of my port. Performance is, unsurprisingly, not on par with what you're probably used to on PC. I average about 10FPS on ipod6g, but it's still playable. Sound works well enough, but in-game music is not supported. I've written ARM assembly routines for the inner sound loop. Make sure you turn the "brightness" all the way down, or colors will look funky. To run, extract Quake's data files to /.rockbox/quake. Have fun! Change-Id: I4285036e967d7f0722802d43cf2096c808ca5799
Diffstat (limited to 'apps/plugins/sdl/progs/quake/r_local.h')
-rw-r--r--apps/plugins/sdl/progs/quake/r_local.h316
1 files changed, 316 insertions, 0 deletions
diff --git a/apps/plugins/sdl/progs/quake/r_local.h b/apps/plugins/sdl/progs/quake/r_local.h
new file mode 100644
index 0000000000..910bdbffc9
--- /dev/null
+++ b/apps/plugins/sdl/progs/quake/r_local.h
@@ -0,0 +1,316 @@
1/*
2Copyright (C) 1996-1997 Id Software, Inc.
3
4This program is free software; you can redistribute it and/or
5modify it under the terms of the GNU General Public License
6as published by the Free Software Foundation; either version 2
7of the License, or (at your option) any later version.
8
9This program is distributed in the hope that it will be useful,
10but WITHOUT ANY WARRANTY; without even the implied warranty of
11MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
13See the GNU General Public License for more details.
14
15You should have received a copy of the GNU General Public License
16along with this program; if not, write to the Free Software
17Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
18
19*/
20// r_local.h -- private refresh defs
21
22#ifndef GLQUAKE
23#include "r_shared.h"
24
25#define ALIAS_BASE_SIZE_RATIO (1.0 / 11.0)
26 // normalizing factor so player model works out to about
27 // 1 pixel per triangle
28
29#define BMODEL_FULLY_CLIPPED 0x10 // value returned by R_BmodelCheckBBox ()
30 // if bbox is trivially rejected
31
32//===========================================================================
33// viewmodel lighting
34
35typedef struct {
36 int ambientlight;
37 int shadelight;
38 float *plightvec;
39} alight_t;
40
41//===========================================================================
42// clipped bmodel edges
43
44typedef struct bedge_s
45{
46 mvertex_t *v[2];
47 struct bedge_s *pnext;
48} bedge_t;
49
50typedef struct {
51 float fv[3]; // viewspace x, y
52} auxvert_t;
53
54//===========================================================================
55
56extern cvar_t r_draworder;
57extern cvar_t r_speeds;
58extern cvar_t r_timegraph;
59extern cvar_t r_graphheight;
60extern cvar_t r_clearcolor;
61extern cvar_t r_waterwarp;
62extern cvar_t r_fullbright;
63extern cvar_t r_drawentities;
64extern cvar_t r_aliasstats;
65extern cvar_t r_dspeeds;
66extern cvar_t r_drawflat;
67extern cvar_t r_ambient;
68extern cvar_t r_reportsurfout;
69extern cvar_t r_maxsurfs;
70extern cvar_t r_numsurfs;
71extern cvar_t r_reportedgeout;
72extern cvar_t r_maxedges;
73extern cvar_t r_numedges;
74
75#define XCENTERING (1.0 / 2.0)
76#define YCENTERING (1.0 / 2.0)
77
78#define CLIP_EPSILON 0.001
79
80#define BACKFACE_EPSILON 0.01
81
82//===========================================================================
83
84#define DIST_NOT_SET 98765
85
86// !!! if this is changed, it must be changed in asm_draw.h too !!!
87typedef struct clipplane_s
88{
89 vec3_t normal;
90 float dist;
91 struct clipplane_s *next;
92 byte leftedge;
93 byte rightedge;
94 byte reserved[2];
95} clipplane_t;
96
97extern clipplane_t view_clipplanes[4];
98
99//=============================================================================
100
101void R_RenderWorld (void);
102
103//=============================================================================
104
105extern mplane_t screenedge[4];
106
107extern vec3_t r_origin;
108
109extern vec3_t r_entorigin;
110
111extern float screenAspect;
112extern float verticalFieldOfView;
113extern float xOrigin, yOrigin;
114
115extern int r_visframecount;
116
117//=============================================================================
118
119extern int vstartscan;
120
121
122void R_ClearPolyList (void);
123void R_DrawPolyList (void);
124
125//
126// current entity info
127//
128extern qboolean insubmodel;
129extern vec3_t r_worldmodelorg;
130
131
132void R_DrawSprite (void);
133void R_RenderFace (msurface_t *fa, int clipflags);
134void R_RenderPoly (msurface_t *fa, int clipflags);
135void R_RenderBmodelFace (bedge_t *pedges, msurface_t *psurf);
136void R_TransformPlane (mplane_t *p, float *normal, float *dist);
137void R_TransformFrustum (void);
138void R_SetSkyFrame (void);
139void R_DrawSurfaceBlock16 (void);
140void R_DrawSurfaceBlock8 (void);
141texture_t *R_TextureAnimation (texture_t *base);
142
143#if id386
144
145void R_DrawSurfaceBlock8_mip0 (void);
146void R_DrawSurfaceBlock8_mip1 (void);
147void R_DrawSurfaceBlock8_mip2 (void);
148void R_DrawSurfaceBlock8_mip3 (void);
149
150#endif
151
152void R_GenSkyTile (void *pdest);
153void R_GenSkyTile16 (void *pdest);
154void R_Surf8Patch (void);
155void R_Surf16Patch (void);
156void R_DrawSubmodelPolygons (model_t *pmodel, int clipflags);
157void R_DrawSolidClippedSubmodelPolygons (model_t *pmodel);
158
159void R_AddPolygonEdges (emitpoint_t *pverts, int numverts, int miplevel);
160surf_t *R_GetSurf (void);
161void R_AliasDrawModel (alight_t *plighting);
162void R_BeginEdgeFrame (void);
163void R_ScanEdges (void);
164void D_DrawSurfaces (void);
165void R_InsertNewEdges (edge_t *edgestoadd, edge_t *edgelist);
166void R_StepActiveU (edge_t *pedge);
167void R_RemoveEdges (edge_t *pedge);
168
169extern void R_Surf8Start (void);
170extern void R_Surf8End (void);
171extern void R_Surf16Start (void);
172extern void R_Surf16End (void);
173extern void R_EdgeCodeStart (void);
174extern void R_EdgeCodeEnd (void);
175
176extern void R_RotateBmodel (void);
177
178extern int c_faceclip;
179extern int r_polycount;
180extern int r_wholepolycount;
181
182extern model_t *cl_worldmodel;
183
184extern int *pfrustum_indexes[4];
185
186// !!! if this is changed, it must be changed in asm_draw.h too !!!
187#define NEAR_CLIP 0.01
188
189extern int ubasestep, errorterm, erroradjustup, erroradjustdown;
190extern int vstartscan;
191
192extern fixed16_t sadjust, tadjust;
193extern fixed16_t bbextents, bbextentt;
194
195#define MAXBVERTINDEXES 1000 // new clipped vertices when clipping bmodels
196 // to the world BSP
197extern mvertex_t *r_ptverts, *r_ptvertsmax;
198
199extern vec3_t sbaseaxis[3], tbaseaxis[3];
200extern float entity_rotation[3][3];
201
202extern int reinit_surfcache;
203
204extern int r_currentkey;
205extern int r_currentbkey;
206
207typedef struct btofpoly_s {
208 int clipflags;
209 msurface_t *psurf;
210} btofpoly_t;
211
212#define MAX_BTOFPOLYS 5000 // FIXME: tune this
213
214extern int numbtofpolys;
215extern btofpoly_t *pbtofpolys;
216
217void R_InitTurb (void);
218void R_ZDrawSubmodelPolys (model_t *clmodel);
219
220//=========================================================
221// Alias models
222//=========================================================
223
224#define MAXALIASVERTS 2000 // TODO: tune this
225#define ALIAS_Z_CLIP_PLANE 5
226
227extern int numverts;
228extern int a_skinwidth;
229extern mtriangle_t *ptriangles;
230extern int numtriangles;
231extern aliashdr_t *paliashdr;
232extern mdl_t *pmdl;
233extern float leftclip, topclip, rightclip, bottomclip;
234extern int r_acliptype;
235extern finalvert_t *pfinalverts;
236extern auxvert_t *pauxverts;
237
238qboolean R_AliasCheckBBox (void);
239
240//=========================================================
241// turbulence stuff
242
243#define AMP 8*0x10000
244#define AMP2 3
245#define SPEED 20
246
247//=========================================================
248// particle stuff
249
250void R_DrawParticles (void);
251void R_InitParticles (void);
252void R_ClearParticles (void);
253void R_ReadPointFile_f (void);
254void R_SurfacePatch (void);
255
256extern int r_amodels_drawn;
257extern edge_t *auxedges;
258extern int r_numallocatededges;
259extern edge_t *r_edges, *edge_p, *edge_max;
260
261extern edge_t *newedges[MAXHEIGHT];
262extern edge_t *removeedges[MAXHEIGHT];
263
264extern int screenwidth;
265
266// FIXME: make stack vars when debugging done
267extern edge_t edge_head;
268extern edge_t edge_tail;
269extern edge_t edge_aftertail;
270extern int r_bmodelactive;
271extern vrect_t *pconupdate;
272
273extern float aliasxscale, aliasyscale, aliasxcenter, aliasycenter;
274extern float r_aliastransition, r_resfudge;
275
276extern int r_outofsurfaces;
277extern int r_outofedges;
278
279extern mvertex_t *r_pcurrentvertbase;
280extern int r_maxvalidedgeoffset;
281
282void R_AliasClipTriangle (mtriangle_t *ptri);
283
284extern float r_time1;
285extern float dp_time1, dp_time2, db_time1, db_time2, rw_time1, rw_time2;
286extern float se_time1, se_time2, de_time1, de_time2, dv_time1, dv_time2;
287extern int r_frustum_indexes[4*6];
288extern int r_maxsurfsseen, r_maxedgesseen, r_cnumsurfs;
289extern qboolean r_surfsonstack;
290extern cshift_t cshift_water;
291extern qboolean r_dowarpold, r_viewchanged;
292
293extern mleaf_t *r_viewleaf, *r_oldviewleaf;
294
295extern vec3_t r_emins, r_emaxs;
296extern mnode_t *r_pefragtopnode;
297extern int r_clipflags;
298extern int r_dlightframecount;
299extern qboolean r_fov_greater_than_90;
300
301void R_StoreEfrags (efrag_t **ppefrag);
302void R_TimeRefresh_f (void);
303void R_TimeGraph (void);
304void R_PrintAliasStats (void);
305void R_PrintTimes (void);
306void R_PrintDSpeeds (void);
307void R_AnimateLight (void);
308int R_LightPoint (vec3_t p);
309void R_SetupFrame (void);
310void R_cshift_f (void);
311void R_EmitEdge (mvertex_t *pv0, mvertex_t *pv1);
312//void R_ClipEdge (mvertex_t *pv0, mvertex_t *pv1, clipplane_t *clip);
313void R_SplitEntityOnNode2 (mnode_t *node);
314void R_MarkLights (dlight_t *light, int bit, mnode_t *node);
315
316#endif \ No newline at end of file