mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-11 18:41:14 +00:00
miinwin: Get to the CD check (#76)
This commit is contained in:
parent
27affb7531
commit
0e2ea5edc4
@ -205,9 +205,14 @@ typedef GUID REFIID;
|
|||||||
typedef GUID* LPGUID;
|
typedef GUID* LPGUID;
|
||||||
|
|
||||||
struct IUnknown {
|
struct IUnknown {
|
||||||
virtual ULONG AddRef() = 0;
|
IUnknown() : m_refCount(1) {}
|
||||||
virtual ULONG Release() = 0;
|
virtual ULONG AddRef();
|
||||||
virtual HRESULT QueryInterface(const GUID& riid, void** ppvObject) = 0;
|
virtual ULONG Release();
|
||||||
|
virtual HRESULT QueryInterface(const GUID& riid, void** ppvObject);
|
||||||
|
virtual ~IUnknown() = default;
|
||||||
|
|
||||||
|
private:
|
||||||
|
int m_refCount;
|
||||||
};
|
};
|
||||||
typedef struct IUnknown* LPUNKNOWN;
|
typedef struct IUnknown* LPUNKNOWN;
|
||||||
|
|
||||||
|
|||||||
@ -35,10 +35,10 @@ struct D3DDEVICEDESC {
|
|||||||
};
|
};
|
||||||
typedef D3DDEVICEDESC* LPD3DDEVICEDESC;
|
typedef D3DDEVICEDESC* LPD3DDEVICEDESC;
|
||||||
|
|
||||||
struct IDirect3DDevice2 : public IUnknown {};
|
struct IDirect3DDevice2 : virtual public IUnknown {};
|
||||||
|
|
||||||
typedef HRESULT (*LPD3DENUMDEVICESCALLBACK)(LPGUID, LPSTR, LPSTR, LPD3DDEVICEDESC, LPD3DDEVICEDESC, LPVOID);
|
typedef HRESULT (*LPD3DENUMDEVICESCALLBACK)(LPGUID, LPSTR, LPSTR, LPD3DDEVICEDESC, LPD3DDEVICEDESC, LPVOID);
|
||||||
struct IDirect3D2 : public IUnknown {
|
struct IDirect3D2 : virtual public IUnknown {
|
||||||
virtual HRESULT CreateDevice(const GUID& guid, void* pBackBuffer, IDirect3DDevice2** ppDirect3DDevice) = 0;
|
virtual HRESULT CreateDevice(const GUID& guid, void* pBackBuffer, IDirect3DDevice2** ppDirect3DDevice) = 0;
|
||||||
virtual HRESULT EnumDevices(LPD3DENUMDEVICESCALLBACK cb, void* ctx) = 0;
|
virtual HRESULT EnumDevices(LPD3DENUMDEVICESCALLBACK cb, void* ctx) = 0;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -127,10 +127,10 @@ struct D3DRMVERTEX {
|
|||||||
float tu, tv;
|
float tu, tv;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDirect3DRMVisual : public IUnknown {};
|
struct IDirect3DRMVisual : virtual public IUnknown {};
|
||||||
typedef IDirect3DRMVisual* LPDIRECT3DRMVISUAL;
|
typedef IDirect3DRMVisual* LPDIRECT3DRMVISUAL;
|
||||||
|
|
||||||
struct IDirect3DRMObject : public IUnknown {
|
struct IDirect3DRMObject : virtual public IUnknown {
|
||||||
virtual HRESULT Clone(void** ppObject) = 0;
|
virtual HRESULT Clone(void** ppObject) = 0;
|
||||||
virtual HRESULT AddDestroyCallback(void (*cb)(IDirect3DRMObject*, void*), void* arg) = 0;
|
virtual HRESULT AddDestroyCallback(void (*cb)(IDirect3DRMObject*, void*), void* arg) = 0;
|
||||||
virtual HRESULT DeleteDestroyCallback(void (*cb)(IDirect3DRMObject*, void*), void* arg) = 0;
|
virtual HRESULT DeleteDestroyCallback(void (*cb)(IDirect3DRMObject*, void*), void* arg) = 0;
|
||||||
@ -140,7 +140,7 @@ struct IDirect3DRMObject : public IUnknown {
|
|||||||
virtual HRESULT GetName(DWORD* size, char* name) = 0;
|
virtual HRESULT GetName(DWORD* size, char* name) = 0;
|
||||||
virtual HRESULT GetClassName(DWORD* size, char* name) = 0;
|
virtual HRESULT GetClassName(DWORD* size, char* name) = 0;
|
||||||
};
|
};
|
||||||
struct IDirect3DRMTexture : public IUnknown {
|
struct IDirect3DRMTexture : virtual public IUnknown {
|
||||||
virtual HRESULT AddDestroyCallback(void (*cb)(IDirect3DRMObject*, void*), void* arg) = 0;
|
virtual HRESULT AddDestroyCallback(void (*cb)(IDirect3DRMObject*, void*), void* arg) = 0;
|
||||||
virtual LPVOID GetAppData() = 0;
|
virtual LPVOID GetAppData() = 0;
|
||||||
virtual HRESULT SetAppData(LPD3DRM_APPDATA appData) = 0;
|
virtual HRESULT SetAppData(LPD3DRM_APPDATA appData) = 0;
|
||||||
@ -154,7 +154,7 @@ typedef IDirect3DRMTexture2* LPDIRECT3DRMTEXTURE2;
|
|||||||
|
|
||||||
typedef struct IDirect3DRMMaterial *LPDIRECT3DRMMATERIAL, **LPLPDIRECT3DRMMATERIAL;
|
typedef struct IDirect3DRMMaterial *LPDIRECT3DRMMATERIAL, **LPLPDIRECT3DRMMATERIAL;
|
||||||
|
|
||||||
struct IDirect3DRMMesh : public IUnknown {
|
struct IDirect3DRMMesh : virtual public IUnknown {
|
||||||
virtual HRESULT Clone(int flags, GUID iid, void** object) = 0;
|
virtual HRESULT Clone(int flags, GUID iid, void** object) = 0;
|
||||||
virtual HRESULT GetBox(D3DRMBOX* box) = 0;
|
virtual HRESULT GetBox(D3DRMBOX* box) = 0;
|
||||||
virtual HRESULT AddGroup(
|
virtual HRESULT AddGroup(
|
||||||
@ -186,22 +186,22 @@ struct IDirect3DRMMesh : public IUnknown {
|
|||||||
virtual HRESULT GetVertices(int groupIndex, int startIndex, int count, D3DRMVERTEX* vertices) = 0;
|
virtual HRESULT GetVertices(int groupIndex, int startIndex, int count, D3DRMVERTEX* vertices) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDirect3DRMLight : public IUnknown {
|
struct IDirect3DRMLight : virtual public IUnknown {
|
||||||
virtual HRESULT SetColorRGB(float r, float g, float b) = 0;
|
virtual HRESULT SetColorRGB(float r, float g, float b) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDirect3DRMLightArray : public IUnknown {
|
struct IDirect3DRMLightArray : virtual public IUnknown {
|
||||||
virtual DWORD GetSize() = 0;
|
virtual DWORD GetSize() = 0;
|
||||||
virtual HRESULT GetElement(int index, IDirect3DRMLight** light) const = 0;
|
virtual HRESULT GetElement(int index, IDirect3DRMLight** light) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDirect3DRMVisualArray : public IUnknown {
|
struct IDirect3DRMVisualArray : virtual public IUnknown {
|
||||||
virtual DWORD GetSize() = 0;
|
virtual DWORD GetSize() = 0;
|
||||||
virtual HRESULT GetElement(int index, IDirect3DRMVisual** visual) const = 0;
|
virtual HRESULT GetElement(int index, IDirect3DRMVisual** visual) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct IDirect3DRMFrameArray* LPDIRECT3DRMFRAMEARRAY;
|
typedef struct IDirect3DRMFrameArray* LPDIRECT3DRMFRAMEARRAY;
|
||||||
struct IDirect3DRMFrame : public IUnknown {
|
struct IDirect3DRMFrame : virtual public IUnknown {
|
||||||
virtual HRESULT SetAppData(LPD3DRM_APPDATA appData) = 0;
|
virtual HRESULT SetAppData(LPD3DRM_APPDATA appData) = 0;
|
||||||
virtual LPVOID GetAppData() = 0;
|
virtual LPVOID GetAppData() = 0;
|
||||||
virtual HRESULT AddChild(IDirect3DRMFrame* child) = 0;
|
virtual HRESULT AddChild(IDirect3DRMFrame* child) = 0;
|
||||||
@ -231,7 +231,7 @@ typedef IDirect3DRMFrame* LPDIRECT3DRMFRAME;
|
|||||||
struct IDirect3DRMFrame2 : public IDirect3DRMFrame {};
|
struct IDirect3DRMFrame2 : public IDirect3DRMFrame {};
|
||||||
typedef IDirect3DRMFrame2* LPDIRECT3DRMFRAME2;
|
typedef IDirect3DRMFrame2* LPDIRECT3DRMFRAME2;
|
||||||
|
|
||||||
struct IDirect3DRMFrameArray : public IUnknown {
|
struct IDirect3DRMFrameArray : virtual public IUnknown {
|
||||||
virtual DWORD GetSize() = 0;
|
virtual DWORD GetSize() = 0;
|
||||||
virtual HRESULT GetElement(DWORD index, IDirect3DRMFrame** frame) = 0;
|
virtual HRESULT GetElement(DWORD index, IDirect3DRMFrame** frame) = 0;
|
||||||
};
|
};
|
||||||
@ -242,7 +242,7 @@ struct D3DRMPICKDESC {
|
|||||||
float dist;
|
float dist;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDirect3DRMPickedArray : public IUnknown {
|
struct IDirect3DRMPickedArray : virtual public IUnknown {
|
||||||
virtual DWORD GetSize() = 0;
|
virtual DWORD GetSize() = 0;
|
||||||
virtual HRESULT GetPick(
|
virtual HRESULT GetPick(
|
||||||
DWORD index,
|
DWORD index,
|
||||||
@ -274,19 +274,19 @@ struct IDirect3DRMViewport : public IDirect3DRMObject {
|
|||||||
virtual HRESULT Pick(float x, float y, LPDIRECT3DRMPICKEDARRAY* pickedArray) = 0;
|
virtual HRESULT Pick(float x, float y, LPDIRECT3DRMPICKEDARRAY* pickedArray) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDirect3DRMWinDevice : public IUnknown {
|
struct IDirect3DRMWinDevice : virtual public IUnknown {
|
||||||
virtual HRESULT Activate() = 0;
|
virtual HRESULT Activate() = 0;
|
||||||
virtual HRESULT Paint() = 0;
|
virtual HRESULT Paint() = 0;
|
||||||
virtual void HandleActivate(WORD wParam) = 0;
|
virtual void HandleActivate(WORD wParam) = 0;
|
||||||
virtual void HandlePaint(void* p_dc) = 0;
|
virtual void HandlePaint(void* p_dc) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDirect3DRMViewportArray : public IUnknown {
|
struct IDirect3DRMViewportArray : virtual public IUnknown {
|
||||||
virtual DWORD GetSize() = 0;
|
virtual DWORD GetSize() = 0;
|
||||||
virtual HRESULT GetElement(int index, IDirect3DRMViewport** viewport) = 0;
|
virtual HRESULT GetElement(int index, IDirect3DRMViewport** viewport) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDirect3DRMDevice2 : public IUnknown {
|
struct IDirect3DRMDevice2 : virtual public IUnknown {
|
||||||
virtual unsigned long GetWidth() = 0;
|
virtual unsigned long GetWidth() = 0;
|
||||||
virtual unsigned long GetHeight() = 0;
|
virtual unsigned long GetHeight() = 0;
|
||||||
virtual HRESULT SetBufferCount(int count) = 0;
|
virtual HRESULT SetBufferCount(int count) = 0;
|
||||||
@ -305,7 +305,7 @@ struct IDirect3DRMDevice2 : public IUnknown {
|
|||||||
virtual HRESULT GetViewports(IDirect3DRMViewportArray** ppViewportArray) = 0;
|
virtual HRESULT GetViewports(IDirect3DRMViewportArray** ppViewportArray) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct IDirect3DRM : public IUnknown {
|
struct IDirect3DRM : virtual public IUnknown {
|
||||||
virtual HRESULT CreateDeviceFromD3D(
|
virtual HRESULT CreateDeviceFromD3D(
|
||||||
const IDirect3D2* d3d,
|
const IDirect3D2* d3d,
|
||||||
IDirect3DDevice2* d3dDevice,
|
IDirect3DDevice2* d3dDevice,
|
||||||
|
|||||||
@ -212,7 +212,7 @@ struct DDSURFACEDESC {
|
|||||||
typedef struct DDSURFACEDESC* LPDDSURFACEDESC;
|
typedef struct DDSURFACEDESC* LPDDSURFACEDESC;
|
||||||
|
|
||||||
typedef struct IDirectDraw* LPDIRECTDRAW;
|
typedef struct IDirectDraw* LPDIRECTDRAW;
|
||||||
struct IDirectDrawPalette : public IUnknown {
|
struct IDirectDrawPalette : virtual public IUnknown {
|
||||||
virtual HRESULT GetCaps(LPDWORD lpdwCaps) = 0;
|
virtual HRESULT GetCaps(LPDWORD lpdwCaps) = 0;
|
||||||
virtual HRESULT GetEntries(DWORD dwFlags, DWORD dwBase, DWORD dwNumEntries, LPPALETTEENTRY lpEntries) = 0;
|
virtual HRESULT GetEntries(DWORD dwFlags, DWORD dwBase, DWORD dwNumEntries, LPPALETTEENTRY lpEntries) = 0;
|
||||||
virtual HRESULT Initialize(LPDIRECTDRAW lpDD, DWORD dwFlags, LPPALETTEENTRY lpDDColorTable) = 0;
|
virtual HRESULT Initialize(LPDIRECTDRAW lpDD, DWORD dwFlags, LPPALETTEENTRY lpDDColorTable) = 0;
|
||||||
@ -220,14 +220,14 @@ struct IDirectDrawPalette : public IUnknown {
|
|||||||
};
|
};
|
||||||
typedef struct IDirectDrawPalette* LPDIRECTDRAWPALETTE;
|
typedef struct IDirectDrawPalette* LPDIRECTDRAWPALETTE;
|
||||||
|
|
||||||
struct IDirectDrawClipper : public IUnknown {
|
struct IDirectDrawClipper : virtual public IUnknown {
|
||||||
virtual HRESULT SetHWnd(DWORD unnamedParam1, HWND hWnd) = 0;
|
virtual HRESULT SetHWnd(DWORD unnamedParam1, HWND hWnd) = 0;
|
||||||
};
|
};
|
||||||
typedef IDirectDrawClipper* LPDIRECTDRAWCLIPPER;
|
typedef IDirectDrawClipper* LPDIRECTDRAWCLIPPER;
|
||||||
|
|
||||||
typedef void *LPDDBLTFX, *LPDDENUMSURFACESCALLBACK;
|
typedef void *LPDDBLTFX, *LPDDENUMSURFACESCALLBACK;
|
||||||
typedef struct IDirectDrawSurface* LPDIRECTDRAWSURFACE;
|
typedef struct IDirectDrawSurface* LPDIRECTDRAWSURFACE;
|
||||||
struct IDirectDrawSurface : public IUnknown {
|
struct IDirectDrawSurface : virtual public IUnknown {
|
||||||
virtual HRESULT AddAttachedSurface(LPDIRECTDRAWSURFACE lpDDSAttachedSurface) = 0;
|
virtual HRESULT AddAttachedSurface(LPDIRECTDRAWSURFACE lpDDSAttachedSurface) = 0;
|
||||||
virtual HRESULT Blt(
|
virtual HRESULT Blt(
|
||||||
LPRECT lpDestRect,
|
LPRECT lpDestRect,
|
||||||
@ -267,7 +267,7 @@ struct IDirectDrawSurface3 : public IDirectDrawSurface {};
|
|||||||
typedef IDirectDrawSurface3* LPDIRECTDRAWSURFACE3;
|
typedef IDirectDrawSurface3* LPDIRECTDRAWSURFACE3;
|
||||||
|
|
||||||
typedef HRESULT (*LPDDENUMMODESCALLBACK)(LPDDSURFACEDESC, LPVOID);
|
typedef HRESULT (*LPDDENUMMODESCALLBACK)(LPDDSURFACEDESC, LPVOID);
|
||||||
struct IDirectDraw : public IUnknown {
|
struct IDirectDraw : virtual public IUnknown {
|
||||||
virtual HRESULT CreateClipper(DWORD dwFlags, LPDIRECTDRAWCLIPPER* lplpDDClipper, IUnknown* pUnkOuter) = 0;
|
virtual HRESULT CreateClipper(DWORD dwFlags, LPDIRECTDRAWCLIPPER* lplpDDClipper, IUnknown* pUnkOuter) = 0;
|
||||||
virtual HRESULT CreatePalette(
|
virtual HRESULT CreatePalette(
|
||||||
DWORD dwFlags,
|
DWORD dwFlags,
|
||||||
|
|||||||
@ -4,6 +4,27 @@
|
|||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
ULONG IUnknown::AddRef()
|
||||||
|
{
|
||||||
|
m_refCount += 1;
|
||||||
|
return m_refCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
ULONG IUnknown::Release()
|
||||||
|
{
|
||||||
|
m_refCount -= 1;
|
||||||
|
if (m_refCount == 0) {
|
||||||
|
delete this;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return m_refCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
HRESULT IUnknown::QueryInterface(const GUID& riid, void** ppvObject)
|
||||||
|
{
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
|
||||||
static std::vector<std::pair<SDL_Window*, HWND>> sdl_hwnd_mapping;
|
static std::vector<std::pair<SDL_Window*, HWND>> sdl_hwnd_mapping;
|
||||||
|
|
||||||
SDL_Window* miniwin_GetSdlWindow(HWND hWnd)
|
SDL_Window* miniwin_GetSdlWindow(HWND hWnd)
|
||||||
|
|||||||
@ -1,8 +1,210 @@
|
|||||||
#include "miniwin_d3drm.h"
|
#include "miniwin_d3drm.h"
|
||||||
|
|
||||||
|
#include <SDL3/SDL.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
struct Direct3DRMDevice2Impl : public IDirect3DRMDevice2 {
|
||||||
|
unsigned long GetWidth() override { return 640; }
|
||||||
|
unsigned long GetHeight() override { return 480; }
|
||||||
|
HRESULT SetBufferCount(int count) override { return DD_OK; }
|
||||||
|
HRESULT GetBufferCount() override { return DD_OK; }
|
||||||
|
HRESULT SetShades(unsigned long shadeCount) override { return DD_OK; }
|
||||||
|
HRESULT GetShades() override { return DD_OK; }
|
||||||
|
HRESULT SetQuality(int quality) override { return DD_OK; }
|
||||||
|
HRESULT GetQuality() override { return DD_OK; }
|
||||||
|
HRESULT SetDither(int dither) override { return DD_OK; }
|
||||||
|
HRESULT GetDither() override { return DD_OK; }
|
||||||
|
HRESULT SetTextureQuality(D3DRMTEXTUREQUALITY quality) override { return DD_OK; }
|
||||||
|
D3DRMTEXTUREQUALITY GetTextureQuality() override { return D3DRMTEXTURE_NEAREST; }
|
||||||
|
HRESULT SetRenderMode(int mode) override { return DD_OK; }
|
||||||
|
HRESULT GetRenderMode() override { return DD_OK; }
|
||||||
|
HRESULT Update() override { return DD_OK; }
|
||||||
|
HRESULT GetViewports(IDirect3DRMViewportArray** ppViewportArray) override { return DD_OK; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Direct3DRMFrameImpl : public IDirect3DRMFrame2 {
|
||||||
|
HRESULT SetAppData(LPD3DRM_APPDATA appData) override { return DD_OK; }
|
||||||
|
LPVOID GetAppData() override { return 0; }
|
||||||
|
HRESULT AddChild(IDirect3DRMFrame* child) override
|
||||||
|
{
|
||||||
|
child->AddRef();
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
HRESULT DeleteChild(IDirect3DRMFrame* child) override
|
||||||
|
{
|
||||||
|
child->Release();
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
HRESULT SetSceneBackgroundRGB(float r, float g, float b) override { return DD_OK; }
|
||||||
|
HRESULT AddLight(IDirect3DRMLight* light) override
|
||||||
|
{
|
||||||
|
light->AddRef();
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
HRESULT GetLights(IDirect3DRMLightArray** lightArray) override { return DD_OK; }
|
||||||
|
HRESULT AddTransform(int combine, D3DRMMATRIX4D matrix) override { return DD_OK; }
|
||||||
|
HRESULT GetPosition(int index, D3DVECTOR* position) override { return DD_OK; }
|
||||||
|
HRESULT AddVisual(IDirect3DRMVisual* visual) override
|
||||||
|
{
|
||||||
|
visual->AddRef();
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
HRESULT DeleteVisual(IDirect3DRMVisual* visual) override
|
||||||
|
{
|
||||||
|
visual->Release();
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
HRESULT AddVisual(IDirect3DRMMesh* visual) override
|
||||||
|
{
|
||||||
|
visual->AddRef();
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
HRESULT DeleteVisual(IDirect3DRMMesh* visual) override
|
||||||
|
{
|
||||||
|
visual->Release();
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
HRESULT AddVisual(IDirect3DRMFrame* visual) override
|
||||||
|
{
|
||||||
|
visual->AddRef();
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
HRESULT DeleteVisual(IDirect3DRMFrame* visual) override
|
||||||
|
{
|
||||||
|
visual->Release();
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
HRESULT GetVisuals(IDirect3DRMVisualArray** visuals) override { return DD_OK; }
|
||||||
|
HRESULT SetTexture(const IDirect3DRMTexture* texture) override { return DD_OK; }
|
||||||
|
HRESULT GetTexture(IDirect3DRMTexture** texture) override { return DD_OK; }
|
||||||
|
HRESULT SetColor(float r, float g, float b, float a) override { return DD_OK; }
|
||||||
|
HRESULT SetColor(D3DCOLOR) override { return DD_OK; }
|
||||||
|
HRESULT SetColorRGB(float r, float g, float b) override { return DD_OK; }
|
||||||
|
HRESULT SetMaterialMode(D3DRMMATERIALMODE mode) override { return DD_OK; }
|
||||||
|
HRESULT GetChildren(IDirect3DRMFrameArray** children) override { return DD_OK; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Direct3DRMViewportImpl : public IDirect3DRMViewport {
|
||||||
|
Direct3DRMViewportImpl() : m_data(nullptr) {}
|
||||||
|
HRESULT Clone(void** ppObject) override { return DD_OK; }
|
||||||
|
HRESULT AddDestroyCallback(void (*cb)(IDirect3DRMObject*, void*), void* arg) override { return DD_OK; }
|
||||||
|
HRESULT DeleteDestroyCallback(void (*cb)(IDirect3DRMObject*, void*), void* arg) override { return DD_OK; }
|
||||||
|
HRESULT SetAppData(LPD3DRM_APPDATA appData) override
|
||||||
|
{
|
||||||
|
m_data = appData;
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
LPVOID GetAppData() override { return m_data; }
|
||||||
|
HRESULT SetName(const char* name) override { return DD_OK; }
|
||||||
|
HRESULT GetName(DWORD* size, char* name) override { return DD_OK; }
|
||||||
|
HRESULT GetClassName(DWORD* size, char* name) override { return DD_OK; }
|
||||||
|
HRESULT Render(IDirect3DRMFrame* group) override { return DD_OK; }
|
||||||
|
HRESULT ForceUpdate(int x, int y, int w, int h) override { return DD_OK; }
|
||||||
|
HRESULT Clear() override { return DD_OK; }
|
||||||
|
HRESULT SetCamera(IDirect3DRMFrame* camera) override { return DD_OK; }
|
||||||
|
HRESULT GetCamera(IDirect3DRMFrame** camera) override { return DD_OK; }
|
||||||
|
HRESULT SetProjection(D3DRMPROJECTIONTYPE type) override { return DD_OK; }
|
||||||
|
D3DRMPROJECTIONTYPE GetProjection() override { return D3DRMPROJECT_PERSPECTIVE; }
|
||||||
|
HRESULT SetFront(D3DVALUE z) override { return DD_OK; }
|
||||||
|
D3DVALUE GetFront() override { return 0; }
|
||||||
|
HRESULT SetBack(D3DVALUE z) override { return DD_OK; }
|
||||||
|
D3DVALUE GetBack() override { return 0; }
|
||||||
|
HRESULT SetField(D3DVALUE field) override { return DD_OK; }
|
||||||
|
D3DVALUE GetField() override { return 0; }
|
||||||
|
int GetWidth() override { return 640; }
|
||||||
|
int GetHeight() override { return 480; }
|
||||||
|
HRESULT Transform(D3DRMVECTOR4D* screen, D3DVECTOR* world) override { return DD_OK; }
|
||||||
|
HRESULT InverseTransform(D3DVECTOR* world, D3DRMVECTOR4D* screen) override { return DD_OK; }
|
||||||
|
HRESULT Pick(float x, float y, LPDIRECT3DRMPICKEDARRAY* pickedArray) override { return DD_OK; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
LPD3DRM_APPDATA m_data;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Direct3DRMLightImpl : public IDirect3DRMLight {
|
||||||
|
HRESULT SetColorRGB(float r, float g, float b) override { return DD_OK; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct Direct3DRMImpl : public IDirect3DRM2 {
|
||||||
|
// IUnknown interface
|
||||||
|
HRESULT QueryInterface(const GUID& riid, void** ppvObject) override
|
||||||
|
{
|
||||||
|
if (SDL_memcmp(&riid, &IID_IDirect3DRM2, sizeof(GUID)) == 0) {
|
||||||
|
this->IUnknown::AddRef();
|
||||||
|
*ppvObject = static_cast<IDirect3DRM2*>(this);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "DirectDrawImpl does not implement guid");
|
||||||
|
return E_NOINTERFACE;
|
||||||
|
}
|
||||||
|
// IDirect3DRM interface
|
||||||
|
HRESULT CreateDeviceFromD3D(const IDirect3D2* d3d, IDirect3DDevice2* d3dDevice, IDirect3DRMDevice2** outDevice)
|
||||||
|
override
|
||||||
|
{
|
||||||
|
*outDevice = static_cast<IDirect3DRMDevice2*>(new Direct3DRMDevice2Impl);
|
||||||
|
return S_OK;
|
||||||
|
}
|
||||||
|
HRESULT CreateDeviceFromSurface(
|
||||||
|
const GUID* guid,
|
||||||
|
IDirectDraw* dd,
|
||||||
|
IDirectDrawSurface* surface,
|
||||||
|
IDirect3DRMDevice2** outDevice
|
||||||
|
) override
|
||||||
|
{
|
||||||
|
assert(false && "unimplemented");
|
||||||
|
return DDERR_GENERIC;
|
||||||
|
}
|
||||||
|
HRESULT CreateTexture(D3DRMIMAGE* image, IDirect3DRMTexture2** outTexture) override
|
||||||
|
{
|
||||||
|
assert(false && "unimplemented");
|
||||||
|
return DDERR_GENERIC;
|
||||||
|
}
|
||||||
|
HRESULT CreateTextureFromSurface(LPDIRECTDRAWSURFACE surface, IDirect3DRMTexture2** outTexture) override
|
||||||
|
{
|
||||||
|
assert(false && "unimplemented");
|
||||||
|
return DDERR_GENERIC;
|
||||||
|
}
|
||||||
|
HRESULT CreateMesh(IDirect3DRMMesh** outMesh) override
|
||||||
|
{
|
||||||
|
assert(false && "unimplemented");
|
||||||
|
return DDERR_GENERIC;
|
||||||
|
}
|
||||||
|
HRESULT CreateMaterial(D3DVAL power, IDirect3DRMMaterial** outMaterial) override
|
||||||
|
{
|
||||||
|
assert(false && "unimplemented");
|
||||||
|
return DDERR_GENERIC;
|
||||||
|
}
|
||||||
|
HRESULT CreateLightRGB(D3DRMLIGHTTYPE type, D3DVAL r, D3DVAL g, D3DVAL b, IDirect3DRMLight** outLight) override
|
||||||
|
{
|
||||||
|
*outLight = static_cast<IDirect3DRMLight*>(new Direct3DRMLightImpl);
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
HRESULT CreateFrame(IDirect3DRMFrame* parent, IDirect3DRMFrame2** outFrame) override
|
||||||
|
{
|
||||||
|
*outFrame = static_cast<IDirect3DRMFrame2*>(new Direct3DRMFrameImpl);
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
HRESULT CreateViewport(
|
||||||
|
IDirect3DRMDevice2* device,
|
||||||
|
IDirect3DRMFrame* camera,
|
||||||
|
int x,
|
||||||
|
int y,
|
||||||
|
int width,
|
||||||
|
int height,
|
||||||
|
IDirect3DRMViewport** outViewport
|
||||||
|
) override
|
||||||
|
{
|
||||||
|
*outViewport = static_cast<IDirect3DRMViewport*>(new Direct3DRMViewportImpl);
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
HRESULT SetDefaultTextureShades(unsigned int count) override { return DD_OK; }
|
||||||
|
HRESULT SetDefaultTextureColors(unsigned int count) override { return DD_OK; }
|
||||||
|
};
|
||||||
|
|
||||||
HRESULT WINAPI Direct3DRMCreate(IDirect3DRM** direct3DRM)
|
HRESULT WINAPI Direct3DRMCreate(IDirect3DRM** direct3DRM)
|
||||||
{
|
{
|
||||||
return DDERR_GENERIC;
|
*direct3DRM = new Direct3DRMImpl;
|
||||||
|
return DD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
D3DCOLOR D3DRMCreateColorRGBA(D3DVALUE red, D3DVALUE green, D3DVALUE blue, D3DVALUE alpha)
|
D3DCOLOR D3DRMCreateColorRGBA(D3DVALUE red, D3DVALUE green, D3DVALUE blue, D3DVALUE alpha)
|
||||||
|
|||||||
@ -4,32 +4,81 @@
|
|||||||
|
|
||||||
#include <SDL3/SDL.h>
|
#include <SDL3/SDL.h>
|
||||||
|
|
||||||
struct DirectDrawImpl : public IDirectDraw2, public IDirect3D2 {
|
struct DirectDrawSurfaceImpl : public IDirectDrawSurface3 {
|
||||||
DirectDrawImpl() : m_refCount(1) {}
|
|
||||||
// IUnknown interface
|
// IUnknown interface
|
||||||
ULONG AddRef() override
|
HRESULT QueryInterface(const GUID& riid, void** ppvObject) override
|
||||||
{
|
{
|
||||||
m_refCount += 1;
|
if (SDL_memcmp(&riid, &IID_IDirectDrawSurface3, sizeof(GUID)) == 0) {
|
||||||
return m_refCount;
|
this->IUnknown::AddRef();
|
||||||
}
|
*ppvObject = static_cast<IDirectDrawSurface3*>(this);
|
||||||
ULONG Release() override
|
return S_OK;
|
||||||
{
|
|
||||||
m_refCount -= 1;
|
|
||||||
if (m_refCount == 0) {
|
|
||||||
delete this;
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
return m_refCount;
|
SDL_LogError(SDL_LOG_CATEGORY_APPLICATION, "DirectDrawImpl does not implement guid");
|
||||||
|
return E_NOINTERFACE;
|
||||||
}
|
}
|
||||||
|
// IDirectDrawSurface interface
|
||||||
|
HRESULT AddAttachedSurface(LPDIRECTDRAWSURFACE lpDDSAttachedSurface) override { return DD_OK; }
|
||||||
|
HRESULT Blt(
|
||||||
|
LPRECT lpDestRect,
|
||||||
|
LPDIRECTDRAWSURFACE lpDDSrcSurface,
|
||||||
|
LPRECT lpSrcRect,
|
||||||
|
DWORD dwFlags,
|
||||||
|
LPDDBLTFX lpDDBltFx
|
||||||
|
) override
|
||||||
|
{
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
HRESULT BltFast(DWORD dwX, DWORD dwY, LPDIRECTDRAWSURFACE lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwTrans) override
|
||||||
|
{
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
HRESULT DeleteAttachedSurface(DWORD dwFlags, LPDIRECTDRAWSURFACE lpDDSAttachedSurface) override { return DD_OK; }
|
||||||
|
HRESULT Flip(LPDIRECTDRAWSURFACE lpDDSurfaceTargetOverride, DWORD dwFlags) override { return DDERR_GENERIC; }
|
||||||
|
HRESULT GetAttachedSurface(LPDDSCAPS lpDDSCaps, LPDIRECTDRAWSURFACE* lplpDDAttachedSurface) override
|
||||||
|
{
|
||||||
|
return DDERR_GENERIC;
|
||||||
|
}
|
||||||
|
HRESULT GetCaps(LPDDSCAPS lpDDSCaps) override { return DD_OK; }
|
||||||
|
HRESULT GetDC(HDC* lphDC) override { return DD_OK; }
|
||||||
|
HRESULT GetOverlayPosition(LPLONG lplX, LPLONG lplY) override { return DD_OK; }
|
||||||
|
HRESULT GetPalette(LPDIRECTDRAWPALETTE* lplpDDPalette) override { return DDERR_GENERIC; }
|
||||||
|
HRESULT GetPixelFormat(LPDDPIXELFORMAT lpDDPixelFormat) override
|
||||||
|
{
|
||||||
|
memset(lpDDPixelFormat, 0, sizeof(*lpDDPixelFormat));
|
||||||
|
lpDDPixelFormat->dwFlags = DDPF_RGB;
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
HRESULT GetSurfaceDesc(LPDDSURFACEDESC lpDDSurfaceDesc) override { return DD_OK; }
|
||||||
|
HRESULT Initialize(LPDIRECTDRAW lpDD, LPDDSURFACEDESC lpDDSurfaceDesc) override { return DD_OK; }
|
||||||
|
HRESULT IsLost() override { return DD_OK; }
|
||||||
|
HRESULT Lock(LPRECT lpDestRect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD dwFlags, HANDLE hEvent) override
|
||||||
|
{
|
||||||
|
return DD_OK;
|
||||||
|
}
|
||||||
|
HRESULT ReleaseDC(HDC hDC) override { return DD_OK; }
|
||||||
|
HRESULT Restore() override { return DD_OK; }
|
||||||
|
HRESULT SetClipper(LPDIRECTDRAWCLIPPER lpDDClipper) override { return DD_OK; }
|
||||||
|
HRESULT SetColorKey(DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) override { return DD_OK; }
|
||||||
|
HRESULT SetPalette(LPDIRECTDRAWPALETTE lpDDPalette) override { return DD_OK; }
|
||||||
|
HRESULT Unlock(LPVOID lpSurfaceData) override { return DD_OK; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DirectDrawClipperImpl : public IDirectDrawClipper {
|
||||||
|
// IDirectDrawClipper interface
|
||||||
|
HRESULT SetHWnd(DWORD unnamedParam1, HWND hWnd) override { return DD_OK; }
|
||||||
|
};
|
||||||
|
|
||||||
|
struct DirectDrawImpl : public IDirectDraw2, public IDirect3D2 {
|
||||||
|
// IUnknown interface
|
||||||
HRESULT QueryInterface(const GUID& riid, void** ppvObject) override
|
HRESULT QueryInterface(const GUID& riid, void** ppvObject) override
|
||||||
{
|
{
|
||||||
if (SDL_memcmp(&riid, &IID_IDirectDraw2, sizeof(GUID)) == 0) {
|
if (SDL_memcmp(&riid, &IID_IDirectDraw2, sizeof(GUID)) == 0) {
|
||||||
AddRef();
|
this->IUnknown::AddRef();
|
||||||
*ppvObject = static_cast<IDirectDraw2*>(this);
|
*ppvObject = static_cast<IDirectDraw2*>(this);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
if (SDL_memcmp(&riid, &IID_IDirect3D2, sizeof(GUID)) == 0) {
|
if (SDL_memcmp(&riid, &IID_IDirect3D2, sizeof(GUID)) == 0) {
|
||||||
AddRef();
|
this->IUnknown::AddRef();
|
||||||
*ppvObject = static_cast<IDirect3D2*>(this);
|
*ppvObject = static_cast<IDirect3D2*>(this);
|
||||||
return S_OK;
|
return S_OK;
|
||||||
}
|
}
|
||||||
@ -39,7 +88,9 @@ struct DirectDrawImpl : public IDirectDraw2, public IDirect3D2 {
|
|||||||
// IDirecdtDraw interface
|
// IDirecdtDraw interface
|
||||||
HRESULT CreateClipper(DWORD dwFlags, LPDIRECTDRAWCLIPPER* lplpDDClipper, IUnknown* pUnkOuter) override
|
HRESULT CreateClipper(DWORD dwFlags, LPDIRECTDRAWCLIPPER* lplpDDClipper, IUnknown* pUnkOuter) override
|
||||||
{
|
{
|
||||||
return DDERR_GENERIC;
|
*lplpDDClipper = static_cast<IDirectDrawClipper*>(new DirectDrawClipperImpl);
|
||||||
|
|
||||||
|
return DD_OK;
|
||||||
}
|
}
|
||||||
HRESULT CreatePalette(
|
HRESULT CreatePalette(
|
||||||
DWORD dwFlags,
|
DWORD dwFlags,
|
||||||
@ -53,7 +104,9 @@ struct DirectDrawImpl : public IDirectDraw2, public IDirect3D2 {
|
|||||||
HRESULT CreateSurface(LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRECTDRAWSURFACE* lplpDDSurface, IUnknown* pUnkOuter)
|
HRESULT CreateSurface(LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRECTDRAWSURFACE* lplpDDSurface, IUnknown* pUnkOuter)
|
||||||
override
|
override
|
||||||
{
|
{
|
||||||
return DDERR_GENERIC;
|
*lplpDDSurface = static_cast<IDirectDrawSurface*>(new DirectDrawSurfaceImpl);
|
||||||
|
|
||||||
|
return DD_OK;
|
||||||
}
|
}
|
||||||
HRESULT EnumDisplayModes(
|
HRESULT EnumDisplayModes(
|
||||||
DWORD dwFlags,
|
DWORD dwFlags,
|
||||||
@ -80,12 +133,10 @@ struct DirectDrawImpl : public IDirectDraw2, public IDirect3D2 {
|
|||||||
// IDirect3D2 interface
|
// IDirect3D2 interface
|
||||||
HRESULT CreateDevice(const GUID& guid, void* pBackBuffer, IDirect3DDevice2** ppDirect3DDevice) override
|
HRESULT CreateDevice(const GUID& guid, void* pBackBuffer, IDirect3DDevice2** ppDirect3DDevice) override
|
||||||
{
|
{
|
||||||
return DDERR_GENERIC;
|
*ppDirect3DDevice = new IDirect3DDevice2;
|
||||||
|
return DD_OK;
|
||||||
}
|
}
|
||||||
HRESULT EnumDevices(LPD3DENUMDEVICESCALLBACK cb, void* ctx) override;
|
HRESULT EnumDevices(LPD3DENUMDEVICESCALLBACK cb, void* ctx) override;
|
||||||
|
|
||||||
private:
|
|
||||||
int m_refCount;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
HRESULT DirectDrawImpl::EnumDevices(LPD3DENUMDEVICESCALLBACK cb, void* ctx)
|
HRESULT DirectDrawImpl::EnumDevices(LPD3DENUMDEVICESCALLBACK cb, void* ctx)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user