#pragma once #include "miniwin.h" #define _FACDD 0x876 #define DDCKEY_SRCBLT 0x00000001 #define DDENUMRET_OK 1 #define DDFLIP_WAIT 0x00000004 #define DISCL_BACKGROUND 0x00000002 #define RASTERCAPS 0x00000000 #define PC_NOCOLLAPSE 0x04 #define RC_PALETTE 0x00000000 #define SIZEPALETTE 256 // DirectDraw Surface Description flags #define DDSD_CAPS 0x00000001 #define DDSD_HEIGHT 0x00000002 #define DDSD_WIDTH 0x00000004 #define DDSD_BACKBUFFERCOUNT 0x00000010 #define DDSD_ZBUFFERBITDEPTH 0x00000040 #define DDSD_PIXELFORMAT 0x00001000 #define DDCAPS_OVERLAYCANTCLIP 0x00001000L #define DDCAPS_OVERLAY 0x20000000L #define DDCAPS2_NONLOCALVIDMEM 0x00000004 #define DDSCAPS_PRIMARYSURFACE 0x00000001 #define DDSCAPS_3DDEVICE 0x00000002 #define DDSCAPS_BACKBUFFER 0x00000004 #define DDSCAPS_VIDEOMEMORY 0x00000008 #define DDSCAPS_SYSTEMMEMORY 0x00000010 #define DDSCAPS_OFFSCREENPLAIN 0x00000020 #define DDSCAPS_FLIP 0x00000040 #define DDSCAPS_COMPLEX 0x00000080 #define DDSCAPS_ZBUFFER 0x00000100 #define DDPCAPS_8BIT 0x00000001 #define DDPCAPS_INITIALIZE 0x00000002 #define DDPCAPS_ALLOW256 0x00000004 #define DDBLT_KEYSRC 0x00000002 #define DDBLT_ROP 0x00000010 #define DDPF_PALETTEINDEXED8 0x00000020 #define DDPF_RGB 0x00000040 #define DDBLTFAST_SRCCOLORKEY 0x00000001 #define DDBLTFAST_WAIT 0x00000010 #define DDLOCK_WAIT 0x00000001L #define DDLOCK_SURFACEMEMORYPTR 0x00000002L #define DDBD_8 0x00000001 #define DDBD_16 0x00000002 #define DDBD_24 0x00000004 #define DDBD_32 0x00000005 #define DDSCL_NORMAL 0x00000000 #define DDSCL_FULLSCREEN 0x00000001 #define DDSCL_EXCLUSIVE 0x00000002 #define DDSCL_ALLOWREBOOT 0x00000080 #define MAKE_HRESULT(sev, fac, code) \ ((HRESULT) (((uint32_t) (sev) << 31) | ((uint32_t) (fac) << 16) | ((uint32_t) (code)))) #define MAKE_DDHRESULT(code) MAKE_HRESULT(1, _FACDD, code) #define DD_OK S_OK #define DDERR_SURFACELOST MAKE_DDHRESULT(450) #define DDERR_WASSTILLDRAWING MAKE_DDHRESULT(540) #define DDERR_SURFACEBUSY MAKE_DDHRESULT(430) #define DDERR_ALREADYINITIALIZED MAKE_DDHRESULT(5) #define DDERR_BLTFASTCANTCLIP MAKE_DDHRESULT(574) #define DDERR_CANNOTATTACHSURFACE MAKE_DDHRESULT(10) #define DDERR_CANNOTDETACHSURFACE MAKE_DDHRESULT(20) #define DDERR_CANTCREATEDC MAKE_DDHRESULT(585) #define DDERR_CANTDUPLICATE MAKE_DDHRESULT(583) #define DDERR_CLIPPERISUSINGHWND MAKE_DDHRESULT(567) #define DDERR_COLORKEYNOTSET MAKE_DDHRESULT(400) #define DDERR_CURRENTLYNOTAVAIL MAKE_DDHRESULT(40) #define DDERR_DIRECTDRAWALREADYCREATED MAKE_DDHRESULT(562) #define DDERR_EXCEPTION MAKE_DDHRESULT(55) #define DDERR_EXCLUSIVEMODEALREADYSET MAKE_DDHRESULT(581) #define DDERR_GENERIC MAKE_DDHRESULT(1) #define DDERR_HEIGHTALIGN MAKE_DDHRESULT(90) #define DDERR_HWNDALREADYSET MAKE_DDHRESULT(571) #define DDERR_HWNDSUBCLASSED MAKE_DDHRESULT(570) #define DDERR_IMPLICITLYCREATED MAKE_DDHRESULT(588) #define DDERR_INCOMPATIBLEPRIMARY MAKE_DDHRESULT(95) #define DDERR_INVALIDCAPS MAKE_DDHRESULT(100) #define DDERR_INVALIDCLIPLIST MAKE_DDHRESULT(110) #define DDERR_INVALIDDIRECTDRAWGUID MAKE_DDHRESULT(561) #define DDERR_INVALIDMODE MAKE_DDHRESULT(120) #define DDERR_INVALIDOBJECT MAKE_DDHRESULT(130) #define DDERR_INVALIDPARAMS MAKE_DDHRESULT(140) #define DDERR_INVALIDPIXELFORMAT MAKE_DDHRESULT(145) #define DDERR_INVALIDPOSITION MAKE_DDHRESULT(579) #define DDERR_INVALIDRECT MAKE_DDHRESULT(150) #define DDERR_LOCKEDSURFACES MAKE_DDHRESULT(160) #define DDERR_NO3D MAKE_DDHRESULT(170) #define DDERR_NOALPHAHW MAKE_DDHRESULT(180) #define DDERR_NOBLTHW MAKE_DDHRESULT(575) #define DDERR_NOCLIPLIST MAKE_DDHRESULT(205) #define DDERR_NOCLIPPERATTACHED MAKE_DDHRESULT(568) #define DDERR_NOCOLORCONVHW MAKE_DDHRESULT(210) #define DDERR_NOCOLORKEYHW MAKE_DDHRESULT(220) #define DDERR_NOCOLORKEY MAKE_DDHRESULT(215) #define DDERR_NOCOOPERATIVELEVELSET MAKE_DDHRESULT(212) #define DDERR_NODC MAKE_DDHRESULT(586) #define DDERR_NODDROPSHW MAKE_DDHRESULT(576) #define DDERR_NODIRECTDRAWHW MAKE_DDHRESULT(563) #define DDERR_NOEMULATION MAKE_DDHRESULT(565) #define DDERR_NOEXCLUSIVEMODE MAKE_DDHRESULT(225) #define DDERR_NOFLIPHW MAKE_DDHRESULT(230) #define DDERR_NOGDI MAKE_DDHRESULT(240) #define DDERR_NOHWND MAKE_DDHRESULT(569) #define DDERR_NOMIRRORHW MAKE_DDHRESULT(250) #define DDERR_NOOVERLAYDEST MAKE_DDHRESULT(578) #define DDERR_NOOVERLAYHW MAKE_DDHRESULT(260) #define DDERR_NOPALETTEATTACHED MAKE_DDHRESULT(572) #define DDERR_NOPALETTEHW MAKE_DDHRESULT(573) #define DDERR_NORASTEROPHW MAKE_DDHRESULT(280) #define DDERR_NOROTATIONHW MAKE_DDHRESULT(290) #define DDERR_NOSTRETCHHW MAKE_DDHRESULT(310) #define DDERR_NOT4BITCOLORINDEX MAKE_DDHRESULT(317) #define DDERR_NOT4BITCOLOR MAKE_DDHRESULT(316) #define DDERR_NOT8BITCOLOR MAKE_DDHRESULT(320) #define DDERR_NOTAOVERLAYSURFACE MAKE_DDHRESULT(580) #define DDERR_NOTEXTUREHW MAKE_DDHRESULT(330) #define DDERR_NOTFLIPPABLE MAKE_DDHRESULT(582) #define DDERR_NOTFOUND MAKE_DDHRESULT(255) #define DDERR_NOTLOCKED MAKE_DDHRESULT(584) #define DDERR_NOTPALETTIZED MAKE_DDHRESULT(589) #define DDERR_NOVSYNCHW MAKE_DDHRESULT(335) #define DDERR_NOZBUFFERHW MAKE_DDHRESULT(340) #define DDERR_NOZOVERLAYHW MAKE_DDHRESULT(350) #define DDERR_OUTOFCAPS MAKE_DDHRESULT(360) #define DDERR_OUTOFMEMORY MAKE_DDHRESULT(370) #define DDERR_OUTOFVIDEOMEMORY MAKE_DDHRESULT(380) #define DDERR_OVERLAYCANTCLIP MAKE_DDHRESULT(382) #define DDERR_OVERLAYCOLORKEYONLYONEACTIVE MAKE_DDHRESULT(384) #define DDERR_OVERLAYNOTVISIBLE MAKE_DDHRESULT(577) #define DDERR_PALETTEBUSY MAKE_DDHRESULT(387) #define DDERR_PRIMARYSURFACEALREADYEXISTS MAKE_DDHRESULT(564) #define DDERR_REGIONTOOSMALL MAKE_DDHRESULT(566) #define DDERR_SURFACEALREADYATTACHED MAKE_DDHRESULT(410) #define DDERR_SURFACEALREADYDEPENDENT MAKE_DDHRESULT(420) #define DDERR_SURFACEBUSY MAKE_DDHRESULT(430) #define DDERR_SURFACEISOBSCURED MAKE_DDHRESULT(440) #define DDERR_SURFACELOST MAKE_DDHRESULT(450) #define DDERR_SURFACENOTATTACHED MAKE_DDHRESULT(460) #define DDERR_TOOBIGHEIGHT MAKE_DDHRESULT(470) #define DDERR_TOOBIGSIZE MAKE_DDHRESULT(480) #define DDERR_TOOBIGWIDTH MAKE_DDHRESULT(490) #define DDERR_UNSUPPORTED MAKE_DDHRESULT(500) #define DDERR_UNSUPPORTEDFORMAT MAKE_DDHRESULT(510) #define DDERR_UNSUPPORTEDMASK MAKE_DDHRESULT(520) #define DDERR_VERTICALBLANKINPROGRESS MAKE_DDHRESULT(537) #define DDERR_WASSTILLDRAWING MAKE_DDHRESULT(540) #define DDERR_WRONGMODE MAKE_DDHRESULT(587) #define DDERR_XALIGN MAKE_DDHRESULT(560) // --- GUIDs --- DEFINE_GUID(IID_IDirectDraw2, 0x6c14db80, 0x9ecf, 0x11d0, 0xa3, 0x2a, 0x0, 0xa0, 0xc9, 0x0, 0x6, 0x1f); DEFINE_GUID(IID_IDirectDrawSurface3, 0xDA044E0, 0x69B2, 0x11D0, 0xA1, 0xD5, 0x00, 0xAA, 0x00, 0xB8, 0xDF, 0xBB); // --- Structs --- struct DDCAPS { DWORD dwSize; DWORD dwCaps; DWORD dwCaps2; DWORD dwSVBRops[8]; }; typedef DDCAPS* LPDDCAPS; struct DDSCAPS { DWORD dwCaps; }; typedef struct DDSCAPS* LPDDSCAPS; struct DDBLTFX { DWORD dwSize; DWORD dwDDFX; DWORD dwROP; }; struct DDPIXELFORMAT { DWORD dwSize; DWORD dwFlags; DWORD dwRGBBitCount; DWORD dwRBitMask; DWORD dwYBitMask; DWORD dwGBitMask; DWORD dwBBitMask; }; typedef struct DDPIXELFORMAT* LPDDPIXELFORMAT; struct DDCOLORKEY { DWORD dwColorSpaceLowValue; DWORD dwColorSpaceHighValue; }; typedef DDCOLORKEY* LPDDCOLORKEY; struct DDSURFACEDESC { DWORD dwSize; DWORD dwFlags; DWORD dwHeight; DWORD dwWidth; LONG lPitch; DWORD dwBackBufferCount; DWORD dwZBufferBitDepth; LPVOID lpSurface; DDPIXELFORMAT ddpfPixelFormat; DDSCAPS ddsCaps; }; typedef struct DDSURFACEDESC* LPDDSURFACEDESC; typedef struct IDirectDraw* LPDIRECTDRAW; struct IDirectDrawPalette : public IUnknown { virtual HRESULT GetCaps(LPDWORD lpdwCaps) { return DD_OK; } virtual HRESULT GetEntries(DWORD dwFlags, DWORD dwBase, DWORD dwNumEntries, LPPALETTEENTRY lpEntries) { return DD_OK; } virtual HRESULT Initialize(LPDIRECTDRAW lpDD, DWORD dwFlags, LPPALETTEENTRY lpDDColorTable) { return DD_OK; } virtual HRESULT SetEntries(DWORD dwFlags, DWORD dwStartingEntry, DWORD dwCount, LPPALETTEENTRY lpEntries) { return DD_OK; } }; typedef struct IDirectDrawPalette* LPDIRECTDRAWPALETTE; struct IDirectDrawClipper { void Release() {} HRESULT SetHWnd(DWORD unnamedParam1, HWND hWnd) { return DD_OK; } }; typedef IDirectDrawClipper* LPDIRECTDRAWCLIPPER; typedef void *LPDDBLTFX, *LPDDENUMSURFACESCALLBACK; typedef struct IDirectDrawSurface* LPDIRECTDRAWSURFACE; struct IDirectDrawSurface : public IUnknown { virtual HRESULT AddAttachedSurface(LPDIRECTDRAWSURFACE lpDDSAttachedSurface) { return DD_OK; } virtual HRESULT Blt( LPRECT lpDestRect, LPDIRECTDRAWSURFACE lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwFlags, LPDDBLTFX lpDDBltFx ) { return DD_OK; } virtual HRESULT BltFast(DWORD dwX, DWORD dwY, LPDIRECTDRAWSURFACE lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwTrans) { return DD_OK; } virtual HRESULT DeleteAttachedSurface(DWORD dwFlags, LPDIRECTDRAWSURFACE lpDDSAttachedSurface) { return DD_OK; } virtual HRESULT Flip(LPDIRECTDRAWSURFACE lpDDSurfaceTargetOverride, DWORD dwFlags) { return DD_OK; } virtual HRESULT GetAttachedSurface(LPDDSCAPS lpDDSCaps, LPDIRECTDRAWSURFACE* lplpDDAttachedSurface) { return DD_OK; } virtual HRESULT GetCaps(LPDDSCAPS lpDDSCaps) { return DD_OK; } virtual HRESULT GetDC(HDC* lphDC) { return DD_OK; } virtual HRESULT GetOverlayPosition(LPLONG lplX, LPLONG lplY) { return DD_OK; } virtual HRESULT GetPalette(LPDIRECTDRAWPALETTE* lplpDDPalette) { return DDERR_GENERIC; } virtual HRESULT GetPixelFormat(LPDDPIXELFORMAT lpDDPixelFormat) { return DD_OK; } virtual HRESULT GetSurfaceDesc(LPDDSURFACEDESC lpDDSurfaceDesc) { return DD_OK; } virtual HRESULT Initialize(LPDIRECTDRAW lpDD, LPDDSURFACEDESC lpDDSurfaceDesc) { return DD_OK; } virtual HRESULT IsLost() { return DD_OK; } virtual HRESULT Lock(LPRECT lpDestRect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD dwFlags, HANDLE hEvent) { return DD_OK; } virtual HRESULT ReleaseDC(HDC hDC) { return DD_OK; } virtual HRESULT Restore() { return DD_OK; } virtual HRESULT SetClipper(LPDIRECTDRAWCLIPPER lpDDClipper) { return DD_OK; } virtual HRESULT SetColorKey(DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) { return DD_OK; } virtual HRESULT SetPalette(LPDIRECTDRAWPALETTE lpDDPalette) { return DD_OK; } virtual HRESULT Unlock(LPVOID lpSurfaceData) { return DD_OK; } }; struct IDirectDrawSurface3 : public IDirectDrawSurface {}; typedef IDirectDrawSurface3* LPDIRECTDRAWSURFACE3; typedef HRESULT (*LPDDENUMMODESCALLBACK)(LPDDSURFACEDESC, LPVOID); struct IDirectDraw : public IUnknown { virtual HRESULT CreateClipper(DWORD dwFlags, LPDIRECTDRAWCLIPPER* lplpDDClipper, IUnknown* pUnkOuter) { return DDERR_GENERIC; } virtual HRESULT CreatePalette( DWORD dwFlags, LPPALETTEENTRY lpColorTable, LPDIRECTDRAWPALETTE* lplpDDPalette, IUnknown* pUnkOuter ) { return DDERR_GENERIC; } virtual HRESULT CreateSurface( LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRECTDRAWSURFACE* lplpDDSurface, IUnknown* pUnkOuter ) { return DDERR_GENERIC; } virtual HRESULT EnumDisplayModes( DWORD dwFlags, LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext, LPDDENUMMODESCALLBACK lpEnumModesCallback ) { return DD_OK; } virtual HRESULT EnumSurfaces( DWORD dwFlags, LPDDSURFACEDESC lpDDSD, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback ) { return DD_OK; } virtual HRESULT FlipToGDISurface() { return DD_OK; } virtual HRESULT GetCaps(LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDHELCaps) { return DDERR_GENERIC; } virtual HRESULT GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc) { return DD_OK; } virtual HRESULT Initialize(GUID* lpGUID) { return DD_OK; } virtual HRESULT RestoreDisplayMode() { return DD_OK; } virtual HRESULT SetCooperativeLevel(HWND hWnd, DWORD dwFlags) { return DD_OK; } virtual HRESULT SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP) { return DD_OK; } }; struct IDirectDraw2 : public IDirectDraw {}; typedef IDirectDraw2* LPDIRECTDRAW2; // --- Functions --- inline HPALETTE CreatePalette(LPLOGPALETTE lpLogPalette) { return nullptr; } inline int SelectPalette(HDC hdc, HPALETTE hpal, BOOL bForceBackground) { return 0; } inline int RealizePalette(HDC hdc) { return 0; } inline BOOL ClientToScreen(HWND hWnd, LPPOINT lpPoint) { return TRUE; } inline HRESULT DirectDrawCreate(LPGUID lpGuid, LPDIRECTDRAW* lplpDD, IUnknown* pUnkOuter) { return DDERR_GENERIC; } typedef BOOL (*LPDDENUMCALLBACKA)(GUID*, LPSTR, LPSTR, LPVOID); inline HRESULT DirectDrawEnumerate(LPDDENUMCALLBACKA cb, void* context) { return DDERR_GENERIC; }