isle-portable/util/miniwin_ddraw.h
2025-05-12 23:10:53 +02:00

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;
}