TRX/lib/ddraw/DirectDraw.hpp

90 lines
3 KiB
C++
Raw Normal View History

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