You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
302 lines
12 KiB
302 lines
12 KiB
#pragma once |
|
|
|
namespace dvl { |
|
|
|
typedef struct _DDCOLORKEY { |
|
DWORD dwColorSpaceLowValue; |
|
DWORD dwColorSpaceHighValue; |
|
} DDCOLORKEY; |
|
|
|
typedef DDCOLORKEY *LPDDCOLORKEY; |
|
|
|
typedef struct _DDSCAPS { |
|
DWORD dwCaps; |
|
} DDSCAPS, *LPDDSCAPS; |
|
|
|
typedef struct _DDPIXELFORMAT { |
|
DWORD dwSize; |
|
DWORD dwFlags; |
|
DWORD dwFourCC; |
|
union { |
|
DWORD dwRGBBitCount; |
|
DWORD dwYUVBitCount; |
|
DWORD dwZBufferBitDepth; |
|
DWORD dwAlphaBitDepth; |
|
}; |
|
union { |
|
DWORD dwRBitMask; |
|
DWORD dwYBitMask; |
|
}; |
|
union { |
|
DWORD dwGBitMask; |
|
DWORD dwUBitMask; |
|
}; |
|
union { |
|
DWORD dwBBitMask; |
|
DWORD dwVBitMask; |
|
}; |
|
union { |
|
DWORD dwRGBAlphaBitMask; |
|
DWORD dwYUVAlphaBitMask; |
|
DWORD dwRGBZBitMask; |
|
DWORD dwYUVZBitMask; |
|
}; |
|
} DDPIXELFORMAT, *LPDDPIXELFORMAT; |
|
|
|
typedef struct _DDSURFACEDESC { |
|
DWORD dwSize; |
|
DWORD dwFlags; |
|
DWORD dwHeight; |
|
DWORD dwWidth; |
|
union { |
|
LONG lPitch; |
|
DWORD dwLinearSize; |
|
}; |
|
DWORD dwBackBufferCount; |
|
union { |
|
DWORD dwMipMapCount; |
|
DWORD dwZBufferBitDepth; |
|
DWORD dwRefreshRate; |
|
}; |
|
DWORD dwAlphaBitDepth; |
|
DWORD dwReserved; |
|
LPVOID lpSurface; |
|
DDCOLORKEY ddckCKDestOverlay; |
|
DDCOLORKEY ddckCKDestBlt; |
|
DDCOLORKEY ddckCKSrcOverlay; |
|
DDCOLORKEY ddckCKSrcBlt; |
|
DDPIXELFORMAT ddpfPixelFormat; |
|
DDSCAPS ddsCaps; |
|
} DDSURFACEDESC, *LPDDSURFACEDESC; |
|
|
|
#define _FACDD 0x876 |
|
#define MAKE_DDHRESULT(code) MAKE_HRESULT(1, _FACDD, code) |
|
|
|
#define DDERR_SURFACELOST MAKE_DDHRESULT(450) |
|
#define DDERR_WASSTILLDRAWING MAKE_DDHRESULT(540) |
|
#define DDERR_SURFACEBUSY MAKE_DDHRESULT(430) |
|
/* |
|
* returned when the position of the overlay on the destionation is no longer |
|
* legal for that destionation. |
|
*/ |
|
#define DDERR_INVALIDPOSITION MAKE_DDHRESULT(579) |
|
|
|
#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_CANTLOCKSURFACE MAKE_DDHRESULT(435) |
|
#define DDERR_CANTPAGELOCK MAKE_DDHRESULT(640) |
|
#define DDERR_CANTPAGEUNLOCK MAKE_DDHRESULT(660) |
|
#define DDERR_CLIPPERISUSINGHWND MAKE_DDHRESULT(567) |
|
#define DDERR_COLORKEYNOTSET MAKE_DDHRESULT(400) |
|
#define DDERR_CURRENTLYNOTAVAIL MAKE_DDHRESULT(40) |
|
#define DDERR_DCALREADYCREATED MAKE_DDHRESULT(620) |
|
#define DDERR_DIRECTDRAWALREADYCREATED MAKE_DDHRESULT(562) |
|
#define DDERR_EXCEPTION MAKE_DDHRESULT(55) |
|
#define DDERR_EXCLUSIVEMODEALREADYSET MAKE_DDHRESULT(581) |
|
#define DDERR_GENERIC E_FAIL |
|
#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 0x80070057 |
|
#define DDERR_INVALIDPIXELFORMAT MAKE_DDHRESULT(145) |
|
#define DDERR_INVALIDPOSITION MAKE_DDHRESULT(579) |
|
#define DDERR_INVALIDRECT MAKE_DDHRESULT(150) |
|
#define DDERR_INVALIDSURFACETYPE MAKE_DDHRESULT(592) |
|
#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_NOMIPMAPHW MAKE_DDHRESULT(591) |
|
#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_NOTPAGELOCKED MAKE_DDHRESULT(680) |
|
#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 0x8007000E |
|
#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 0x80004001 |
|
#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) |
|
#define DD_OK S_OK |
|
|
|
typedef struct IDirectDrawPalette *LPDIRECTDRAWPALETTE; |
|
typedef struct IDirectDrawSurface *LPDIRECTDRAWSURFACE; |
|
typedef struct IDirectDraw *LPDIRECTDRAW; |
|
|
|
// No methods are actually used |
|
DECLARE_INTERFACE_(IDirectDrawPalette, IUnknown) |
|
{ |
|
// clang-format off |
|
STDMETHOD(GetCaps)(THIS_ LPDWORD lpdwCaps) PURE; |
|
STDMETHOD(GetEntries)(THIS_ DWORD dwFlags, DWORD dwBase, DWORD dwNumEntries, LPPALETTEENTRY lpEntries) PURE; |
|
STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW lpDD, DWORD dwFlags, LPPALETTEENTRY lpDDColorTable) PURE; |
|
STDMETHOD(SetEntries)(THIS_ DWORD dwFlags, DWORD dwStartingEntry, DWORD dwCount, LPPALETTEENTRY lpEntries) PURE; |
|
// clang-format on |
|
}; |
|
|
|
/* |
|
Actually used methods: |
|
|
|
DECLARE_INTERFACE_(IDirectDrawSurface, IUnknown) { |
|
STDMETHOD(GetDC)(THIS_ HDC *); |
|
STDMETHOD(IsLost)(THIS); |
|
STDMETHOD(Lock)(THIS_ LPRECT, LPDDSURFACEDESC, DWORD, HANDLE); |
|
STDMETHOD(ReleaseDC)(THIS_ HDC); |
|
STDMETHOD(Restore)(THIS); |
|
STDMETHOD(Unlock)(THIS_ LPVOID); |
|
STDMETHOD(BltFast)(THIS_ DWORD, DWORD, LPDIRECTDRAWSURFACE, LPRECT, DWORD); |
|
STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE); |
|
}; |
|
*/ |
|
|
|
typedef void *LPDDBLTBATCH, *LPDDBLTFX, *LPDIRECTDRAWCLIPPER, *LPDDENUMSURFACESCALLBACK, *LPDDOVERLAYFX; |
|
DECLARE_INTERFACE_(IDirectDrawSurface, IUnknown) |
|
{ |
|
// clang-format off |
|
STDMETHOD(AddAttachedSurface)(THIS_ LPDIRECTDRAWSURFACE lpDDSAttachedSurface) PURE; |
|
STDMETHOD(AddOverlayDirtyRect)(THIS_ LPRECT lpRect) PURE; |
|
STDMETHOD(Blt)(THIS_ LPRECT lpDestRect, LPDIRECTDRAWSURFACE lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwFlags, LPDDBLTFX lpDDBltFx) PURE; |
|
STDMETHOD(BltBatch)(THIS_ LPDDBLTBATCH lpDDBltBatch, DWORD dwCount, DWORD dwFlags) PURE; |
|
STDMETHOD(BltFast)(THIS_ DWORD dwX, DWORD dwY, LPDIRECTDRAWSURFACE lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwTrans) PURE; |
|
STDMETHOD(DeleteAttachedSurface)(THIS_ DWORD dwFlags, LPDIRECTDRAWSURFACE lpDDSAttachedSurface) PURE; |
|
STDMETHOD(EnumAttachedSurfaces)(THIS_ LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) PURE; |
|
STDMETHOD(EnumOverlayZOrders)(THIS_ DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback) PURE; |
|
STDMETHOD(Flip)(THIS_ LPDIRECTDRAWSURFACE lpDDSurfaceTargetOverride, DWORD dwFlags) PURE; |
|
STDMETHOD(GetAttachedSurface)(THIS_ LPDDSCAPS lpDDSCaps, LPDIRECTDRAWSURFACE *lplpDDAttachedSurface) PURE; |
|
STDMETHOD(GetBltStatus)(THIS_ DWORD dwFlags) PURE; |
|
STDMETHOD(GetCaps)(THIS_ LPDDSCAPS lpDDSCaps) PURE; |
|
STDMETHOD(GetClipper)(THIS_ LPDIRECTDRAWCLIPPER *lplpDDClipper) PURE; |
|
STDMETHOD(GetColorKey)(THIS_ DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) PURE; |
|
STDMETHOD(GetDC)(THIS_ HDC *lphDC) PURE; |
|
STDMETHOD(GetFlipStatus)(THIS_ DWORD dwFlags) PURE; |
|
STDMETHOD(GetOverlayPosition)(THIS_ LPLONG lplX, LPLONG lplY) PURE; |
|
STDMETHOD(GetPalette)(THIS_ LPDIRECTDRAWPALETTE *lplpDDPalette) PURE; |
|
STDMETHOD(GetPixelFormat)(THIS_ LPDDPIXELFORMAT lpDDPixelFormat) PURE; |
|
STDMETHOD(GetSurfaceDesc)(THIS_ LPDDSURFACEDESC lpDDSurfaceDesc) PURE; |
|
STDMETHOD(Initialize)(THIS_ LPDIRECTDRAW lpDD, LPDDSURFACEDESC lpDDSurfaceDesc) PURE; |
|
STDMETHOD(IsLost)(THIS) PURE; |
|
STDMETHOD(Lock)(THIS_ LPRECT lpDestRect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD dwFlags, HANDLE hEvent) PURE; |
|
STDMETHOD(ReleaseDC)(THIS_ HDC hDC) PURE; |
|
STDMETHOD(Restore)(THIS) PURE; |
|
STDMETHOD(SetClipper)(THIS_ LPDIRECTDRAWCLIPPER lpDDClipper) PURE; |
|
STDMETHOD(SetColorKey)(THIS_ DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) PURE; |
|
STDMETHOD(SetOverlayPosition)(THIS_ LONG lX, LONG lY) PURE; |
|
STDMETHOD(SetPalette)(THIS_ LPDIRECTDRAWPALETTE lpDDPalette) PURE; |
|
STDMETHOD(Unlock)(THIS_ LPVOID lpSurfaceData) PURE; |
|
STDMETHOD(UpdateOverlay)(THIS_ LPRECT lpSrcRect, LPDIRECTDRAWSURFACE lpDDDestSurface, LPRECT lpDestRect, DWORD dwFlags, LPDDOVERLAYFX lpDDOverlayFx) PURE; |
|
STDMETHOD(UpdateOverlayDisplay)(THIS_ DWORD dwFlags) PURE; |
|
STDMETHOD(UpdateOverlayZOrder)(THIS_ DWORD dwFlags, LPDIRECTDRAWSURFACE lpDDSReference) PURE; |
|
// clang-format off |
|
}; |
|
|
|
#define DDBLTFAST_WAIT 0x00000010 |
|
|
|
#define DDLOCK_WRITEONLY 0x00000020L |
|
#define DDLOCK_WAIT 0x00000001L |
|
|
|
#define DDPCAPS_ALLOW256 0x00000040l |
|
#define DDPCAPS_8BIT 0x00000004l |
|
|
|
#define PC_RESERVED 0x01 |
|
#define PC_NOCOLLAPSE 0x04 |
|
|
|
#define DDWAITVB_BLOCKBEGIN 0x00000001l |
|
|
|
/* |
|
Actually used methods: |
|
|
|
DECLARE_INTERFACE_(IDirectDraw, IUnknown) { |
|
STDMETHOD(CreatePalette)(THIS_ DWORD, LPPALETTEENTRY, LPDIRECTDRAWPALETTE *, IUnknown *); |
|
STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD, HANDLE); |
|
}; |
|
*/ |
|
|
|
typedef void *LPDDENUMMODESCALLBACK, *LPDDCAPS; |
|
DECLARE_INTERFACE_(IDirectDraw,IUnknown) |
|
{ |
|
// clang-format off |
|
STDMETHOD(Compact)(THIS) PURE; |
|
STDMETHOD(CreateClipper)(THIS_ DWORD dwFlags, LPDIRECTDRAWCLIPPER *lplpDDClipper, IUnknown *pUnkOuter) PURE; |
|
STDMETHOD(CreatePalette)(THIS_ DWORD dwFlags, LPPALETTEENTRY lpColorTable, LPDIRECTDRAWPALETTE *lplpDDPalette, IUnknown *pUnkOuter) PURE; |
|
STDMETHOD(CreateSurface)(THIS_ LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRECTDRAWSURFACE *lplpDDSurface, IUnknown *pUnkOuter) PURE; |
|
STDMETHOD(DuplicateSurface)(THIS_ LPDIRECTDRAWSURFACE lpDDSurface, LPDIRECTDRAWSURFACE *lplpDupDDSurface) PURE; |
|
STDMETHOD(EnumDisplayModes)(THIS_ DWORD dwFlags, LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext, LPDDENUMMODESCALLBACK lpEnumModesCallback) PURE; |
|
STDMETHOD(EnumSurfaces)(THIS_ DWORD dwFlags, LPDDSURFACEDESC lpDDSD, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback) PURE; |
|
STDMETHOD(FlipToGDISurface)(THIS) PURE; |
|
STDMETHOD(GetCaps)(THIS_ LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDHELCaps) PURE; |
|
STDMETHOD(GetDisplayMode)(THIS_ LPDDSURFACEDESC lpDDSurfaceDesc) PURE; |
|
STDMETHOD(GetFourCCCodes)(THIS_ LPDWORD lpNumCodes, LPDWORD lpCodes) PURE; |
|
STDMETHOD(GetGDISurface)(THIS_ LPDIRECTDRAWSURFACE *lplpGDIDDSurface) PURE; |
|
STDMETHOD(GetMonitorFrequency)(THIS_ LPDWORD lpdwFrequency) PURE; |
|
STDMETHOD(GetScanLine)(THIS_ LPDWORD lpdwScanLine) PURE; |
|
STDMETHOD(GetVerticalBlankStatus)(THIS_ BOOL *lpbIsInVB) PURE; |
|
STDMETHOD(Initialize)(THIS_ GUID *lpGUID) PURE; |
|
STDMETHOD(RestoreDisplayMode)(THIS) PURE; |
|
STDMETHOD(SetCooperativeLevel)(THIS_ HWND hWnd, DWORD dwFlags) PURE; |
|
STDMETHOD(SetDisplayMode)(THIS_ DWORD dwWidth, DWORD dwHeight, DWORD dwBPP) PURE; |
|
STDMETHOD(WaitForVerticalBlank)(THIS_ DWORD dwFlags, HANDLE hEvent) PURE; |
|
// clang-format on |
|
}; |
|
|
|
}
|
|
|