2021-11-12 20:03:04 +01:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "Renderer.hpp"
|
|
|
|
#include "Unknown.hpp"
|
|
|
|
#include "ddraw.hpp"
|
|
|
|
|
|
|
|
#include <glrage/GLRage.hpp>
|
|
|
|
|
|
|
|
#include <cstdint>
|
|
|
|
|
|
|
|
namespace glrage {
|
|
|
|
namespace ddraw {
|
|
|
|
|
2021-11-14 23:59:19 +01:00
|
|
|
class DirectDraw
|
|
|
|
: public Unknown
|
|
|
|
, public IDirectDraw
|
|
|
|
, public IDirectDraw2
|
2021-11-12 20:03:04 +01:00
|
|
|
{
|
|
|
|
public:
|
|
|
|
DirectDraw();
|
|
|
|
virtual ~DirectDraw();
|
|
|
|
|
|
|
|
/*** IUnknown methods ***/
|
|
|
|
virtual HRESULT WINAPI QueryInterface(REFIID riid, LPVOID* ppvObj);
|
|
|
|
virtual ULONG WINAPI AddRef();
|
|
|
|
virtual ULONG WINAPI Release();
|
|
|
|
|
|
|
|
/*** IDirectDraw methods ***/
|
|
|
|
HRESULT WINAPI Compact();
|
2021-11-14 23:59:19 +01:00
|
|
|
HRESULT WINAPI CreateClipper(DWORD dwFlags,
|
|
|
|
LPDIRECTDRAWCLIPPER* lplpDDClipper,
|
|
|
|
IUnknown* pUnkOuter);
|
|
|
|
HRESULT WINAPI CreatePalette(DWORD dwFlags,
|
|
|
|
LPPALETTEENTRY lpDDColorArray,
|
|
|
|
LPDIRECTDRAWPALETTE* lplpDDPalette,
|
|
|
|
IUnknown* pUnkOuter);
|
2021-11-12 20:03:04 +01:00
|
|
|
HRESULT WINAPI CreateSurface(LPDDSURFACEDESC lpDDSurfaceDesc,
|
2021-11-14 23:59:19 +01:00
|
|
|
LPDIRECTDRAWSURFACE* lplpDDSurface,
|
|
|
|
IUnknown* pUnkOuter);
|
|
|
|
HRESULT WINAPI DuplicateSurface(LPDIRECTDRAWSURFACE lpDDSurface,
|
|
|
|
LPDIRECTDRAWSURFACE* lplpDupDDSurface);
|
2021-11-12 20:03:04 +01:00
|
|
|
HRESULT WINAPI EnumDisplayModes(DWORD dwFlags,
|
2021-11-14 23:59:19 +01:00
|
|
|
LPDDSURFACEDESC lpDDSurfaceDesc,
|
|
|
|
LPVOID lpContext,
|
2021-11-12 20:03:04 +01:00
|
|
|
LPDDENUMMODESCALLBACK lpEnumModesCallback);
|
2021-11-14 23:59:19 +01:00
|
|
|
HRESULT WINAPI EnumSurfaces(DWORD dwFlags,
|
|
|
|
LPDDSURFACEDESC lpDDSurfaceDesc,
|
|
|
|
LPVOID lpContext,
|
|
|
|
LPDDENUMSURFACESCALLBACK lpEnumSurfacesCallback);
|
2021-11-12 20:03:04 +01:00
|
|
|
HRESULT WINAPI FlipToGDISurface();
|
|
|
|
HRESULT WINAPI GetCaps(LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDHELCaps);
|
|
|
|
HRESULT WINAPI GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc);
|
|
|
|
HRESULT WINAPI GetFourCCCodes(LPDWORD lpNumCodes, LPDWORD lpCodes);
|
|
|
|
HRESULT WINAPI GetGDISurface(LPDIRECTDRAWSURFACE* lplpGDIDDSSurface);
|
|
|
|
HRESULT WINAPI GetMonitorFrequency(LPDWORD lpdwFrequency);
|
|
|
|
HRESULT WINAPI GetScanLine(LPDWORD lpdwScanLine);
|
|
|
|
HRESULT WINAPI GetVerticalBlankStatus(LPBOOL lpbIsInVB);
|
|
|
|
HRESULT WINAPI Initialize(GUID* lpGUID);
|
|
|
|
HRESULT WINAPI RestoreDisplayMode();
|
|
|
|
HRESULT WINAPI SetCooperativeLevel(HWND hWnd, DWORD dwFlags);
|
|
|
|
HRESULT WINAPI SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP);
|
|
|
|
HRESULT WINAPI WaitForVerticalBlank(DWORD dwFlags, HANDLE hEvent);
|
|
|
|
|
|
|
|
/*** IDirectDraw2 methods ***/
|
2021-11-14 23:59:19 +01:00
|
|
|
HRESULT WINAPI SetDisplayMode(DWORD dwWidth,
|
|
|
|
DWORD dwHeight,
|
|
|
|
DWORD dwBPP,
|
2021-11-12 20:03:04 +01:00
|
|
|
DWORD dwRefreshRate,
|
|
|
|
DWORD dwFlags); // updated in v2
|
2021-11-14 23:59:19 +01:00
|
|
|
HRESULT WINAPI GetAvailableVidMem(LPDDSCAPS lpDDSCaps,
|
|
|
|
LPDWORD lpdwTotal,
|
2021-11-12 20:03:04 +01:00
|
|
|
LPDWORD lpdwFree); // added in v2
|
|
|
|
|
|
|
|
private:
|
|
|
|
const uint32_t DEFAULT_WIDTH = 640;
|
|
|
|
const uint32_t DEFAULT_HEIGHT = 480;
|
|
|
|
const uint32_t DEFAULT_BITS = 16;
|
|
|
|
const uint32_t DEFAULT_REFRESH_RATE = 60;
|
|
|
|
|
|
|
|
Context& m_context = GLRage::getContext();
|
|
|
|
Renderer m_renderer;
|
|
|
|
uint32_t m_width = DEFAULT_WIDTH;
|
|
|
|
uint32_t m_height = DEFAULT_HEIGHT;
|
|
|
|
uint32_t m_refreshRate = DEFAULT_REFRESH_RATE;
|
|
|
|
uint32_t m_bits = DEFAULT_BITS;
|
|
|
|
};
|
|
|
|
|
|
|
|
} // namespace ddraw
|
|
|
|
} // namespace glrage
|