1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
/*
* PARSEC HEADER: ro_objmc.h
*/
#ifndef _RO_OBJMC_H_
#define _RO_OBJMC_H_
// --------------------------------------------------
// messy macros for low level object rendering
// --------------------------------------------------
// don't check everything in debug mode --
#ifdef RELAXED_DEBUG_MODE
#undef CHECKHEAPBASEREF
#undef CHECKHEAPREF
#undef CHECKMEMINTEGRITY
#define CHECKHEAPBASEREF( r ) {}
#define CHECKHEAPREF( r ) {}
#define CHECKMEMINTEGRITY() {}
#endif
// ------------------------------------
#ifdef DEBUG
#define CHECKOBJECTREF( r ) if((r)==MyShip) {} else CHECKHEAPBASEREF((r))
#else
#define CHECKOBJECTREF( r ) {}
#endif
// ------------------------------------
#ifndef UPDATE_SOUND
#define AUDs_MaintainSound() {}
#endif
// ------------------------------------
#ifndef COUNT_RENDERED_POLYGONS
#define COUNTPOLYGONS(a) (a)
#else
#define COUNTPOLYGONS(a) if ((a)) { NumRenderedPolygons++; } else { }
#endif
// ------------------------------------
//#define BACKFACE_TOL_EPS 600000
#define BACKFACE_TOL_EPS AUXDATA_BSP_BACKFACE_TOLERANCE_EPS
// ------------------------------------
#ifndef CULL_BACKFACES_IN_BSP
#define BSPBACKFACETEST(a) (a)
#else
#ifndef CHECK_BACKFACE_EPS
#define BSPBACKFACETEST(a) \
if ( ( bsp_objectp->ObjectType & TYPEBACKFACEMASK ) != 0 ) \
{ (a); } else { }
#else
#define BSPBACKFACETEST(a) \
if ( ( sprod > -BACKFACE_TOL_EPS ) || \
( ( bsp_objectp->ObjectType & TYPEBACKFACEMASK ) != 0 ) ) \
{ (a); } else { }
#endif
#endif
// ------------------------------------
#ifndef TWO_SIDES_POSSIBLE
#define BACKFACINGBSPNODE(n,p,v,f) {}
#else
#define BACKFACINGBSPNODE(n,p,v,f) BSPBACKFACETEST( \
RO_DrawBSPNode( (n), (p), (v), (f) ) )
#endif
// ------------------------------------
#define CALCTEXTUREGRADIENTS(o,f) { \
MtxMtxMUL( (o)->CurrentXmatrx, (f)->TexXmatrx, DestXmatrx ); \
AdjointMtx( DestXmatrx, (f)->CurTexXmatrx ); }
/*
if ( ( (f)->Shading == persptex_shad ) || \
( (f)->Shading == ipol1tex_shad ) ) { \
MtxMtxMUL( (o)->CurrentXmatrx, (f)->TexXmatrx, DestXmatrx ); \
AdjointMtx( DestXmatrx, (f)->CurTexXmatrx ); \
}
*/
// ------------------------------------
//#define BSP_ERROR_EPS 80000
#define BSP_ERROR_EPS AUXDATA_BSP_ERROR_EPS
// ------------------------------------
#ifdef ENABLE_BSP_ERROR_TRACING
#define CHECKBSPPLANE(s,n,p,v,f) \
\
(s) > -BSP_ERROR_EPS && (s) < BSP_ERROR_EPS ) { \
\
if ( AUX_BSP_DO_EXTENDED_SPROD_CHECK ) { \
AUXDATA_BSP_SCALARPRODUCT_VALUE = abs( (s) ); \
\
if ( !AUX_BSP_EXTCHECK_SKIPSUBTREE ) { \
if ( AUX_BSP_EXTCHECK_DRAW_NODE ) \
RO_DrawBSPNode( (n), (p), (v), (f) ); \
\
if ( AUX_BSP_EXTCHECK_BACKNODE_FIRST ) { \
if ( bsp_objectp->BSPTree[ bspnode ].BackTree > 0 ) \
RO_TraverseBSPTree( bsp_objectp->BSPTree[ bspnode ].BackTree ); \
if ( bsp_objectp->BSPTree[ bspnode ].FrontTree > 0 ) \
RO_TraverseBSPTree( bsp_objectp->BSPTree[ bspnode ].FrontTree ); \
} else { \
if ( bsp_objectp->BSPTree[ bspnode ].FrontTree > 0 ) \
RO_TraverseBSPTree( bsp_objectp->BSPTree[ bspnode ].FrontTree ); \
if ( bsp_objectp->BSPTree[ bspnode ].BackTree > 0 ) \
RO_TraverseBSPTree( bsp_objectp->BSPTree[ bspnode ].BackTree ); \
} \
} \
\
} else { \
AUXDATA_BSP_SCALARPRODUCT_VALUE = abs( (s) ); \
if ( (s) > 0 ) (s) = BSP_ERROR_EPS; else (s) = -BSP_ERROR_EPS; \
goto testplane; \
} \
\
} else if ( (s) > 0
#else
#define CHECKBSPPLANE(s,n,p,v,f) ( (s) > 0 )
#endif
#endif // _RO_OBJMC_H_
|