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