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
201