mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-12 02:41:14 +00:00
72 lines
1.5 KiB
C++
72 lines
1.5 KiB
C++
#include "miniwin_ddraw.h"
|
|
|
|
#include <SDL3/SDL.h>
|
|
|
|
HRESULT IDirectDraw::EnumDisplayModes(
|
|
DWORD dwFlags,
|
|
LPDDSURFACEDESC lpDDSurfaceDesc,
|
|
LPVOID lpContext,
|
|
LPDDENUMMODESCALLBACK lpEnumModesCallback
|
|
)
|
|
{
|
|
DDSURFACEDESC ddsd = {};
|
|
ddsd.dwSize = sizeof(DDSURFACEDESC);
|
|
ddsd.dwFlags = DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT;
|
|
ddsd.dwWidth = 640;
|
|
ddsd.dwHeight = 480;
|
|
ddsd.lPitch = 0;
|
|
|
|
ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT);
|
|
ddsd.ddpfPixelFormat.dwFlags = DDPF_RGB | D3DDD_DEVICEZBUFFERBITDEPTH;
|
|
ddsd.ddpfPixelFormat.dwRGBBitCount = 16; // Game only accpets 8 or 16
|
|
|
|
if (!lpEnumModesCallback(&ddsd, lpContext)) {
|
|
return DDERR_GENERIC;
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT IDirectDraw::GetCaps(LPDDCAPS lpDDDriverCaps, LPDDCAPS lpDDHELCaps)
|
|
{
|
|
if (lpDDDriverCaps) {
|
|
memset(lpDDDriverCaps, 0, sizeof(DDCAPS));
|
|
lpDDDriverCaps->dwSize = sizeof(DDCAPS);
|
|
lpDDDriverCaps->dwCaps = 0;
|
|
}
|
|
|
|
if (lpDDHELCaps) {
|
|
memset(lpDDHELCaps, 0, sizeof(DDCAPS));
|
|
lpDDHELCaps->dwSize = sizeof(DDCAPS);
|
|
lpDDHELCaps->dwCaps = 0;
|
|
}
|
|
|
|
return S_OK;
|
|
}
|
|
|
|
HRESULT DirectDrawCreate(LPGUID lpGuid, LPDIRECTDRAW* lplpDD, IUnknown* pUnkOuter)
|
|
{
|
|
if (!lplpDD) {
|
|
return DDERR_INVALIDPARAMS;
|
|
}
|
|
|
|
*lplpDD = new IDirectDraw();
|
|
|
|
return DD_OK;
|
|
}
|
|
|
|
HRESULT DirectDrawEnumerate(LPDDENUMCALLBACKA cb, void* context)
|
|
{
|
|
int numDrivers = SDL_GetNumVideoDrivers();
|
|
|
|
for (int i = 0; i < numDrivers; ++i) {
|
|
const char* driverName = SDL_GetVideoDriver(i);
|
|
|
|
if (!cb(NULL, (LPSTR) driverName, NULL, context)) {
|
|
return DDERR_GENERIC;
|
|
}
|
|
}
|
|
|
|
return DD_OK;
|
|
}
|