Cygwin support, using SDL.
[btb/d2x.git] / unused / win95 / dd.h
1 /*
2 THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX
3 SOFTWARE CORPORATION ("PARALLAX").  PARALLAX, IN DISTRIBUTING THE CODE TO
4 END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A
5 ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS
6 IN USING, DISPLAYING,  AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS
7 SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE
8 FREE PURPOSES.  IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE
9 CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES.  THE END-USER UNDERSTANDS
10 AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE.  
11 COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION.  ALL RIGHTS RESERVED.
12 */
13
14
15
16 #ifndef _DD_H
17 #define _DD_H
18
19 #include "pstypes.h"
20 #include "gr.h"
21 #include "ddraw.h"
22
23 //      Render Modes supported by the Windows version
24 #ifndef _VGA_H
25
26 #define SM_ORIGINAL             -1
27 #define SM_320x200C     0
28 #define SM_320x200U     1
29 #define SM_320x240U     2
30 #define SM_360x200U     3
31 #define SM_360x240U     4
32 #define SM_376x282U     5
33 #define SM_320x400U     6
34 #define SM_320x480U     7
35 #define SM_360x400U     8
36 #define SM_360x480U     9
37 #define SM_360x360U     10
38 #define SM_376x308U     11
39 #define SM_376x564U     12
40 #define SM_640x400V     13
41 #define SM_640x480V     14
42 #define SM_800x600V     15
43 #define SM_1024x768V    16
44 #define SM_640x480V15   17
45 #define SM_800x600V15   18
46
47 #endif
48
49 #define SM95_320x200x8  0
50 #define SM95_320x200x8X 1
51 #define SM95_640x480x8  2
52 #define SM95_320x400x8  3
53 #define SM95_640x400x8  4 
54 #define SM95_800x600x8  5
55 #define SM95_1024x768x8 6
56 #define SM95_640x480x8P 7
57
58 // DDraw interface ------------------------------------------------------------
59
60 typedef struct DDMODEINFO {
61         int w, h, bpp;
62         int rw, rh;
63         int emul                                        :1;                             // Emulated Display Mode (Double Buffer/Single Page)
64         int dbuf                                        :1;                             // Double Buffered Duel Page Game Mode
65         int modex                               :1;                             // Mode X Duel page mode. 
66         int paged                               :1;                             // Duel Page Standard Mode
67 } DDMODEINFO;
68
69 typedef struct _dd_grs_canvas {
70         LPDIRECTDRAWSURFACE lpdds;
71         int lock_count;
72         int sram;
73         int xoff, yoff;
74         grs_canvas canvas;
75 } dd_grs_canvas;
76
77 typedef struct _dd_caps {
78         int hwcolorkey;
79         int hwbltstretch;
80         int hwbltqueue;
81
82         struct {
83                 int sysmem;
84         } offscreen;
85
86 } dd_caps;
87
88
89
90 extern LPDIRECTDRAW                     _lpDD;                          // Direct Draw Object
91 extern LPDIRECTDRAWSURFACE      _lpDDSPrimary;          // Primary Display Screen (Page 1)
92 extern LPDIRECTDRAWSURFACE      _lpDDSBack;                     // Page 2 or offscreen canvas
93 extern LPDIRECTDRAWCLIPPER      _lpDDClipper;           // Window Clipper Object
94 extern LPDIRECTDRAWPALETTE      _lpDDPalette;           // Direct Draw Palette;
95 extern DDMODEINFO                               _DDModeList[16];        // Possible display modes
96 extern int                                              _DDNumModes;            // Number of Display modes
97 extern BOOL                                             _DDFullScreen;          // Full Screen Mode?
98 extern BOOL                                             _DDExclusive;           // Is application exclusive?
99 extern int                                              _DDFlags;                       // Direct Draw Screen Flags
100
101 extern LPDIRECTDRAWSURFACE _lpDDSMask;                  // Cockpit Mask!
102
103 extern int                      WIN95_GR_current_mode;          // WIN95_GR_current mode of render.
104 extern int                      W95DisplayMode;                         // Current Display Mode
105
106
107 extern BOOL DDInit(int mode);
108 extern void DDKill();
109 extern BOOL DDCreateScreen();
110 extern void DDKillScreen();
111 extern ubyte *DDLockSurface(LPDIRECTDRAWSURFACE lpdds, RECT *rect, int *pitch);
112 extern void DDUnlockSurface(LPDIRECTDRAWSURFACE lpdds, char *data);
113 extern void DDSetDisplayMode(int display_mode,int flags);
114 extern void DDSetPalette(LPDIRECTDRAWPALETTE lpDDPal);
115 extern void DDFlip();
116 extern LPDIRECTDRAWSURFACE DDCreateSurface(int w, int h, int vram);
117 extern LPDIRECTDRAWSURFACE DDCreateSysMemSurface(int width, int height);
118 extern LPDIRECTDRAWPALETTE DDCreatePalette(ubyte *pal);
119 extern LPDIRECTDRAWPALETTE DDGetPalette(LPDIRECTDRAWSURFACE lpdds);
120 extern void DDFreeSurface(LPDIRECTDRAWSURFACE lpdds);
121 extern int DDCheckMode(int mode);
122
123
124 //      ddgr interface  -------------------------------------------------------------
125
126 #define DDGR_FULLSCREEN         1
127 #define DDGR_EXWINDOW           2
128 #define DDGR_WINDOW                     3
129 #define DDGR_SCREEN_PAGING      1
130
131
132 extern dd_grs_canvas *dd_grd_screencanv;                // Primary Screen       Canvas
133 extern dd_grs_canvas *dd_grd_backcanv;                  // Back Screen  Canvas
134 extern dd_grs_canvas *dd_grd_curcanv;                   // Current Canvas
135 extern dd_caps  ddDriverCaps;                                           // Direct Draw Caps
136
137 extern void dd_gr_init();
138 extern void dd_gr_close();
139 extern void dd_gr_init_screen();
140 extern void dd_gr_screen_lock();
141 extern void dd_gr_screen_unlock();
142 extern void dd_gr_flip();
143
144 extern dd_grs_canvas *dd_gr_create_canvas(int w, int h);
145 extern dd_grs_canvas *dd_gr_create_sub_canvas(dd_grs_canvas *cvs, int x, int y, int w, int h);
146 extern void dd_gr_init_canvas(dd_grs_canvas *canv, int pixtype, int w, int h);
147 extern void dd_gr_free_sub_canvas(dd_grs_canvas *cvs);
148 extern void dd_gr_free_canvas(dd_grs_canvas *canvas);
149 extern void dd_gr_set_current_canvas(dd_grs_canvas *canvas);
150 extern void dd_gr_disable_current_canvas();
151 extern void dd_gr_init_sub_canvas(dd_grs_canvas *new, dd_grs_canvas *src, 
152                                                                                         int x, int y, int w, int h);
153 extern void dd_gr_clear_canvas(int color);
154 extern void dd_gr_reinit_canvas(dd_grs_canvas *canv);
155
156
157 //      dd_gr_blt functions
158 extern void dd_gr_blt_notrans(dd_grs_canvas *srccanv,
159                                         int sx, int sy, int swidth, int sheight,
160                                         dd_grs_canvas *destcanv, 
161                                         int dx, int dy, int dwidth, int dheight);
162 extern void dd_gr_blt_display(dd_grs_canvas *srccanv,
163                                         int sx, int sy, int swidth, int sheight,
164                                         int dx, int dy, int dwidth, int dheight);
165 extern void dd_gr_blt_screen(dd_grs_canvas *srccanv,
166                                         int sx, int sy, int swidth, int sheight,
167                                         int dx, int dy, int dwidth, int dheight);
168
169 //      dd_gfx functions
170 extern int dd_gfx_init();
171 extern int dd_gfx_close();
172 extern int dd_gfx_resetbitmap2Dcache();
173 extern unsigned short dd_gfx_createbitmap2D(int w, int h);
174 extern int dd_gfx_loadbitmap2D(unsigned short handle, void *buf, int rleflag);
175 extern int dd_gfx_destroybitmap2D(unsigned short handle);
176 extern void dd_gfx_blt2D(unsigned short handle, int x, int y, int x2, int y2,
177                                                 fix u0, fix v0, fix u1, fix v1);
178
179
180
181 //      Macros --------------------------------------------------------------------
182
183 //      ddgr and gr hooks
184
185 #define DDSETDISPLAYMODE(c) (   W95DisplayMode = c )
186
187 #ifndef NDEBUG
188 #define DDGRLOCK(c) (dd_gr_lock_d(c, __FILE__, __LINE__));
189 #else
190 #define DDGRLOCK(c) (dd_gr_lock(c));
191 #endif
192 #define DDGRUNLOCK(c) (dd_gr_unlock(c));
193 #define DDGRRESTORE (dd_gr_restore_display());
194 #define DDGRSCREENLOCK ( dd_gr_screen_lock() );
195 #define DDGRSCREENUNLOCK ( dd_gr_screen_unlock());
196
197 #define GRMODEINFO(c) (_DDModeList[W95DisplayMode].c)
198
199
200 #endif