mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-11 10:31:16 +00:00
370 lines
12 KiB
C
370 lines
12 KiB
C
#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;
|
|
}
|