2 * Copyright (C) Volition, Inc. 1999. All rights reserved.
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
10 * $Logfile: /Freespace2/code/Graphics/GrInternal.h $
15 * Include file for our Graphics directory
18 * Revision 1.3 2004/07/04 11:31:43 taylor
19 * amd64 support, compiler warning fixes, don't use software rendering
21 * Revision 1.2 2002/06/09 04:41:13 relnev
22 * added copyright header
24 * Revision 1.1.1.1 2002/05/03 03:28:12 root
28 * 7 6/29/99 10:35a Dave
29 * Interface polygon bitmaps! Whee!
31 * 6 1/15/99 11:29a Neilk
32 * Fixed D3D screen/texture pixel formatting problem.
34 * 5 1/14/99 12:48a Dave
35 * Todo list bug fixes. Made a pass at putting briefing icons back into
36 * FRED. Sort of works :(
38 * 4 12/02/98 5:47p Dave
39 * Put in interface xstr code. Converted barracks screen to new format.
41 * 3 12/01/98 10:32a Johnson
42 * Fixed direct3d font problems. Fixed sun bitmap problem. Fixed direct3d
45 * 2 10/07/98 10:53a Dave
48 * 1 10/07/98 10:49a Dave
50 * 23 5/06/98 11:21p John
51 * Fixed a bitmap bug with Direct3D. Started adding new caching code into
54 * 22 4/08/98 4:09p John
55 * Fixed some potential bugs with high bit set in screen piointer.
57 * 21 3/25/98 8:07p John
58 * Restructured software rendering into two modules; One for windowed
59 * debug mode and one for DirectX fullscreen.
61 * 20 3/24/98 3:58p John
62 * Put in (hopefully) final gamma setting code.
64 * 19 3/10/98 4:18p John
65 * Cleaned up graphics lib. Took out most unused gr functions. Made D3D
66 * & Glide have popups and print screen. Took out all >8bpp software
67 * support. Made Fred zbuffer. Made zbuffer allocate dynamically to
68 * support Fred. Made zbuffering key off of functions rather than one
71 * 18 2/07/98 7:50p John
72 * Added code so that we can use the old blending type of alphacolors if
73 * we want to. Made the stars use them.
75 * 17 1/26/98 5:12p John
76 * Added in code for Pentium Pro specific optimizations. Speed up
77 * zbuffered correct tmapper about 35%. Speed up non-zbuffered scalers
80 * 16 11/30/97 3:57p John
81 * Made fixed 32-bpp translucency. Made BmpMan always map translucent
82 * color into 255 even if you aren't supposed to remap and make it's
85 * 15 11/30/97 12:18p John
86 * added more 24 & 32-bpp primitives
88 * 14 11/29/97 2:06p John
89 * added mode 16-bpp support
91 * 13 11/14/97 12:30p John
92 * Fixed some DirectX bugs. Moved the 8-16 xlat tables into Graphics
93 * libs. Made 16-bpp DirectX modes know what bitmap format they're in.
95 * 12 11/03/97 10:08p Hoffoss
96 * Changed gr_get_string_size to utilize an optional length specifier, if
97 * you want to use non-null terminated strings.
99 * 11 10/19/97 12:55p John
100 * new code to lock / unlock surfaces for smooth directx integration.
102 * 10 10/14/97 4:50p John
105 * 9 10/14/97 8:08a John
106 * added a bunch more 16 bit support
108 * 8 7/18/97 12:40p John
109 * cached alphacolors to disk. Also made cfopen be able to delete a file
110 * by passing NULL for mode.
112 * 7 6/17/97 12:03p John
113 * Moved color/alphacolor functions into their own module. Made all color
114 * functions be part of the low-level graphics drivers, not just the
117 * 6 6/12/97 5:04p John
118 * Initial rev of Glide support
120 * 5 6/11/97 5:49p John
121 * Changed palette code to only recalculate alphacolors when needed, not
122 * when palette changes.
124 * 4 6/06/97 4:41p John
125 * Fixed alpha colors to be smoothly integrated into gr_set_color_fast
128 * 3 6/06/97 2:40p John
129 * Made all the radar dim in/out
131 * 2 5/14/97 4:38p John
132 * Fixed print_screen bug.
134 * 1 5/12/97 12:13p John
139 #ifndef _GRINTERNAL_H
140 #define _GRINTERNAL_H
144 #include "grzbuffer.h"
146 extern int Gr_cursor;
148 #define GR_SCREEN_PTR(type,x,y) ((type *)(ptr_u(gr_screen.offscreen_buffer) + ptr_u(((x)+gr_screen.offset_x)*sizeof(type)) + ptr_u(((y)+gr_screen.offset_y)*gr_screen.rowsize)))
149 #define GR_SCREEN_PTR_SIZE(bpp,x,y) ((ptr_u)(ptr_u(gr_screen.offscreen_buffer) + ptr_u(((x)+gr_screen.offset_x)*(bpp)) + ptr_u(((y)+gr_screen.offset_y)*gr_screen.rowsize)))
151 extern ubyte Gr_original_palette[768]; // The palette
152 extern ubyte Gr_current_palette[768];
154 typedef struct alphacolor {
157 int type; // See AC_TYPE_??? define
161 ubyte lookup[16][256]; // For 8-bpp rendering modes
166 // for backwards fred aabitmap compatibility
167 typedef struct alphacolor_old {
170 int type; // See AC_TYPE_??? define
173 ubyte lookup[16][256]; // For 8-bpp rendering modes
177 extern alphacolor * Current_alphacolor;
178 void gr_init_alphacolors();
180 extern char Gr_current_palette_name[128];
182 typedef struct color_gun {
190 extern color_gun Gr_red, Gr_green, Gr_blue, Gr_alpha;
193 extern color_gun Gr_t_red, Gr_t_green, Gr_t_blue, Gr_t_alpha;
195 // alpha texture format
196 extern color_gun Gr_ta_red, Gr_ta_green, Gr_ta_blue, Gr_ta_alpha;
198 // CURRENT FORMAT - note - this is what bmpman uses when fiddling with pixels/colors. so be sure its properly set to one
199 // of the above values
200 extern color_gun *Gr_current_red, *Gr_current_green, *Gr_current_blue, *Gr_current_alpha;
203 // Translate the 768 byte 'src' palette into
204 // the current screen format's palette.
205 // The size of the dst array is assumed to be gr_screen.bpp
206 // bytes per element.
207 void gr_xlat_palette( void *dst, bitmap *bmp );
209 // CPU identification variables
210 extern int Gr_cpu; // What type of CPU. 5=Pentium, 6=Ppro/PII
211 extern int Gr_mmx; // MMX capabilities? 0=No, 1=Yes
213 extern float Gr_gamma;
214 extern int Gr_gamma_int; // int(Gr_gamma*100)
215 extern int Gr_gamma_lookup[256];
217 #define TCACHE_TYPE_AABITMAP 0 // HUD bitmap. All Alpha.
218 #define TCACHE_TYPE_NORMAL 1 // Normal bitmap. Alpha = 0.
219 #define TCACHE_TYPE_XPARENT 2 // Bitmap with 0,255,0 = transparent. Alpha=0 if transparent, 1 if not.
220 #define TCACHE_TYPE_NONDARKENING 3 // Bitmap with 255,255,255 = non-darkening. Alpha=1 if non-darkening, 0 if not.
221 #define TCACHE_TYPE_BITMAP_SECTION 4 // section of a bitmap