/* THE COMPUTER CODE CONTAINED HEREIN IS THE SOLE PROPERTY OF PARALLAX SOFTWARE CORPORATION ("PARALLAX"). PARALLAX, IN DISTRIBUTING THE CODE TO END-USERS, AND SUBJECT TO ALL OF THE TERMS AND CONDITIONS HEREIN, GRANTS A ROYALTY-FREE, PERPETUAL LICENSE TO SUCH END-USERS FOR USE BY SUCH END-USERS IN USING, DISPLAYING, AND CREATING DERIVATIVE WORKS THEREOF, SO LONG AS SUCH USE, DISPLAY OR CREATION IS FOR NON-COMMERCIAL, ROYALTY OR REVENUE FREE PURPOSES. IN NO EVENT SHALL THE END-USER USE THE COMPUTER CODE CONTAINED HEREIN FOR REVENUE-BEARING PURPOSES. THE END-USER UNDERSTANDS AND AGREES TO THE TERMS HEREIN AND ACCEPTS THE SAME BY USE OF THIS FILE. COPYRIGHT 1993-1999 PARALLAX SOFTWARE CORPORATION. ALL RIGHTS RESERVED. */ #ifndef _DD_H #define _DD_H #include "pstypes.h" #include "gr.h" #include "ddraw.h" // Render Modes supported by the Windows version #ifndef _VGA_H #define SM_ORIGINAL -1 #define SM_320x200C 0 #define SM_320x200U 1 #define SM_320x240U 2 #define SM_360x200U 3 #define SM_360x240U 4 #define SM_376x282U 5 #define SM_320x400U 6 #define SM_320x480U 7 #define SM_360x400U 8 #define SM_360x480U 9 #define SM_360x360U 10 #define SM_376x308U 11 #define SM_376x564U 12 #define SM_640x400V 13 #define SM_640x480V 14 #define SM_800x600V 15 #define SM_1024x768V 16 #define SM_640x480V15 17 #define SM_800x600V15 18 #endif #define SM95_320x200x8 0 #define SM95_320x200x8X 1 #define SM95_640x480x8 2 #define SM95_320x400x8 3 #define SM95_640x400x8 4 #define SM95_800x600x8 5 #define SM95_1024x768x8 6 #define SM95_640x480x8P 7 // DDraw interface ------------------------------------------------------------ typedef struct DDMODEINFO { int w, h, bpp; int rw, rh; int emul :1; // Emulated Display Mode (Double Buffer/Single Page) int dbuf :1; // Double Buffered Duel Page Game Mode int modex :1; // Mode X Duel page mode. int paged :1; // Duel Page Standard Mode } DDMODEINFO; typedef struct _dd_grs_canvas { LPDIRECTDRAWSURFACE lpdds; int lock_count; int sram; int xoff, yoff; grs_canvas canvas; } dd_grs_canvas; typedef struct _dd_caps { int hwcolorkey; int hwbltstretch; int hwbltqueue; struct { int sysmem; } offscreen; } dd_caps; extern LPDIRECTDRAW _lpDD; // Direct Draw Object extern LPDIRECTDRAWSURFACE _lpDDSPrimary; // Primary Display Screen (Page 1) extern LPDIRECTDRAWSURFACE _lpDDSBack; // Page 2 or offscreen canvas extern LPDIRECTDRAWCLIPPER _lpDDClipper; // Window Clipper Object extern LPDIRECTDRAWPALETTE _lpDDPalette; // Direct Draw Palette; extern DDMODEINFO _DDModeList[16]; // Possible display modes extern int _DDNumModes; // Number of Display modes extern BOOL _DDFullScreen; // Full Screen Mode? extern BOOL _DDExclusive; // Is application exclusive? extern int _DDFlags; // Direct Draw Screen Flags extern LPDIRECTDRAWSURFACE _lpDDSMask; // Cockpit Mask! extern int WIN95_GR_current_mode; // WIN95_GR_current mode of render. extern int W95DisplayMode; // Current Display Mode extern BOOL DDInit(int mode); extern void DDKill(); extern BOOL DDCreateScreen(); extern void DDKillScreen(); extern ubyte *DDLockSurface(LPDIRECTDRAWSURFACE lpdds, RECT *rect, int *pitch); extern void DDUnlockSurface(LPDIRECTDRAWSURFACE lpdds, char *data); extern void DDSetDisplayMode(int display_mode,int flags); extern void DDSetPalette(LPDIRECTDRAWPALETTE lpDDPal); extern void DDFlip(); extern LPDIRECTDRAWSURFACE DDCreateSurface(int w, int h, int vram); extern LPDIRECTDRAWSURFACE DDCreateSysMemSurface(int width, int height); extern LPDIRECTDRAWPALETTE DDCreatePalette(ubyte *pal); extern LPDIRECTDRAWPALETTE DDGetPalette(LPDIRECTDRAWSURFACE lpdds); extern void DDFreeSurface(LPDIRECTDRAWSURFACE lpdds); extern int DDCheckMode(int mode); // ddgr interface ------------------------------------------------------------- #define DDGR_FULLSCREEN 1 #define DDGR_EXWINDOW 2 #define DDGR_WINDOW 3 #define DDGR_SCREEN_PAGING 1 extern dd_grs_canvas *dd_grd_screencanv; // Primary Screen Canvas extern dd_grs_canvas *dd_grd_backcanv; // Back Screen Canvas extern dd_grs_canvas *dd_grd_curcanv; // Current Canvas extern dd_caps ddDriverCaps; // Direct Draw Caps extern void dd_gr_init(); extern void dd_gr_close(); extern void dd_gr_init_screen(); extern void dd_gr_screen_lock(); extern void dd_gr_screen_unlock(); extern void dd_gr_flip(); extern dd_grs_canvas *dd_gr_create_canvas(int w, int h); extern dd_grs_canvas *dd_gr_create_sub_canvas(dd_grs_canvas *cvs, int x, int y, int w, int h); extern void dd_gr_init_canvas(dd_grs_canvas *canv, int pixtype, int w, int h); extern void dd_gr_free_sub_canvas(dd_grs_canvas *cvs); extern void dd_gr_free_canvas(dd_grs_canvas *canvas); extern void dd_gr_set_current_canvas(dd_grs_canvas *canvas); extern void dd_gr_disable_current_canvas(); extern void dd_gr_init_sub_canvas(dd_grs_canvas *new, dd_grs_canvas *src, int x, int y, int w, int h); extern void dd_gr_clear_canvas(int color); extern void dd_gr_reinit_canvas(dd_grs_canvas *canv); // dd_gr_blt functions extern void dd_gr_blt_notrans(dd_grs_canvas *srccanv, int sx, int sy, int swidth, int sheight, dd_grs_canvas *destcanv, int dx, int dy, int dwidth, int dheight); extern void dd_gr_blt_display(dd_grs_canvas *srccanv, int sx, int sy, int swidth, int sheight, int dx, int dy, int dwidth, int dheight); extern void dd_gr_blt_screen(dd_grs_canvas *srccanv, int sx, int sy, int swidth, int sheight, int dx, int dy, int dwidth, int dheight); // dd_gfx functions extern int dd_gfx_init(); extern int dd_gfx_close(); extern int dd_gfx_resetbitmap2Dcache(); extern unsigned short dd_gfx_createbitmap2D(int w, int h); extern int dd_gfx_loadbitmap2D(unsigned short handle, void *buf, int rleflag); extern int dd_gfx_destroybitmap2D(unsigned short handle); extern void dd_gfx_blt2D(unsigned short handle, int x, int y, int x2, int y2, fix u0, fix v0, fix u1, fix v1); // Macros -------------------------------------------------------------------- // ddgr and gr hooks #define DDSETDISPLAYMODE(c) ( W95DisplayMode = c ) #ifndef NDEBUG #define DDGRLOCK(c) (dd_gr_lock_d(c, __FILE__, __LINE__)); #else #define DDGRLOCK(c) (dd_gr_lock(c)); #endif #define DDGRUNLOCK(c) (dd_gr_unlock(c)); #define DDGRRESTORE (dd_gr_restore_display()); #define DDGRSCREENLOCK ( dd_gr_screen_lock() ); #define DDGRSCREENUNLOCK ( dd_gr_screen_unlock()); #define GRMODEINFO(c) (_DDModeList[W95DisplayMode].c) #endif