mirror of
https://github.com/jmarshall23/CnC_Remastered_Collection.git
synced 2026-08-17 08:50:29 +02:00
Added ddraw dll and sdl2.
This commit is contained in:
@@ -0,0 +1,382 @@
|
||||
#define VC_EXTRALEAN
|
||||
#include <Windows.h>
|
||||
#include <initguid.h>
|
||||
#include <d3d9.h>
|
||||
#include <d3dx9.h>
|
||||
#include <stdio.h>
|
||||
#include <ddraw.h>
|
||||
|
||||
#ifndef H_DDW
|
||||
#define H_DDW
|
||||
|
||||
// Global function def
|
||||
void debugMessage(int, char*, char*);
|
||||
|
||||
// Forward class declarations
|
||||
class FAR IDirectDrawWrapper;
|
||||
class FAR IDirectDrawPaletteWrapper;
|
||||
class FAR IDirectDrawClipperWrapper;
|
||||
class FAR IDirectDrawSurfaceWrapper;
|
||||
class FAR IDirectDrawColorControlWrapper;
|
||||
class FAR IDirectDrawGammaControlWrapper;
|
||||
|
||||
// Custom vertex format
|
||||
const DWORD D3DFVF_TLVERTEX = D3DFVF_XYZRHW | D3DFVF_TEX1;
|
||||
|
||||
// Custom vertex
|
||||
struct TLVERTEX
|
||||
{
|
||||
float x;
|
||||
float y;
|
||||
float z;
|
||||
float rhw;
|
||||
float u;
|
||||
float v;
|
||||
};
|
||||
|
||||
/*
|
||||
* IDirectDrawWrapper Class
|
||||
*/
|
||||
class FAR IDirectDrawWrapper : public IDirectDraw
|
||||
{
|
||||
// Implemented interfaces
|
||||
public:
|
||||
/*** IUnknown methods ***/
|
||||
HRESULT __stdcall QueryInterface(REFIID riid, LPVOID FAR * ppvObj);
|
||||
ULONG __stdcall AddRef();
|
||||
ULONG __stdcall Release();
|
||||
/*** IDirectDraw methods ***/
|
||||
HRESULT __stdcall Compact();
|
||||
HRESULT __stdcall CreateClipper(DWORD dwFlags, LPDIRECTDRAWCLIPPER FAR *lplpDDClipper, IUnknown FAR *pUnkOuter);
|
||||
HRESULT __stdcall CreatePalette(DWORD dwFlags, LPPALETTEENTRY lpDDColorArray, LPDIRECTDRAWPALETTE FAR *lplpDDPalette, IUnknown FAR *pUnkOuter);
|
||||
HRESULT __stdcall CreateSurface(LPDDSURFACEDESC lpDDSurfaceDes, LPDIRECTDRAWSURFACE FAR *lplpDDSurface, IUnknown FAR *pUnkOuter);
|
||||
HRESULT __stdcall DuplicateSurface(LPDIRECTDRAWSURFACE lpDDSurface, LPDIRECTDRAWSURFACE FAR *lplpDupDDSurface);
|
||||
HRESULT __stdcall EnumDisplayModes(DWORD dwFlags, LPDDSURFACEDESC lpDDSurfaceDesc, LPVOID lpContext, LPDDENUMMODESCALLBACK lpEnumModesCallback);
|
||||
HRESULT __stdcall EnumSurfaces(DWORD dwFlags, LPDDSURFACEDESC lpDDSD, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback);
|
||||
HRESULT __stdcall FlipToGDISurface();
|
||||
HRESULT __stdcall GetCaps(LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDHELCaps);
|
||||
HRESULT __stdcall GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc);
|
||||
HRESULT __stdcall GetFourCCCodes(LPDWORD lpNumCodes, LPDWORD lpCodes);
|
||||
HRESULT __stdcall GetGDISurface(LPDIRECTDRAWSURFACE FAR *lplpGDIDDSSurface);
|
||||
HRESULT __stdcall GetMonitorFrequency(LPDWORD lpdwFrequency);
|
||||
HRESULT __stdcall GetScanLine(LPDWORD lpdwScanLine);
|
||||
HRESULT __stdcall GetVerticalBlankStatus(LPBOOL lpbIsInVB);
|
||||
HRESULT __stdcall Initialize(GUID FAR *lpGUID);
|
||||
HRESULT __stdcall RestoreDisplayMode();
|
||||
HRESULT __stdcall SetCooperativeLevel(HWND hWnd, DWORD dwFlags);
|
||||
HRESULT __stdcall SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP);
|
||||
// HRESULT __stdcall SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP, DWORD dwRefreshRate, DWORD dwFlags);
|
||||
HRESULT __stdcall WaitForVerticalBlank(DWORD dwFlags,HANDLE hEvent);
|
||||
/*** Added in the v2 interface ***/
|
||||
HRESULT __stdcall GetAvailableVideoMem(LPDDSCAPS2 lpDDSCaps2, LPDWORD lpdwTotal, LPDWORD lpdwFree);
|
||||
/*** Added in the V4 Interface ***/
|
||||
HRESULT __stdcall EvaluateMode(DWORD dwFlags, DWORD *pSecondsUntilTimeout);
|
||||
HRESULT __stdcall GetDeviceIdentifier(LPDDDEVICEIDENTIFIER2 lpdddi, DWORD dwFlags);
|
||||
HRESULT __stdcall GetSurfaceFromDC(HDC hdc, LPDIRECTDRAWSURFACE7 *lpDDS);
|
||||
HRESULT __stdcall RestoreAllSurfaces();
|
||||
HRESULT __stdcall StartModeTest(LPSIZE lpModesToTest, DWORD dwNumEntries, DWORD dwFlags);
|
||||
HRESULT __stdcall TestCooperativeLevel();
|
||||
|
||||
// Constructor/destructor
|
||||
IDirectDrawWrapper();
|
||||
~IDirectDrawWrapper();
|
||||
|
||||
// Helper functions
|
||||
HRESULT WrapperInitialize(WNDPROC wp, HMODULE hMod);
|
||||
HRESULT Present();
|
||||
BOOL MenuKey(WPARAM vKey);
|
||||
void DoSnapshot();
|
||||
void ToggleFullscreen();
|
||||
|
||||
// Display window handle
|
||||
HWND hWnd;
|
||||
WNDPROC lpPrevWndFunc;
|
||||
WNDPROC WndProc;
|
||||
HMODULE hModule;
|
||||
|
||||
// Current display mode
|
||||
bool isWindowed;
|
||||
|
||||
// Application display mode
|
||||
DWORD displayModeWidth;
|
||||
DWORD displayModeHeight;
|
||||
|
||||
// Display resolution
|
||||
UINT displayWidth;
|
||||
UINT displayHeight;
|
||||
|
||||
// Saved display resolutions for fullscreen and windowed
|
||||
UINT displayWidthWindowed;
|
||||
UINT displayHeightWindowed;
|
||||
UINT displayWidthFullscreen;
|
||||
UINT displayHeightFullscreen;
|
||||
|
||||
// Custom functions and variables
|
||||
private:
|
||||
// Helper function to set window mode to match display mode
|
||||
void AdjustWindow();
|
||||
bool CreateD3DDevice();
|
||||
bool CreateSurfaceTexture();
|
||||
bool ReinitDevice();
|
||||
bool CheckD3DFailure(HRESULT hr, char *location, char *message);
|
||||
|
||||
IDirectDrawSurfaceWrapper *lpAttachedSurface;
|
||||
|
||||
// Reference count
|
||||
ULONG ReferenceCount;
|
||||
|
||||
// Direct3D9 Objects
|
||||
LPDIRECT3D9 d3d9Object;
|
||||
LPDIRECT3DDEVICE9 d3d9Device;
|
||||
D3DPRESENT_PARAMETERS presParams;
|
||||
LPDIRECT3DTEXTURE9 surfaceTexture;
|
||||
LPDIRECT3DVERTEXBUFFER9 vertexBuffer;
|
||||
|
||||
LPD3DXSPRITE d3dSprite;
|
||||
LPDIRECT3DTEXTURE9 menuTexture;
|
||||
int curMenuFrame;
|
||||
int menuLocations[5];
|
||||
RECT menuSprites[18];
|
||||
|
||||
// Flags and settings
|
||||
BOOL inMenu;
|
||||
int curMenu;
|
||||
int menuWindowedResolution;
|
||||
int windowedResolutionCount;
|
||||
POINT* windowedResolutions;
|
||||
int menuFullscreenResolution;
|
||||
int fullscreenResolutionCount;
|
||||
POINT* fullscreenResolutions;
|
||||
UINT* fullscreenRefreshes;
|
||||
|
||||
bool menuWindowed;
|
||||
bool menuvSync;
|
||||
|
||||
// Last window position
|
||||
POINT lastPosition;
|
||||
// Vsync enabled
|
||||
bool vSync;
|
||||
// Refresh rate for fullscreen
|
||||
UINT refreshRate;
|
||||
};
|
||||
|
||||
/*
|
||||
* IDirectDrawPalette Wrapper
|
||||
*/
|
||||
class FAR IDirectDrawPaletteWrapper : public IDirectDrawPalette
|
||||
{
|
||||
// Implemented interfaces
|
||||
public:
|
||||
/*** IUnknown methods ***/
|
||||
HRESULT __stdcall QueryInterface(REFIID riid, LPVOID FAR * ppvObj);
|
||||
ULONG __stdcall AddRef();
|
||||
ULONG __stdcall Release();
|
||||
/*** IDirectDrawPalette methods ***/
|
||||
HRESULT __stdcall GetCaps(LPDWORD lpdwCaps);
|
||||
HRESULT __stdcall GetEntries(DWORD dwFlags, DWORD dwBase, DWORD dwNumEntries, LPPALETTEENTRY lpEntries);
|
||||
HRESULT __stdcall Initialize(LPDIRECTDRAW lpDDW, DWORD dwFlags, LPPALETTEENTRY lpDDColorTable);
|
||||
HRESULT __stdcall SetEntries(DWORD dwFlags,DWORD dwStartingEntry,DWORD dwCount, LPPALETTEENTRY lpEntries);
|
||||
|
||||
// Constructor/destructor
|
||||
IDirectDrawPaletteWrapper();
|
||||
~IDirectDrawPaletteWrapper();
|
||||
// Helper functions
|
||||
HRESULT WrapperInitialize(DWORD dwFlags, LPPALETTEENTRY lpDDColorArray, LPDIRECTDRAWPALETTE FAR *lplpDDPalette);
|
||||
|
||||
// Rgb translated palette
|
||||
UINT32 *rgbPalette;
|
||||
// Raw palette data
|
||||
LPPALETTEENTRY rawPalette;
|
||||
|
||||
// Custom functions and variables
|
||||
private:
|
||||
// Reference count
|
||||
ULONG ReferenceCount;
|
||||
|
||||
// Palette flags
|
||||
DWORD paletteCaps;
|
||||
|
||||
// Number of palette entries
|
||||
int entryCount;
|
||||
// Raw palette has alpha data
|
||||
bool hasAlpha;
|
||||
};
|
||||
|
||||
/*
|
||||
* IDirectDrawClipper Wrapper
|
||||
*/
|
||||
class FAR IDirectDrawClipperWrapper : public IDirectDrawClipper
|
||||
{
|
||||
// Implemented interfaces
|
||||
public:
|
||||
/*** IUnknown methods ***/
|
||||
HRESULT __stdcall QueryInterface(REFIID riid, LPVOID FAR * ppvObj);
|
||||
ULONG __stdcall AddRef();
|
||||
ULONG __stdcall Release();
|
||||
/*** IDirectDrawClipper methods ***/
|
||||
HRESULT __stdcall GetClipList(LPRECT lpRect, LPRGNDATA lpClipList, LPDWORD lpdwSize);
|
||||
HRESULT __stdcall GetHWnd(HWND FAR *lphWnd);
|
||||
HRESULT __stdcall Initialize(LPDIRECTDRAW lpDD, DWORD dwFlags);
|
||||
HRESULT __stdcall IsClipListChanged(BOOL FAR *lpbChanged);
|
||||
HRESULT __stdcall SetClipList(LPRGNDATA lpClipList, DWORD dwFlags);
|
||||
HRESULT __stdcall SetHWnd(DWORD dwFlags, HWND hWnd);
|
||||
|
||||
// Constructor/destructor
|
||||
IDirectDrawClipperWrapper();
|
||||
~IDirectDrawClipperWrapper();
|
||||
// Helper functions
|
||||
HRESULT WrapperInitialize(DWORD dwFlags);
|
||||
|
||||
// Custom functions and variables
|
||||
private:
|
||||
// Reference count
|
||||
ULONG ReferenceCount;
|
||||
// Associated hwnd
|
||||
bool hasHwnd;
|
||||
HWND hWnd;
|
||||
};
|
||||
|
||||
/*
|
||||
* IDirectDrawSurface Wrapper
|
||||
*/
|
||||
class FAR IDirectDrawSurfaceWrapper : public IDirectDrawSurface
|
||||
{
|
||||
// Implemented interfaces
|
||||
public:
|
||||
/*** IUnknown methods ***/
|
||||
HRESULT __stdcall QueryInterface(REFIID riid, LPVOID FAR * ppvObj);
|
||||
ULONG __stdcall AddRef();
|
||||
ULONG __stdcall Release();
|
||||
/*** IDirectDrawSurface methods ***/
|
||||
HRESULT __stdcall AddAttachedSurface(LPDIRECTDRAWSURFACE lpDDSurface);
|
||||
HRESULT __stdcall AddOverlayDirtyRect(LPRECT lpRect);
|
||||
HRESULT __stdcall Blt(LPRECT lpDestRect,LPDIRECTDRAWSURFACE lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwFlags, LPDDBLTFX lpDDBltFx);
|
||||
HRESULT __stdcall BltBatch(LPDDBLTBATCH lpDDBltBatch, DWORD dwCount, DWORD dwFlags);
|
||||
HRESULT __stdcall BltFast(DWORD dwX, DWORD dwY, LPDIRECTDRAWSURFACE lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwFlags);
|
||||
HRESULT __stdcall DeleteAttachedSurface(DWORD dwFlags,LPDIRECTDRAWSURFACE lpDDSAttachedSurface);
|
||||
HRESULT __stdcall EnumAttachedSurfaces(LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback);
|
||||
HRESULT __stdcall EnumOverlayZOrders(DWORD dwFlags, LPVOID lpContext, LPDDENUMSURFACESCALLBACK lpfnCallback);
|
||||
HRESULT __stdcall Flip(LPDIRECTDRAWSURFACE lpDDSurfaceTargetOverride, DWORD dwFlags);
|
||||
HRESULT __stdcall GetAttachedSurface(LPDDSCAPS lpDDSCaps, LPDIRECTDRAWSURFACE FAR *lplpDDAttachedSurface);
|
||||
HRESULT __stdcall GetBltStatus(DWORD dwFlags);
|
||||
HRESULT __stdcall GetCaps(LPDDSCAPS lpDDSCaps);
|
||||
HRESULT __stdcall GetClipper(LPDIRECTDRAWCLIPPER FAR *lplpDDClipper);
|
||||
HRESULT __stdcall GetColorKey(DWORD dwFlags, LPDDCOLORKEY lpDDColorKey);
|
||||
HRESULT __stdcall GetDC(HDC FAR *lphDC);
|
||||
HRESULT __stdcall GetFlipStatus(DWORD dwFlags);
|
||||
HRESULT __stdcall GetOverlayPosition(LPLONG lplX, LPLONG lplY);
|
||||
HRESULT __stdcall GetPalette(LPDIRECTDRAWPALETTE FAR *lplpDDPalette);
|
||||
HRESULT __stdcall GetPixelFormat(LPDDPIXELFORMAT lpDDPixelFormat);
|
||||
HRESULT __stdcall GetSurfaceDesc(LPDDSURFACEDESC lpDDSurfaceDesc);
|
||||
HRESULT __stdcall Initialize(LPDIRECTDRAW lpDD, LPDDSURFACEDESC lpDDSurfaceDesc);
|
||||
HRESULT __stdcall IsLost();
|
||||
HRESULT __stdcall Lock(LPRECT lpDestRect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD dwFlags, HANDLE hEvent);
|
||||
HRESULT __stdcall ReleaseDC(HDC hDC);
|
||||
HRESULT __stdcall Restore();
|
||||
HRESULT __stdcall SetClipper(LPDIRECTDRAWCLIPPER lpDDClipper);
|
||||
HRESULT __stdcall SetColorKey(DWORD dwFlags, LPDDCOLORKEY lpDDColorKey);
|
||||
HRESULT __stdcall SetOverlayPosition(LONG lX, LONG lY);
|
||||
HRESULT __stdcall SetPalette(LPDIRECTDRAWPALETTE lpDDPalette);
|
||||
HRESULT __stdcall Unlock(LPVOID lpRect);
|
||||
HRESULT __stdcall Unlock(LPRECT lpRect);
|
||||
HRESULT __stdcall UpdateOverlay(LPRECT lpSrcRect, LPDIRECTDRAWSURFACE lpDDDestSurface, LPRECT lpDestRect, DWORD dwFlags, LPDDOVERLAYFX lpDDOverlayFx);
|
||||
HRESULT __stdcall UpdateOverlayDisplay(DWORD dwFlags);
|
||||
HRESULT __stdcall UpdateOverlayZOrder(DWORD dwFlags, LPDIRECTDRAWSURFACE lpDDSReference);
|
||||
/*** Added in the v2 interface ***/
|
||||
HRESULT __stdcall GetDDInterface(LPVOID FAR *lplpDD);
|
||||
HRESULT __stdcall PageLock(DWORD dwFlags);
|
||||
HRESULT __stdcall PageUnlock(DWORD dwFlags);
|
||||
/*** Added in the v3 interface ***/
|
||||
HRESULT __stdcall SetSurfaceDesc(LPDDSURFACEDESC2 lpDDsd2, DWORD dwFlags);
|
||||
/*** Added in the v4 interface ***/
|
||||
HRESULT __stdcall ChangeUniquenessValue();
|
||||
HRESULT __stdcall FreePrivateData(REFGUID guidTag);
|
||||
HRESULT __stdcall GetPrivateData(REFGUID guidTag, LPVOID lpBuffer, LPDWORD lpcbBufferSize);
|
||||
HRESULT __stdcall GetUniquenessValue(LPDWORD lpValue);
|
||||
HRESULT __stdcall SetPrivateData(REFGUID guidTag, LPVOID lpData, DWORD cbSize, DWORD dwFlags);
|
||||
/*** Texture7 methods ***/
|
||||
HRESULT __stdcall SetPriority(DWORD dwPriority);
|
||||
HRESULT __stdcall GetPriority(LPDWORD lpdwPriority);
|
||||
HRESULT __stdcall SetLOD(LPDWORD lpdwMaxLOD);
|
||||
HRESULT __stdcall GetLOD(DWORD dwMaxLOD);
|
||||
|
||||
// Constructor/destructor
|
||||
IDirectDrawSurfaceWrapper(IDirectDrawWrapper* parent);
|
||||
~IDirectDrawSurfaceWrapper();
|
||||
|
||||
// Helper functions
|
||||
HRESULT WrapperInitialize(LPDDSURFACEDESC lpDDSurfaceDesc, DWORD displayModeWidth, DWORD displayModeHeight, DWORD displayWidth, DWORD displayHeight);
|
||||
BOOL ReInitialize(DWORD displayWidth, DWORD displayHeight);
|
||||
|
||||
// RGB video memory
|
||||
UINT32 *rgbVideoMem;
|
||||
|
||||
//Custom functions and variables
|
||||
private:
|
||||
// Reference count
|
||||
ULONG ReferenceCount;
|
||||
// Directdraw object that created this surface
|
||||
IDirectDrawWrapper *ddrawParent;
|
||||
// Associated palette
|
||||
IDirectDrawPaletteWrapper *attachedPalette;
|
||||
|
||||
// Surface description
|
||||
DDSURFACEDESC surfaceDesc;
|
||||
LONG surfaceWidth;
|
||||
LONG surfaceHeight;
|
||||
|
||||
// Color keys(DDCKEY_DESTBLT, DDCKEY_DESTOVERLAY, DDCKEY_SRCBLT, DDCKEY_SRCOVERLAY)
|
||||
DDCOLORKEY colorKeys[4];
|
||||
LONG overlayX, overlayY;
|
||||
|
||||
// Virtual video memory
|
||||
BYTE *rawVideoMem;
|
||||
};
|
||||
|
||||
/*
|
||||
* IDirectDrawColorControl
|
||||
*/
|
||||
class FAR IDirectDrawColorControlWrapper : public IDirectDrawColorControl
|
||||
{
|
||||
//implemented interfaces
|
||||
public:
|
||||
/*** IUnknown methods ***/
|
||||
HRESULT __stdcall QueryInterface(REFIID riid, LPVOID FAR * ppvObj);
|
||||
ULONG __stdcall AddRef();
|
||||
ULONG __stdcall Release();
|
||||
/*** IDirectDrawColorControl methods ***/
|
||||
HRESULT __stdcall GetColorControls(LPDDCOLORCONTROL lpColorControl);
|
||||
HRESULT __stdcall SetColorControls(LPDDCOLORCONTROL lpColorControl);
|
||||
|
||||
// Constructor/destructor
|
||||
IDirectDrawColorControlWrapper();
|
||||
~IDirectDrawColorControlWrapper();
|
||||
|
||||
// Custom functions and variables
|
||||
private:
|
||||
};
|
||||
|
||||
/*
|
||||
* IDirectDrawGammaControl
|
||||
*/
|
||||
class FAR IDirectDrawGammaControlWrapper : public IDirectDrawGammaControl
|
||||
{
|
||||
// Implemented interfaces
|
||||
public:
|
||||
/*** IUnknown methods ***/
|
||||
HRESULT __stdcall QueryInterface(REFIID riid, LPVOID FAR * ppvObj);
|
||||
ULONG __stdcall AddRef();
|
||||
ULONG __stdcall Release();
|
||||
/*** IDirectDrawGammaControl methods ***/
|
||||
HRESULT __stdcall GetGammaRamp(DWORD dwFlags, LPDDGAMMARAMP lpRampData);
|
||||
HRESULT __stdcall SetGammaRamp(DWORD dwFlags, LPDDGAMMARAMP lpRampData);
|
||||
|
||||
// Constructor/destructor
|
||||
IDirectDrawGammaControlWrapper();
|
||||
~IDirectDrawGammaControlWrapper();
|
||||
|
||||
// Custom functions and variables
|
||||
private:
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user