2 * $Logfile: /Freespace2/code/Graphics/Line.h $
7 * Header file for line.cpp
10 * Revision 1.1 2002/05/03 03:28:12 root
14 * 2 10/07/98 10:53a Dave
17 * 1 10/07/98 10:49a Dave
19 * 10 5/06/98 5:30p John
20 * Removed unused cfilearchiver. Removed/replaced some unused/little used
21 * graphics functions, namely gradient_h and _v and pixel_sp. Put in new
22 * DirectX header files and libs that fixed the Direct3D alpha blending
25 * 9 3/10/98 4:18p John
26 * Cleaned up graphics lib. Took out most unused gr functions. Made D3D
27 * & Glide have popups and print screen. Took out all >8bpp software
28 * support. Made Fred zbuffer. Made zbuffer allocate dynamically to
29 * support Fred. Made zbuffering key off of functions rather than one
32 * 8 10/03/97 9:10a John
33 * added better antialiased line drawer
35 * 7 6/13/97 5:35p John
36 * added some antialiased bitmaps and lines
38 * 6 11/26/96 6:50p John
39 * Added some more hicolor primitives. Made windowed mode run as current
40 * bpp, if bpp is 8,16,or 32.
42 * 5 10/26/96 2:56p John
43 * Got gradient code working.
45 * 4 10/26/96 1:40p John
46 * Added some now primitives to the 2d library and
47 * cleaned up some old ones.
55 void gr8_line(int x1,int y1,int x2,int y2);
56 void gr8_aaline(vertex *v1, vertex *v2);
59 #define INT_EXCHG(a,b) do { \
65 //#define INT_SCALE(var,arg,num,den) ((var) = ((arg) * (num)) / (den))
66 #define INT_SCALE(var,arg,num,den) ((var) = MulDiv(arg, num, den))
68 #define INT_CLIPLINE(x1,y1,x2,y2,XMIN,YMIN,XMAX,YMAX,WHEN_OUTSIDE,WHEN_CLIPPED,WHEN_SWAPPED) do { \
72 { INT_EXCHG(y1,y2); INT_EXCHG(x1,x2); WHEN_SWAPPED; } \
73 if((y2 < YMIN) || (y1 > YMAX)) \
76 if((x2 < XMIN) || (x1 > XMAX)) { \
80 INT_SCALE(temp,(y2 - y1),(XMIN - x1),(x2 - x1)); \
81 if((y1 += temp) > YMAX) { WHEN_OUTSIDE; } \
86 INT_SCALE(temp,(y2 - y1),(x2 - XMAX),(x2 - x1)); \
87 if((y2 -= temp) < YMIN) { WHEN_OUTSIDE; } \
92 INT_SCALE(temp,(x2 - x1),(YMIN - y1),(y2 - y1)); \
98 INT_SCALE(temp,(x2 - x1),(y2 - YMAX),(y2 - y1)); \
105 if((x1 < XMIN) || (x2 > XMAX)) { \
109 INT_SCALE(temp,(y2 - y1),(x1 - XMAX),(x1 - x2)); \
110 if((y1 += temp) > YMAX) { WHEN_OUTSIDE; } \
115 INT_SCALE(temp,(y2 - y1),(XMIN - x2),(x1 - x2)); \
116 if((y2 -= temp) < YMIN) { WHEN_OUTSIDE; } \
121 INT_SCALE(temp,(x1 - x2),(YMIN - y1),(y2 - y1)); \
127 INT_SCALE(temp,(x1 - x2),(y2 - YMAX),(y2 - y1)); \
135 #define FL_EXCHG(a,b) do { \
136 float __temp__ = (a); \
141 #define FL_SCALE(var,arg,num,den) ((var) = ((arg) * (num)) / (den))
143 #define FL_CLIPLINE(x1,y1,x2,y2,XMIN,YMIN,XMAX,YMAX,WHEN_OUTSIDE,WHEN_CLIPPED,WHEN_SWAPPED) do { \
147 { FL_EXCHG(y1,y2); FL_EXCHG(x1,x2); WHEN_SWAPPED; } \
148 if((y2 < YMIN) || (y1 > YMAX)) \
151 if((x2 < XMIN) || (x1 > XMAX)) { \
155 FL_SCALE(temp,(y2 - y1),(XMIN - x1),(x2 - x1)); \
156 if((y1 += temp) > YMAX) { WHEN_OUTSIDE; } \
161 FL_SCALE(temp,(y2 - y1),(x2 - XMAX),(x2 - x1)); \
162 if((y2 -= temp) < YMIN) { WHEN_OUTSIDE; } \
167 FL_SCALE(temp,(x2 - x1),(YMIN - y1),(y2 - y1)); \
173 FL_SCALE(temp,(x2 - x1),(y2 - YMAX),(y2 - y1)); \
180 if((x1 < XMIN) || (x2 > XMAX)) { \
184 FL_SCALE(temp,(y2 - y1),(x1 - XMAX),(x1 - x2)); \
185 if((y1 += temp) > YMAX) { WHEN_OUTSIDE; } \
190 FL_SCALE(temp,(y2 - y1),(XMIN - x2),(x1 - x2)); \
191 if((y2 -= temp) < YMIN) { WHEN_OUTSIDE; } \
196 FL_SCALE(temp,(x1 - x2),(YMIN - y1),(y2 - y1)); \
202 FL_SCALE(temp,(x1 - x2),(y2 - YMAX),(y2 - y1)); \