Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5131 | clevermous | 1 | /* |
2 | Copyright (C) 1996-1997 Id Software, Inc. |
||
3 | |||
4 | This program is free software; you can redistribute it and/or |
||
5 | modify it under the terms of the GNU General Public License |
||
6 | as published by the Free Software Foundation; either version 2 |
||
7 | of the License, or (at your option) any later version. |
||
8 | |||
9 | This program is distributed in the hope that it will be useful, |
||
10 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
11 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
||
12 | |||
13 | See the GNU General Public License for more details. |
||
14 | |||
15 | You should have received a copy of the GNU General Public License |
||
16 | along with this program; if not, write to the Free Software |
||
17 | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
||
18 | |||
19 | */ |
||
20 | |||
21 | // refresh.h -- public interface to refresh functions |
||
22 | |||
23 | #define MAXCLIPPLANES 11 |
||
24 | |||
25 | #define TOP_RANGE 16 // soldier uniform colors |
||
26 | #define BOTTOM_RANGE 96 |
||
27 | |||
28 | //============================================================================= |
||
29 | |||
30 | typedef struct efrag_s |
||
31 | { |
||
32 | struct mleaf_s *leaf; |
||
33 | struct efrag_s *leafnext; |
||
34 | struct entity_s *entity; |
||
35 | struct efrag_s *entnext; |
||
36 | } efrag_t; |
||
37 | |||
38 | |||
39 | typedef struct entity_s |
||
40 | { |
||
41 | qboolean forcelink; // model changed |
||
42 | |||
43 | int update_type; |
||
44 | |||
45 | entity_state_t baseline; // to fill in defaults in updates |
||
46 | |||
47 | double msgtime; // time of last update |
||
48 | vec3_t msg_origins[2]; // last two updates (0 is newest) |
||
49 | vec3_t origin; |
||
50 | vec3_t msg_angles[2]; // last two updates (0 is newest) |
||
51 | vec3_t angles; |
||
52 | struct model_s *model; // NULL = no model |
||
53 | struct efrag_s *efrag; // linked list of efrags |
||
54 | int frame; |
||
55 | float syncbase; // for client-side animations |
||
56 | byte *colormap; |
||
57 | int effects; // light, particals, etc |
||
58 | int skinnum; // for Alias models |
||
59 | int visframe; // last frame this entity was |
||
60 | // found in an active leaf |
||
61 | |||
62 | int dlightframe; // dynamic lighting |
||
63 | int dlightbits; |
||
64 | |||
65 | // FIXME: could turn these into a union |
||
66 | int trivial_accept; |
||
67 | struct mnode_s *topnode; // for bmodels, first world node |
||
68 | // that splits bmodel, or NULL if |
||
69 | // not split |
||
70 | } entity_t; |
||
71 | |||
72 | // !!! if this is changed, it must be changed in asm_draw.h too !!! |
||
73 | typedef struct |
||
74 | { |
||
75 | vrect_t vrect; // subwindow in video for refresh |
||
76 | // FIXME: not need vrect next field here? |
||
77 | vrect_t aliasvrect; // scaled Alias version |
||
78 | int vrectright, vrectbottom; // right & bottom screen coords |
||
79 | int aliasvrectright, aliasvrectbottom; // scaled Alias versions |
||
80 | float vrectrightedge; // rightmost right edge we care about, |
||
81 | // for use in edge list |
||
82 | float fvrectx, fvrecty; // for floating-point compares |
||
83 | float fvrectx_adj, fvrecty_adj; // left and top edges, for clamping |
||
84 | int vrect_x_adj_shift20; // (vrect.x + 0.5 - epsilon) << 20 |
||
85 | int vrectright_adj_shift20; // (vrectright + 0.5 - epsilon) << 20 |
||
86 | float fvrectright_adj, fvrectbottom_adj; |
||
87 | // right and bottom edges, for clamping |
||
88 | float fvrectright; // rightmost edge, for Alias clamping |
||
89 | float fvrectbottom; // bottommost edge, for Alias clamping |
||
90 | float horizontalFieldOfView; // at Z = 1.0, this many X is visible |
||
91 | // 2.0 = 90 degrees |
||
92 | float xOrigin; // should probably allways be 0.5 |
||
93 | float yOrigin; // between be around 0.3 to 0.5 |
||
94 | |||
95 | vec3_t vieworg; |
||
96 | vec3_t viewangles; |
||
97 | |||
98 | float fov_x, fov_y; |
||
99 | |||
100 | int ambientlight; |
||
101 | } refdef_t; |
||
102 | |||
103 | |||
104 | // |
||
105 | // refresh |
||
106 | // |
||
107 | extern int reinit_surfcache; |
||
108 | |||
109 | |||
110 | extern refdef_t r_refdef; |
||
111 | extern vec3_t r_origin, vpn, vright, vup; |
||
112 | |||
113 | extern struct texture_s *r_notexture_mip; |
||
114 | |||
115 | |||
116 | void R_Init (void); |
||
117 | void R_InitTextures (void); |
||
118 | void R_InitEfrags (void); |
||
119 | void R_RenderView (void); // must set r_refdef first |
||
120 | void R_ViewChanged (vrect_t *pvrect, int lineadj, float aspect); |
||
121 | // called whenever r_refdef or vid change |
||
122 | void R_InitSky (struct texture_s *mt); // called at level load |
||
123 | |||
124 | void R_AddEfrags (entity_t *ent); |
||
125 | void R_RemoveEfrags (entity_t *ent); |
||
126 | |||
127 | void R_NewMap (void); |
||
128 | |||
129 | |||
130 | void R_ParseParticleEffect (void); |
||
131 | void R_RunParticleEffect (vec3_t org, vec3_t dir, int color, int count); |
||
132 | void R_RocketTrail (vec3_t start, vec3_t end, int type); |
||
133 | |||
134 | #ifdef QUAKE2 |
||
135 | void R_DarkFieldParticles (entity_t *ent); |
||
136 | #endif |
||
137 | void R_EntityParticles (entity_t *ent); |
||
138 | void R_BlobExplosion (vec3_t org); |
||
139 | void R_ParticleExplosion (vec3_t org); |
||
140 | void R_ParticleExplosion2 (vec3_t org, int colorStart, int colorLength); |
||
141 | void R_LavaSplash (vec3_t org); |
||
142 | void R_TeleportSplash (vec3_t org); |
||
143 | |||
144 | void R_PushDlights (void); |
||
145 | |||
146 | |||
147 | // |
||
148 | // surface cache related |
||
149 | // |
||
150 | extern int reinit_surfcache; // if 1, surface cache is currently empty and |
||
151 | extern qboolean r_cache_thrash; // set if thrashing the surface cache |
||
152 | |||
153 | int D_SurfaceCacheForRes (int width, int height); |
||
154 | void D_FlushCaches (void); |
||
155 | void D_DeleteSurfaceCache (void); |
||
156 | void D_InitCaches (void *buffer, int size); |
||
157 | void R_SetVrect (vrect_t *pvrect, vrect_t *pvrectin, int lineadj);><>><> |
||
158 |