FS2_Open
Open source remastering of the Freespace 2 engine
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
line.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) Volition, Inc. 1999. All rights reserved.
3
*
4
* All source code herein is the property of Volition, Inc. You may not sell
5
* or otherwise commercially exploit the source or things you created based on the
6
* source.
7
*
8
*/
9
10
11
12
#ifndef _LINE_H
13
#define _LINE_H
14
15
//void gr8_line(int x1,int y1,int x2,int y2, bool b);
16
//void gr8_aaline(vertex *v1, vertex *v2);
17
18
19
#define INT_EXCHG(a,b) do { \
20
int __temp__ = (a); \
21
(a) = (b); \
22
(b) = __temp__; \
23
} while(0)
24
25
//#define INT_SCALE(var,arg,num,den) ((var) = ((arg) * (num)) / (den))
26
#define INT_SCALE(var,arg,num,den) ((var) = MulDiv(arg, num, den))
27
28
#define INT_CLIPLINE(x1,y1,x2,y2,XMIN,YMIN,XMAX,YMAX,WHEN_OUTSIDE,WHEN_CLIPPED,WHEN_SWAPPED) do { \
29
int temp; \
30
\
31
if(y1 > y2) \
32
{ INT_EXCHG(y1,y2); INT_EXCHG(x1,x2); WHEN_SWAPPED; } \
33
if((y2 < YMIN) || (y1 > YMAX)) \
34
{ WHEN_OUTSIDE; } \
35
if(x1 < x2) { \
36
if((x2 < XMIN) || (x1 > XMAX)) { \
37
WHEN_OUTSIDE; \
38
} \
39
if(x1 < XMIN) { \
40
INT_SCALE(temp,(y2 - y1),(XMIN - x1),(x2 - x1)); \
41
if((y1 += temp) > YMAX) { WHEN_OUTSIDE; } \
42
x1 = XMIN; \
43
WHEN_CLIPPED; \
44
} \
45
if(x2 > XMAX) { \
46
INT_SCALE(temp,(y2 - y1),(x2 - XMAX),(x2 - x1)); \
47
if((y2 -= temp) < YMIN) { WHEN_OUTSIDE; } \
48
x2 = XMAX; \
49
WHEN_CLIPPED; \
50
} \
51
if(y1 < YMIN) { \
52
INT_SCALE(temp,(x2 - x1),(YMIN - y1),(y2 - y1)); \
53
x1 += temp; \
54
y1 = YMIN; \
55
WHEN_CLIPPED; \
56
} \
57
if(y2 > YMAX) { \
58
INT_SCALE(temp,(x2 - x1),(y2 - YMAX),(y2 - y1)); \
59
x2 -= temp; \
60
y2 = YMAX; \
61
WHEN_CLIPPED; \
62
} \
63
} \
64
else { \
65
if((x1 < XMIN) || (x2 > XMAX)) { \
66
WHEN_OUTSIDE; \
67
} \
68
if(x1 > XMAX) { \
69
INT_SCALE(temp,(y2 - y1),(x1 - XMAX),(x1 - x2)); \
70
if((y1 += temp) > YMAX) { WHEN_OUTSIDE; } \
71
x1 = XMAX; \
72
WHEN_CLIPPED; \
73
} \
74
if(x2 < XMIN) { \
75
INT_SCALE(temp,(y2 - y1),(XMIN - x2),(x1 - x2)); \
76
if((y2 -= temp) < YMIN) { WHEN_OUTSIDE; } \
77
x2 = XMIN; \
78
WHEN_CLIPPED; \
79
} \
80
if(y1 < YMIN) { \
81
INT_SCALE(temp,(x1 - x2),(YMIN - y1),(y2 - y1)); \
82
x1 -= temp; \
83
y1 = YMIN; \
84
WHEN_CLIPPED; \
85
} \
86
if(y2 > YMAX) { \
87
INT_SCALE(temp,(x1 - x2),(y2 - YMAX),(y2 - y1)); \
88
x2 += temp; \
89
y2 = YMAX; \
90
WHEN_CLIPPED; \
91
} \
92
} \
93
} while(0)
94
95
#define FL_EXCHG(a,b) do { \
96
float __temp__ = (a); \
97
(a) = (b); \
98
(b) = __temp__; \
99
} while(0)
100
101
#define FL_SCALE(var,arg,num,den) ((var) = ((arg) * (num)) / (den))
102
103
#define FL_CLIPLINE(x1,y1,x2,y2,XMIN,YMIN,XMAX,YMAX,WHEN_OUTSIDE,WHEN_CLIPPED,WHEN_SWAPPED) do { \
104
float temp; \
105
\
106
if(y1 > y2) \
107
{ FL_EXCHG(y1,y2); FL_EXCHG(x1,x2); WHEN_SWAPPED; } \
108
if((y2 < YMIN) || (y1 > YMAX)) \
109
{ WHEN_OUTSIDE; } \
110
if(x1 < x2) { \
111
if((x2 < XMIN) || (x1 > XMAX)) { \
112
WHEN_OUTSIDE; \
113
} \
114
if(x1 < XMIN) { \
115
FL_SCALE(temp,(y2 - y1),(XMIN - x1),(x2 - x1)); \
116
if((y1 += temp) > YMAX) { WHEN_OUTSIDE; } \
117
x1 = XMIN; \
118
WHEN_CLIPPED; \
119
} \
120
if(x2 > XMAX) { \
121
FL_SCALE(temp,(y2 - y1),(x2 - XMAX),(x2 - x1)); \
122
if((y2 -= temp) < YMIN) { WHEN_OUTSIDE; } \
123
x2 = XMAX; \
124
WHEN_CLIPPED; \
125
} \
126
if(y1 < YMIN) { \
127
FL_SCALE(temp,(x2 - x1),(YMIN - y1),(y2 - y1)); \
128
x1 += temp; \
129
y1 = YMIN; \
130
WHEN_CLIPPED; \
131
} \
132
if(y2 > YMAX) { \
133
FL_SCALE(temp,(x2 - x1),(y2 - YMAX),(y2 - y1)); \
134
x2 -= temp; \
135
y2 = YMAX; \
136
WHEN_CLIPPED; \
137
} \
138
} \
139
else { \
140
if((x1 < XMIN) || (x2 > XMAX)) { \
141
WHEN_OUTSIDE; \
142
} \
143
if(x1 > XMAX) { \
144
FL_SCALE(temp,(y2 - y1),(x1 - XMAX),(x1 - x2)); \
145
if((y1 += temp) > YMAX) { WHEN_OUTSIDE; } \
146
x1 = XMAX; \
147
WHEN_CLIPPED; \
148
} \
149
if(x2 < XMIN) { \
150
FL_SCALE(temp,(y2 - y1),(XMIN - x2),(x1 - x2)); \
151
if((y2 -= temp) < YMIN) { WHEN_OUTSIDE; } \
152
x2 = XMIN; \
153
WHEN_CLIPPED; \
154
} \
155
if(y1 < YMIN) { \
156
FL_SCALE(temp,(x1 - x2),(YMIN - y1),(y2 - y1)); \
157
x1 -= temp; \
158
y1 = YMIN; \
159
WHEN_CLIPPED; \
160
} \
161
if(y2 > YMAX) { \
162
FL_SCALE(temp,(x1 - x2),(y2 - YMAX),(y2 - y1)); \
163
x2 += temp; \
164
y2 = YMAX; \
165
WHEN_CLIPPED; \
166
} \
167
} \
168
} while(0)
169
170
#endif
code
graphics
line.h
Generated on Sun May 1 2016 16:22:35 for FS2_Open by
1.8.10