mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-02-03 12:31:15 +00:00
* Hint texture intent to renderer * improve transparancy for 32bit rendering * Align OpenGL ES 2.0 with SDL_GPU's 2D rendering
67 lines
2.0 KiB
C++
67 lines
2.0 KiB
C++
#pragma once
|
|
|
|
#include "d3drmrenderer.h"
|
|
#include "framebuffer_impl.h"
|
|
#include "miniwin/d3d.h"
|
|
#include "miniwin/ddraw.h"
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
extern SDL_Window* DDWindow;
|
|
extern Direct3DRMRenderer* DDRenderer;
|
|
|
|
inline static SDL_Rect ConvertRect(const RECT* r)
|
|
{
|
|
return {r->left, r->top, r->right - r->left, r->bottom - r->top};
|
|
}
|
|
|
|
struct DirectDrawImpl : public IDirectDraw2, public IDirect3D2 {
|
|
// IUnknown interface
|
|
HRESULT QueryInterface(const GUID& riid, void** ppvObject) override;
|
|
// IDirectDraw interface
|
|
HRESULT CreateClipper(DWORD dwFlags, LPDIRECTDRAWCLIPPER* lplpDDClipper, IUnknown* pUnkOuter) override;
|
|
HRESULT
|
|
CreatePalette(
|
|
DDPixelCaps dwFlags,
|
|
LPPALETTEENTRY lpColorTable,
|
|
LPDIRECTDRAWPALETTE* lplpDDPalette,
|
|
IUnknown* pUnkOuter
|
|
) override;
|
|
HRESULT CreateSurface(LPDDSURFACEDESC lpDDSurfaceDesc, LPDIRECTDRAWSURFACE* lplpDDSurface, IUnknown* pUnkOuter)
|
|
override;
|
|
HRESULT EnumDisplayModes(
|
|
DWORD dwFlags,
|
|
LPDDSURFACEDESC lpDDSurfaceDesc,
|
|
LPVOID lpContext,
|
|
LPDDENUMMODESCALLBACK lpEnumModesCallback
|
|
) override;
|
|
HRESULT FlipToGDISurface() override;
|
|
HRESULT GetCaps(LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDHELCaps) override;
|
|
HRESULT GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc) override;
|
|
HRESULT RestoreDisplayMode() override;
|
|
HRESULT SetCooperativeLevel(HWND hWnd, DDSCLFlags dwFlags) override;
|
|
HRESULT SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP) override;
|
|
// IDirect3D2 interface
|
|
HRESULT CreateDevice(const GUID& guid, IDirectDrawSurface* pBackBuffer, IDirect3DDevice2** ppDirect3DDevice)
|
|
override;
|
|
HRESULT EnumDevices(LPD3DENUMDEVICESCALLBACK cb, void* ctx) override;
|
|
|
|
private:
|
|
FrameBufferImpl* m_frameBuffer;
|
|
int m_virtualWidth = 0;
|
|
int m_virtualHeight = 0;
|
|
};
|
|
|
|
HRESULT DirectDrawEnumerate(LPDDENUMCALLBACKA cb, void* context);
|
|
|
|
HRESULT DirectDrawCreate(LPGUID lpGuid, LPDIRECTDRAW* lplpDD, IUnknown* pUnkOuter);
|
|
|
|
void EnumDevice(
|
|
LPD3DENUMDEVICESCALLBACK cb,
|
|
void* ctx,
|
|
const char* name,
|
|
D3DDEVICEDESC* halDesc,
|
|
D3DDEVICEDESC* helDesc,
|
|
GUID deviceGuid
|
|
);
|