Additional strict type checking in DirectX implementation (#91)

This commit is contained in:
Anders Jenbo 2025-05-15 23:18:21 +02:00 committed by GitHub
parent 68f209b18c
commit 96c962f857
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
16 changed files with 311 additions and 239 deletions

View File

@ -354,17 +354,17 @@ DWORD CConfigApp::GetConditionalDeviceRenderBitDepth() const
if (GetHardwareDeviceColorModel() != D3DCOLOR_NONE) {
return 0;
}
return m_device->m_HELDesc.dwDeviceRenderBitDepth & DDBD_8;
return (m_device->m_HELDesc.dwDeviceRenderBitDepth & DDBD_8) == DDBD_8;
}
// FUNCTION: CONFIG 0x004037e0
DWORD CConfigApp::GetDeviceRenderBitStatus() const
{
if (GetHardwareDeviceColorModel() != D3DCOLOR_NONE) {
return m_device->m_HWDesc.dwDeviceRenderBitDepth & DDBD_16;
return (m_device->m_HWDesc.dwDeviceRenderBitDepth & DDBD_16) == DDBD_16;
}
else {
return m_device->m_HELDesc.dwDeviceRenderBitDepth & DDBD_16;
return (m_device->m_HELDesc.dwDeviceRenderBitDepth & DDBD_16) == DDBD_16;
}
}

View File

@ -106,7 +106,7 @@ LegoTextureInfo* LegoTextureInfo::Create(const char* p_name, LegoTexture* p_text
for (i = 0; i < sizeOfArray(entries); i++) {
if (i < image->GetCount()) {
entries[i].peFlags = 0;
entries[i].peFlags = PC_NONE;
entries[i].peRed = image->GetPalette()->colors[i].r;
entries[i].peGreen = image->GetPalette()->colors[i].g;
entries[i].peBlue = image->GetPalette()->colors[i].b;

View File

@ -745,7 +745,7 @@ void WriteDefaultTexture(LegoStorage* p_storage, const char* p_name)
if (textureInfo->m_palette->GetEntries(0, 0, sizeOfArray(entries), entries) == DD_OK) {
MxS32 i;
for (i = 0; i < sizeOfArray(entries); i++) {
if (entries[i].peFlags != 0) {
if (entries[i].peFlags != PC_NONE) {
break;
}

View File

@ -135,7 +135,7 @@ MxResult LegoVideoManager::Create(MxVideoParam& p_videoParam, MxU32 p_frequencyM
m_direct3d->SetDevice(deviceEnumerate, driver, device);
if (!driver->m_ddCaps.dwCaps2 && driver->m_ddCaps.dwSVBRops[7] != 2) {
if (driver->m_ddCaps.dwCaps2 != DDCAPS2_CERTIFIED && driver->m_ddCaps.dwSVBRops[7] != 2) {
p_videoParam.Flags().SetLacksLightSupport(TRUE);
}
else {
@ -819,13 +819,15 @@ MxResult LegoVideoManager::ConfigureD3DRM()
MxAssignedDevice* assignedDevice = m_direct3d->AssignedDevice();
if (assignedDevice && assignedDevice->GetFlags() & MxAssignedDevice::c_hardwareMode) {
if (assignedDevice->GetDesc().dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_LINEAR) {
if ((assignedDevice->GetDesc().dpcTriCaps.dwTextureFilterCaps & D3DPTFILTERCAPS_LINEAR) ==
D3DPTFILTERCAPS_LINEAR) {
d3drm->SetTextureQuality(D3DRMTEXTURE_LINEAR);
}
d3drm->SetDither(TRUE);
if (assignedDevice->GetDesc().dpcTriCaps.dwShadeCaps & D3DPSHADECAPS_ALPHAFLATBLEND) {
if ((assignedDevice->GetDesc().dpcTriCaps.dwShadeCaps & D3DPSHADECAPS_ALPHAFLATBLEND) ==
D3DPSHADECAPS_ALPHAFLATBLEND) {
d3drm->SetRenderMode(D3DRMRENDERMODE_BLENDEDTRANSPARENCY);
}
}

View File

@ -66,7 +66,7 @@ int GetBitsPerPixel(IDirectDrawSurface* pSurface)
result = pSurface->GetPixelFormat(&pixelFormat);
assert(result == DD_OK);
assert(pixelFormat.dwFlags & DDPF_RGB);
assert((pixelFormat.dwFlags & DDPF_RGB) == DDPF_RGB);
return pixelFormat.dwRGBBitCount;
}

View File

@ -342,8 +342,8 @@ unsigned char LegoDeviceEnumerate::FUN_1009d3d0(Direct3DDeviceInfo& p_device)
}
if (p_device.m_HWDesc.dcmColorModel != D3DCOLOR_NONE) {
if (p_device.m_HWDesc.dwDeviceZBufferBitDepth & DDBD_16 &&
p_device.m_HWDesc.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_PERSPECTIVE) {
if ((p_device.m_HWDesc.dwDeviceZBufferBitDepth & DDBD_16) == DDBD_16 &&
(p_device.m_HWDesc.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_PERSPECTIVE) == D3DPTEXTURECAPS_PERSPECTIVE) {
return TRUE;
}
else {

View File

@ -132,7 +132,8 @@ BOOL MxDirect3D::D3DSetMode()
return FALSE;
}
if (m_currentDeviceInfo->m_desc.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_PERSPECTIVE) {
if ((m_currentDeviceInfo->m_desc.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_PERSPECTIVE) ==
D3DPTEXTURECAPS_PERSPECTIVE) {
m_bTexturesDisabled = FALSE;
}
else {
@ -144,7 +145,8 @@ BOOL MxDirect3D::D3DSetMode()
}
}
else {
if (m_currentDeviceInfo->m_desc.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_PERSPECTIVE) {
if ((m_currentDeviceInfo->m_desc.dpcTriCaps.dwTextureCaps & D3DPTEXTURECAPS_PERSPECTIVE) ==
D3DPTEXTURECAPS_PERSPECTIVE) {
m_bTexturesDisabled = FALSE;
}
else {
@ -221,25 +223,25 @@ BOOL MxDirect3D::D3DSetMode()
int MxDirect3D::ZBufferDepth(MxAssignedDevice* p_assignedDevice)
{
int depth;
DWORD deviceDepth;
DDBitDepths deviceDepth;
if (p_assignedDevice->m_desc.dwFlags & D3DDD_DEVICEZBUFFERBITDEPTH) {
if ((p_assignedDevice->m_desc.dwFlags & D3DDD_DEVICEZBUFFERBITDEPTH) == D3DDD_DEVICEZBUFFERBITDEPTH) {
deviceDepth = p_assignedDevice->m_desc.dwDeviceZBufferBitDepth;
}
else {
deviceDepth = 0;
return -1;
}
if (deviceDepth & DDBD_32) {
if ((deviceDepth & DDBD_32) == DDBD_32) {
depth = 32;
}
else if (deviceDepth & DDBD_24) {
else if ((deviceDepth & DDBD_24) == DDBD_24) {
depth = 24;
}
else if (deviceDepth & DDBD_16) {
else if ((deviceDepth & DDBD_16) == DDBD_16) {
depth = 16;
}
else if (deviceDepth & DDBD_8) {
else if ((deviceDepth & DDBD_8) == DDBD_8) {
depth = 8;
}
else {

View File

@ -75,7 +75,7 @@ int MxDirectDraw::GetPrimaryBitDepth()
pDDraw->GetDisplayMode(&ddsd);
dwRGBBitCount = ddsd.ddpfPixelFormat.dwRGBBitCount;
g_isPaletteIndexed8 = (ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) != 0;
g_isPaletteIndexed8 = (ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) == DDPF_PALETTEINDEXED8;
pDDraw->Release();
}
@ -406,7 +406,7 @@ BOOL MxDirectDraw::DDSetMode(int width, int height, int bpp)
return FALSE;
}
if (ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) {
if ((ddsd.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) == DDPF_PALETTEINDEXED8) {
m_bPrimaryPalettized = TRUE;
}
else {

View File

@ -302,7 +302,7 @@ void MxDisplaySurface::Destroy()
// FUNCTION: BETA10 0x1013fe15
void MxDisplaySurface::SetPalette(MxPalette* p_palette)
{
if (m_surfaceDesc.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) {
if ((m_surfaceDesc.ddpfPixelFormat.dwFlags & DDPF_PALETTEINDEXED8) == DDPF_PALETTEINDEXED8) {
m_ddSurface1->SetPalette(p_palette->CreateNativePalette());
m_ddSurface2->SetPalette(p_palette->CreateNativePalette());
@ -895,9 +895,9 @@ void MxDisplaySurface::Display(MxS32 p_left, MxS32 p_top, MxS32 p_left2, MxS32 p
data.dwSize = sizeof(data);
data.dwDDFX = 8;
if (m_ddSurface1->Blt((LPRECT) &b, m_ddSurface2, (LPRECT) &a, 0, &data) == DDERR_SURFACELOST) {
if (m_ddSurface1->Blt((LPRECT) &b, m_ddSurface2, (LPRECT) &a, DDBLT_NONE, &data) == DDERR_SURFACELOST) {
m_ddSurface1->Restore();
m_ddSurface1->Blt((LPRECT) &b, m_ddSurface2, (LPRECT) &a, 0, &data);
m_ddSurface1->Blt((LPRECT) &b, m_ddSurface2, (LPRECT) &a, DDBLT_NONE, &data);
}
}
}

View File

@ -6,70 +6,70 @@
// GLOBAL: LEGO1 0x10102188
// GLOBAL: BETA10 0x10203558
PALETTEENTRY g_defaultPaletteEntries[256] = {
{0u, 0u, 0u, 0u}, {128u, 0u, 0u, 0u}, {0u, 128u, 0u, 0u}, {128u, 128u, 0u, 0u},
{0u, 0u, 128u, 0u}, {128u, 0u, 128u, 0u}, {0u, 128u, 128u, 0u}, {128u, 128u, 128u, 0u},
{192u, 220u, 192u, 0u}, {166u, 202u, 240u, 0u}, {255u, 255u, 255u, 0u}, {250u, 250u, 250u, 0u},
{239u, 239u, 239u, 0u}, {228u, 228u, 228u, 0u}, {217u, 217u, 217u, 0u}, {206u, 206u, 206u, 0u},
{195u, 195u, 195u, 0u}, {185u, 185u, 185u, 0u}, {174u, 174u, 174u, 0u}, {163u, 163u, 163u, 0u},
{152u, 152u, 152u, 0u}, {141u, 141u, 141u, 0u}, {130u, 130u, 130u, 0u}, {123u, 123u, 123u, 0u},
{115u, 115u, 115u, 0u}, {108u, 108u, 108u, 0u}, {101u, 101u, 101u, 0u}, {93u, 93u, 93u, 0u},
{86u, 86u, 86u, 0u}, {79u, 79u, 79u, 0u}, {71u, 71u, 71u, 0u}, {64u, 64u, 64u, 0u},
{54u, 54u, 54u, 0u}, {43u, 43u, 43u, 0u}, {33u, 33u, 33u, 0u}, {22u, 22u, 22u, 0u},
{12u, 12u, 12u, 0u}, {8u, 8u, 8u, 0u}, {4u, 4u, 4u, 0u}, {0u, 0u, 0u, 0u},
{225u, 218u, 217u, 0u}, {195u, 182u, 179u, 0u}, {165u, 145u, 141u, 0u}, {134u, 108u, 102u, 0u},
{104u, 72u, 64u, 0u}, {74u, 35u, 26u, 0u}, {59u, 28u, 21u, 0u}, {44u, 21u, 16u, 0u},
{30u, 14u, 10u, 0u}, {15u, 7u, 5u, 0u}, {250u, 231u, 232u, 0u}, {240u, 185u, 189u, 0u},
{233u, 154u, 160u, 0u}, {226u, 124u, 131u, 0u}, {219u, 93u, 102u, 0u}, {213u, 62u, 73u, 0u},
{203u, 18u, 32u, 0u}, {172u, 15u, 27u, 0u}, {159u, 14u, 25u, 0u}, {146u, 13u, 23u, 0u},
{133u, 12u, 21u, 0u}, {120u, 11u, 19u, 0u}, {107u, 10u, 17u, 0u}, {94u, 8u, 15u, 0u},
{81u, 7u, 13u, 0u}, {68u, 6u, 11u, 0u}, {55u, 5u, 9u, 0u}, {42u, 4u, 7u, 0u},
{29u, 3u, 5u, 0u}, {10u, 1u, 2u, 0u}, {227u, 236u, 242u, 0u}, {178u, 203u, 220u, 0u},
{145u, 181u, 205u, 0u}, {112u, 159u, 191u, 0u}, {79u, 137u, 176u, 0u}, {30u, 104u, 154u, 0u},
{0u, 84u, 140u, 0u}, {0u, 79u, 132u, 0u}, {0u, 72u, 119u, 0u}, {0u, 66u, 110u, 0u},
{0u, 61u, 101u, 0u}, {0u, 55u, 92u, 0u}, {0u, 47u, 78u, 0u}, {0u, 39u, 65u, 0u},
{0u, 34u, 56u, 0u}, {0u, 28u, 47u, 0u}, {0u, 23u, 38u, 0u}, {0u, 18u, 29u, 0u},
{0u, 12u, 20u, 0u}, {0u, 4u, 7u, 0u}, {230u, 242u, 234u, 0u}, {180u, 215u, 193u, 0u},
{147u, 198u, 166u, 0u}, {113u, 180u, 138u, 0u}, {80u, 162u, 111u, 0u}, {30u, 136u, 70u, 0u},
{0u, 120u, 45u, 0u}, {0u, 114u, 43u, 0u}, {0u, 102u, 38u, 0u}, {0u, 95u, 35u, 0u},
{0u, 83u, 31u, 0u}, {0u, 72u, 27u, 0u}, {0u, 63u, 24u, 0u}, {0u, 56u, 21u, 0u},
{0u, 48u, 18u, 0u}, {0u, 36u, 14u, 0u}, {0u, 25u, 9u, 0u}, {0u, 17u, 6u, 0u},
{0u, 9u, 3u, 0u}, {0u, 1u, 1u, 0u}, {254u, 244u, 220u, 0u}, {255u, 239u, 181u, 0u},
{255u, 231u, 156u, 0u}, {255u, 222u, 132u, 0u}, {255u, 222u, 115u, 0u}, {255u, 214u, 99u, 0u},
{255u, 206u, 66u, 0u}, {255u, 198u, 41u, 0u}, {255u, 185u, 0u, 0u}, {255u, 189u, 8u, 0u},
{247u, 181u, 0u, 0u}, {222u, 156u, 0u, 0u}, {189u, 140u, 0u, 0u}, {173u, 123u, 0u, 0u},
{148u, 107u, 0u, 0u}, {132u, 90u, 0u, 0u}, {107u, 74u, 0u, 0u}, {74u, 49u, 0u, 0u},
{57u, 41u, 0u, 0u}, {33u, 24u, 0u, 0u}, {117u, 52u, 87u, 0u}, {176u, 158u, 50u, 0u},
{122u, 165u, 29u, 0u}, {242u, 142u, 8u, 0u}, {164u, 43u, 36u, 0u}, {113u, 67u, 20u, 0u},
{255u, 0u, 255u, 0u}, {255u, 0u, 255u, 0u}, {255u, 0u, 255u, 0u}, {255u, 0u, 255u, 0u},
{255u, 0u, 255u, 0u}, {57u, 163u, 217u, 0u}, {255u, 255u, 255u, 0u}, {254u, 255u, 247u, 0u},
{253u, 253u, 239u, 0u}, {248u, 247u, 247u, 0u}, {248u, 247u, 231u, 0u}, {240u, 240u, 240u, 0u},
{239u, 239u, 218u, 0u}, {227u, 232u, 236u, 0u}, {224u, 221u, 209u, 0u}, {215u, 222u, 215u, 0u},
{213u, 214u, 215u, 0u}, {214u, 214u, 203u, 0u}, {255u, 219u, 57u, 0u}, {206u, 206u, 206u, 0u},
{206u, 206u, 198u, 0u}, {255u, 214u, 18u, 0u}, {207u, 203u, 186u, 0u}, {197u, 199u, 199u, 0u},
{255u, 206u, 0u, 0u}, {207u, 198u, 159u, 0u}, {247u, 204u, 0u, 0u}, {189u, 198u, 189u, 0u},
{189u, 189u, 189u, 0u}, {238u, 199u, 0u, 0u}, {189u, 189u, 181u, 0u}, {238u, 190u, 24u, 0u},
{181u, 189u, 184u, 0u}, {161u, 186u, 224u, 0u}, {181u, 181u, 181u, 0u}, {231u, 189u, 0u, 0u},
{173u, 182u, 173u, 0u}, {222u, 181u, 0u, 0u}, {173u, 173u, 173u, 0u}, {213u, 182u, 0u, 0u},
{172u, 173u, 160u, 0u}, {214u, 173u, 0u, 0u}, {165u, 165u, 165u, 0u}, {206u, 173u, 0u, 0u},
{160u, 168u, 151u, 0u}, {206u, 164u, 0u, 0u}, {198u, 165u, 0u, 0u}, {157u, 156u, 156u, 0u},
{134u, 156u, 200u, 0u}, {153u, 156u, 144u, 0u}, {142u, 156u, 161u, 0u}, {189u, 156u, 0u, 0u},
{148u, 148u, 148u, 0u}, {146u, 148u, 138u, 0u}, {133u, 143u, 161u, 0u}, {189u, 143u, 0u, 0u},
{140u, 140u, 140u, 0u}, {177u, 147u, 0u, 0u}, {131u, 140u, 136u, 0u}, {146u, 130u, 126u, 0u},
{170u, 137u, 0u, 0u}, {132u, 132u, 130u, 0u}, {123u, 125u, 125u, 0u}, {123u, 123u, 133u, 0u},
{153u, 126u, 0u, 0u}, {114u, 116u, 118u, 0u}, {110u, 112u, 108u, 0u}, {97u, 109u, 136u, 0u},
{127u, 108u, 6u, 0u}, {0u, 173u, 0u, 0u}, {100u, 99u, 101u, 0u}, {176u, 71u, 41u, 0u},
{36u, 142u, 33u, 0u}, {98u, 91u, 75u, 0u}, {80u, 88u, 104u, 0u}, {252u, 0u, 0u, 0u},
{78u, 71u, 73u, 0u}, {73u, 71u, 78u, 0u}, {62u, 63u, 61u, 0u}, {0u, 66u, 211u, 0u},
{99u, 51u, 14u, 0u}, {198u, 0u, 0u, 0u}, {189u, 0u, 0u, 0u}, {0u, 57u, 206u, 0u},
{181u, 0u, 0u, 0u}, {0u, 56u, 185u, 0u}, {173u, 0u, 0u, 0u}, {165u, 0u, 0u, 0u},
{49u, 49u, 49u, 0u}, {0u, 49u, 165u, 0u}, {156u, 0u, 0u, 0u}, {42u, 45u, 60u, 0u},
{148u, 0u, 0u, 0u}, {140u, 0u, 0u, 0u}, {41u, 41u, 41u, 0u}, {0u, 41u, 144u, 0u},
{132u, 0u, 0u, 0u}, {123u, 0u, 0u, 0u}, {7u, 35u, 114u, 0u}, {34u, 36u, 32u, 0u},
{115u, 0u, 0u, 0u}, {107u, 0u, 0u, 0u}, {90u, 0u, 0u, 0u}, {23u, 24u, 27u, 0u},
{74u, 0u, 0u, 0u}, {15u, 15u, 16u, 0u}, {49u, 0u, 0u, 0u}, {16u, 12u, 4u, 0u},
{7u, 8u, 8u, 0u}, {0u, 0u, 8u, 0u}, {255u, 251u, 240u, 0u}, {160u, 160u, 164u, 0u},
{128u, 128u, 128u, 0u}, {255u, 0u, 0u, 0u}, {0u, 255u, 0u, 0u}, {255u, 255u, 0u, 0u},
{0u, 0u, 255u, 0u}, {255u, 0u, 255u, 0u}, {0u, 255u, 255u, 0u}, {255u, 255u, 255u, 0u}
{0u, 0u, 0u, PC_NONE}, {128u, 0u, 0u, PC_NONE}, {0u, 128u, 0u, PC_NONE}, {128u, 128u, 0u, PC_NONE},
{0u, 0u, 128u, PC_NONE}, {128u, 0u, 128u, PC_NONE}, {0u, 128u, 128u, PC_NONE}, {128u, 128u, 128u, PC_NONE},
{192u, 220u, 192u, PC_NONE}, {166u, 202u, 240u, PC_NONE}, {255u, 255u, 255u, PC_NONE}, {250u, 250u, 250u, PC_NONE},
{239u, 239u, 239u, PC_NONE}, {228u, 228u, 228u, PC_NONE}, {217u, 217u, 217u, PC_NONE}, {206u, 206u, 206u, PC_NONE},
{195u, 195u, 195u, PC_NONE}, {185u, 185u, 185u, PC_NONE}, {174u, 174u, 174u, PC_NONE}, {163u, 163u, 163u, PC_NONE},
{152u, 152u, 152u, PC_NONE}, {141u, 141u, 141u, PC_NONE}, {130u, 130u, 130u, PC_NONE}, {123u, 123u, 123u, PC_NONE},
{115u, 115u, 115u, PC_NONE}, {108u, 108u, 108u, PC_NONE}, {101u, 101u, 101u, PC_NONE}, {93u, 93u, 93u, PC_NONE},
{86u, 86u, 86u, PC_NONE}, {79u, 79u, 79u, PC_NONE}, {71u, 71u, 71u, PC_NONE}, {64u, 64u, 64u, PC_NONE},
{54u, 54u, 54u, PC_NONE}, {43u, 43u, 43u, PC_NONE}, {33u, 33u, 33u, PC_NONE}, {22u, 22u, 22u, PC_NONE},
{12u, 12u, 12u, PC_NONE}, {8u, 8u, 8u, PC_NONE}, {4u, 4u, 4u, PC_NONE}, {0u, 0u, 0u, PC_NONE},
{225u, 218u, 217u, PC_NONE}, {195u, 182u, 179u, PC_NONE}, {165u, 145u, 141u, PC_NONE}, {134u, 108u, 102u, PC_NONE},
{104u, 72u, 64u, PC_NONE}, {74u, 35u, 26u, PC_NONE}, {59u, 28u, 21u, PC_NONE}, {44u, 21u, 16u, PC_NONE},
{30u, 14u, 10u, PC_NONE}, {15u, 7u, 5u, PC_NONE}, {250u, 231u, 232u, PC_NONE}, {240u, 185u, 189u, PC_NONE},
{233u, 154u, 160u, PC_NONE}, {226u, 124u, 131u, PC_NONE}, {219u, 93u, 102u, PC_NONE}, {213u, 62u, 73u, PC_NONE},
{203u, 18u, 32u, PC_NONE}, {172u, 15u, 27u, PC_NONE}, {159u, 14u, 25u, PC_NONE}, {146u, 13u, 23u, PC_NONE},
{133u, 12u, 21u, PC_NONE}, {120u, 11u, 19u, PC_NONE}, {107u, 10u, 17u, PC_NONE}, {94u, 8u, 15u, PC_NONE},
{81u, 7u, 13u, PC_NONE}, {68u, 6u, 11u, PC_NONE}, {55u, 5u, 9u, PC_NONE}, {42u, 4u, 7u, PC_NONE},
{29u, 3u, 5u, PC_NONE}, {10u, 1u, 2u, PC_NONE}, {227u, 236u, 242u, PC_NONE}, {178u, 203u, 220u, PC_NONE},
{145u, 181u, 205u, PC_NONE}, {112u, 159u, 191u, PC_NONE}, {79u, 137u, 176u, PC_NONE}, {30u, 104u, 154u, PC_NONE},
{0u, 84u, 140u, PC_NONE}, {0u, 79u, 132u, PC_NONE}, {0u, 72u, 119u, PC_NONE}, {0u, 66u, 110u, PC_NONE},
{0u, 61u, 101u, PC_NONE}, {0u, 55u, 92u, PC_NONE}, {0u, 47u, 78u, PC_NONE}, {0u, 39u, 65u, PC_NONE},
{0u, 34u, 56u, PC_NONE}, {0u, 28u, 47u, PC_NONE}, {0u, 23u, 38u, PC_NONE}, {0u, 18u, 29u, PC_NONE},
{0u, 12u, 20u, PC_NONE}, {0u, 4u, 7u, PC_NONE}, {230u, 242u, 234u, PC_NONE}, {180u, 215u, 193u, PC_NONE},
{147u, 198u, 166u, PC_NONE}, {113u, 180u, 138u, PC_NONE}, {80u, 162u, 111u, PC_NONE}, {30u, 136u, 70u, PC_NONE},
{0u, 120u, 45u, PC_NONE}, {0u, 114u, 43u, PC_NONE}, {0u, 102u, 38u, PC_NONE}, {0u, 95u, 35u, PC_NONE},
{0u, 83u, 31u, PC_NONE}, {0u, 72u, 27u, PC_NONE}, {0u, 63u, 24u, PC_NONE}, {0u, 56u, 21u, PC_NONE},
{0u, 48u, 18u, PC_NONE}, {0u, 36u, 14u, PC_NONE}, {0u, 25u, 9u, PC_NONE}, {0u, 17u, 6u, PC_NONE},
{0u, 9u, 3u, PC_NONE}, {0u, 1u, 1u, PC_NONE}, {254u, 244u, 220u, PC_NONE}, {255u, 239u, 181u, PC_NONE},
{255u, 231u, 156u, PC_NONE}, {255u, 222u, 132u, PC_NONE}, {255u, 222u, 115u, PC_NONE}, {255u, 214u, 99u, PC_NONE},
{255u, 206u, 66u, PC_NONE}, {255u, 198u, 41u, PC_NONE}, {255u, 185u, 0u, PC_NONE}, {255u, 189u, 8u, PC_NONE},
{247u, 181u, 0u, PC_NONE}, {222u, 156u, 0u, PC_NONE}, {189u, 140u, 0u, PC_NONE}, {173u, 123u, 0u, PC_NONE},
{148u, 107u, 0u, PC_NONE}, {132u, 90u, 0u, PC_NONE}, {107u, 74u, 0u, PC_NONE}, {74u, 49u, 0u, PC_NONE},
{57u, 41u, 0u, PC_NONE}, {33u, 24u, 0u, PC_NONE}, {117u, 52u, 87u, PC_NONE}, {176u, 158u, 50u, PC_NONE},
{122u, 165u, 29u, PC_NONE}, {242u, 142u, 8u, PC_NONE}, {164u, 43u, 36u, PC_NONE}, {113u, 67u, 20u, PC_NONE},
{255u, 0u, 255u, PC_NONE}, {255u, 0u, 255u, PC_NONE}, {255u, 0u, 255u, PC_NONE}, {255u, 0u, 255u, PC_NONE},
{255u, 0u, 255u, PC_NONE}, {57u, 163u, 217u, PC_NONE}, {255u, 255u, 255u, PC_NONE}, {254u, 255u, 247u, PC_NONE},
{253u, 253u, 239u, PC_NONE}, {248u, 247u, 247u, PC_NONE}, {248u, 247u, 231u, PC_NONE}, {240u, 240u, 240u, PC_NONE},
{239u, 239u, 218u, PC_NONE}, {227u, 232u, 236u, PC_NONE}, {224u, 221u, 209u, PC_NONE}, {215u, 222u, 215u, PC_NONE},
{213u, 214u, 215u, PC_NONE}, {214u, 214u, 203u, PC_NONE}, {255u, 219u, 57u, PC_NONE}, {206u, 206u, 206u, PC_NONE},
{206u, 206u, 198u, PC_NONE}, {255u, 214u, 18u, PC_NONE}, {207u, 203u, 186u, PC_NONE}, {197u, 199u, 199u, PC_NONE},
{255u, 206u, 0u, PC_NONE}, {207u, 198u, 159u, PC_NONE}, {247u, 204u, 0u, PC_NONE}, {189u, 198u, 189u, PC_NONE},
{189u, 189u, 189u, PC_NONE}, {238u, 199u, 0u, PC_NONE}, {189u, 189u, 181u, PC_NONE}, {238u, 190u, 24u, PC_NONE},
{181u, 189u, 184u, PC_NONE}, {161u, 186u, 224u, PC_NONE}, {181u, 181u, 181u, PC_NONE}, {231u, 189u, 0u, PC_NONE},
{173u, 182u, 173u, PC_NONE}, {222u, 181u, 0u, PC_NONE}, {173u, 173u, 173u, PC_NONE}, {213u, 182u, 0u, PC_NONE},
{172u, 173u, 160u, PC_NONE}, {214u, 173u, 0u, PC_NONE}, {165u, 165u, 165u, PC_NONE}, {206u, 173u, 0u, PC_NONE},
{160u, 168u, 151u, PC_NONE}, {206u, 164u, 0u, PC_NONE}, {198u, 165u, 0u, PC_NONE}, {157u, 156u, 156u, PC_NONE},
{134u, 156u, 200u, PC_NONE}, {153u, 156u, 144u, PC_NONE}, {142u, 156u, 161u, PC_NONE}, {189u, 156u, 0u, PC_NONE},
{148u, 148u, 148u, PC_NONE}, {146u, 148u, 138u, PC_NONE}, {133u, 143u, 161u, PC_NONE}, {189u, 143u, 0u, PC_NONE},
{140u, 140u, 140u, PC_NONE}, {177u, 147u, 0u, PC_NONE}, {131u, 140u, 136u, PC_NONE}, {146u, 130u, 126u, PC_NONE},
{170u, 137u, 0u, PC_NONE}, {132u, 132u, 130u, PC_NONE}, {123u, 125u, 125u, PC_NONE}, {123u, 123u, 133u, PC_NONE},
{153u, 126u, 0u, PC_NONE}, {114u, 116u, 118u, PC_NONE}, {110u, 112u, 108u, PC_NONE}, {97u, 109u, 136u, PC_NONE},
{127u, 108u, 6u, PC_NONE}, {0u, 173u, 0u, PC_NONE}, {100u, 99u, 101u, PC_NONE}, {176u, 71u, 41u, PC_NONE},
{36u, 142u, 33u, PC_NONE}, {98u, 91u, 75u, PC_NONE}, {80u, 88u, 104u, PC_NONE}, {252u, 0u, 0u, PC_NONE},
{78u, 71u, 73u, PC_NONE}, {73u, 71u, 78u, PC_NONE}, {62u, 63u, 61u, PC_NONE}, {0u, 66u, 211u, PC_NONE},
{99u, 51u, 14u, PC_NONE}, {198u, 0u, 0u, PC_NONE}, {189u, 0u, 0u, PC_NONE}, {0u, 57u, 206u, PC_NONE},
{181u, 0u, 0u, PC_NONE}, {0u, 56u, 185u, PC_NONE}, {173u, 0u, 0u, PC_NONE}, {165u, 0u, 0u, PC_NONE},
{49u, 49u, 49u, PC_NONE}, {0u, 49u, 165u, PC_NONE}, {156u, 0u, 0u, PC_NONE}, {42u, 45u, 60u, PC_NONE},
{148u, 0u, 0u, PC_NONE}, {140u, 0u, 0u, PC_NONE}, {41u, 41u, 41u, PC_NONE}, {0u, 41u, 144u, PC_NONE},
{132u, 0u, 0u, PC_NONE}, {123u, 0u, 0u, PC_NONE}, {7u, 35u, 114u, PC_NONE}, {34u, 36u, 32u, PC_NONE},
{115u, 0u, 0u, PC_NONE}, {107u, 0u, 0u, PC_NONE}, {90u, 0u, 0u, PC_NONE}, {23u, 24u, 27u, PC_NONE},
{74u, 0u, 0u, PC_NONE}, {15u, 15u, 16u, PC_NONE}, {49u, 0u, 0u, PC_NONE}, {16u, 12u, 4u, PC_NONE},
{7u, 8u, 8u, PC_NONE}, {0u, 0u, 8u, PC_NONE}, {255u, 251u, 240u, PC_NONE}, {160u, 160u, 164u, PC_NONE},
{128u, 128u, 128u, PC_NONE}, {255u, 0u, 0u, PC_NONE}, {0u, 255u, 0u, PC_NONE}, {255u, 255u, 0u, PC_NONE},
{0u, 0u, 255u, PC_NONE}, {255u, 0u, 255u, PC_NONE}, {0u, 255u, 255u, PC_NONE}, {255u, 255u, 255u, PC_NONE}
};
// FUNCTION: LEGO1 0x100bee30
@ -94,7 +94,7 @@ MxPalette::MxPalette(const RGBQUAD* p_colors)
m_entries[i].peRed = p_colors[i].rgbRed;
m_entries[i].peGreen = p_colors[i].rgbGreen;
m_entries[i].peBlue = p_colors[i].rgbBlue;
m_entries[i].peFlags = 0;
m_entries[i].peFlags = PC_NONE;
}
m_skyColor = m_entries[141];

View File

@ -315,7 +315,7 @@ void MxVideoPresenter::PutFrame()
}
else if (m_unk0x58) {
if (PrepareRects(src, dest) >= 0) {
ddSurface->Blt(&dest, m_unk0x58, &src, 0, NULL);
ddSurface->Blt(&dest, m_unk0x58, &src, DDBLT_NONE, NULL);
}
}
else {

View File

@ -126,14 +126,6 @@ struct BITMAPINFO {
RGBQUAD bmiColors[1];
};
struct PALETTEENTRY {
BYTE peRed;
BYTE peGreen;
BYTE peBlue;
BYTE peFlags;
};
typedef PALETTEENTRY* LPPALETTEENTRY;
struct GUID {
uint32_t m_data1;
uint16_t m_data2;
@ -152,23 +144,12 @@ struct IUnknown {
private:
int m_refCount;
};
struct LOGPALETTE {
WORD palVersion;
WORD palNumEntries;
PALETTEENTRY palPalEntry[1];
};
typedef LOGPALETTE* LPLOGPALETTE;
inline BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int X, int Y, int cx, int cy, UINT uFlags)
{
return TRUE;
}
inline UINT WINAPI GetSystemPaletteEntries(HDC hdc, UINT iStart, UINT cEntries, LPPALETTEENTRY pPalEntries)
{
return 0;
}
inline HDC WINAPI GetDC(HWND hWnd)
{
return 0;
@ -308,21 +289,6 @@ inline int SetRect(RECT* rc, int left, int top, int right, int bottom)
VOID WINAPI Sleep(DWORD dwMilliseconds);
inline HPALETTE CreatePalette(LPLOGPALETTE lpLogPalette)
{
return nullptr;
}
inline int SelectPalette(HDC hdc, HPALETTE hpal, BOOL bForceBackground)
{
return 0;
}
inline int RealizePalette(HDC hdc)
{
return 0;
}
inline BOOL ClientToScreen(HWND hWnd, LPPOINT lpPoint)
{
return TRUE;

View File

@ -2,51 +2,69 @@
#include "miniwin_ddraw.h"
// --- Defines and Macros ---
#define D3DPAL_RESERVED 0x80
#define D3DPAL_READONLY 0x40
// --- GUIDs ---
DEFINE_GUID(IID_IDirect3D2, 0x6aae1ec1, 0x662a, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a);
#define DDBD_8 0x00000800
#define DDBD_16 0x00000400
#define DDBD_24 0x00000200
#define DDBD_32 0x00000100
// --- Enums ---
#define DDBD_8 DDBitDepths::BPP_8
#define DDBD_16 DDBitDepths::BPP_16
#define DDBD_24 DDBitDepths::BPP_24
#define DDBD_32 DDBitDepths::BPP_32
enum class DDBitDepths : uint32_t {
BPP_8 = 1 << 11,
BPP_16 = 1 << 10,
BPP_24 = 1 << 9,
BPP_32 = 1 << 8,
};
ENABLE_BITMASK_OPERATORS(DDBitDepths)
#define D3DDD_DEVICEZBUFFERBITDEPTH 0x00000100 // dwDeviceZBufferBitDepth is valid
#define D3DDD_DEVICEZBUFFERBITDEPTH D3DDeviceDescFlags::DEVICEZBUFFERBITDEPTH
enum class D3DDeviceDescFlags : uint32_t {
DEVICEZBUFFERBITDEPTH = 1 << 8,
};
ENABLE_BITMASK_OPERATORS(D3DDeviceDescFlags)
#define D3DPSHADECAPS_ALPHAFLATBLEND 0x00001000 // Supports D3DRMRENDERMODE_BLENDEDTRANSPARENCY
#define D3DPSHADECAPS_ALPHAFLATBLEND D3DPShadeCaps::ALPHAFLATBLEND
enum class D3DPShadeCaps : uint32_t {
ALPHAFLATBLEND = 1 << 12,
};
ENABLE_BITMASK_OPERATORS(D3DPShadeCaps)
#define D3DPTEXTURECAPS_PERSPECTIVE 0x00000001 // Supports perspective correction texturing
#define D3DPTEXTURECAPS_PERSPECTIVE D3DPTextureCaps::PERSPECTIVE
enum class D3DPTextureCaps : uint32_t {
PERSPECTIVE = 1 << 0,
};
ENABLE_BITMASK_OPERATORS(D3DPTextureCaps)
#define D3DPTFILTERCAPS_LINEAR 0x00000002 // Supports bilinear filtering
#define D3DPTFILTERCAPS_LINEAR D3DPTextureFilterCaps::LINEAR
enum class D3DPTextureFilterCaps : uint32_t {
LINEAR = 1 << 1,
};
ENABLE_BITMASK_OPERATORS(D3DPTextureFilterCaps)
#define D3DCOLOR_NONE D3DCOLORMODEL::NONE
#define D3DCOLOR_RGB D3DCOLORMODEL::RGB
#define D3DCOLOR_MONO D3DCOLORMODEL::MONO
// --- Enums ---
enum class D3DCOLORMODEL {
NONE = 0,
RGB = 1,
MONO = 2
NONE,
RGB,
MONO,
};
// --- GUIDs ---
DEFINE_GUID(IID_IDirect3D2, 0x6aae1ec1, 0x662a, 0x11d0, 0x88, 0x9d, 0x00, 0xaa, 0x00, 0xbb, 0xb7, 0x6a);
// --- Structs ---
struct D3DVECTOR {
float x, y, z;
};
struct D3DDEVICEDESC {
DWORD dwFlags; // D3DDD_*
DWORD dwDeviceZBufferBitDepth; // DDBD_*
D3DCOLORMODEL dcmColorModel; // D3DCOLOR_* Bit flag, but Isle think it's an enum
DWORD dwDeviceRenderBitDepth; // DDBD_*
D3DDeviceDescFlags dwFlags;
DDBitDepths dwDeviceZBufferBitDepth;
D3DCOLORMODEL dcmColorModel; // D3DCOLOR_* Bit flag, but Isle think it's an enum
DDBitDepths dwDeviceRenderBitDepth;
struct {
DWORD dwShadeCaps; // D3DPSHADECAPS_*
DWORD dwTextureCaps; // D3DPTEXTURECAPS_*
DWORD dwTextureFilterCaps; // D3DPTFILTERCAPS_*
D3DPShadeCaps dwShadeCaps;
D3DPTextureCaps dwTextureCaps;
D3DPTextureFilterCaps dwTextureFilterCaps;
} dpcTriCaps;
};
typedef D3DDEVICEDESC* LPD3DDEVICEDESC;

View File

@ -3,56 +3,9 @@
#include "bitflags.h"
#include "miniwin.h"
#define _FACDD 0x876
#define DDCKEY_SRCBLT 0x00000008
#define DDENUMRET_OK 1
#define DDFLIP_WAIT 0x00000001
#define DISCL_BACKGROUND 0x00000008
#define PC_NOCOLLAPSE 0x04
#define DDENUMRET_OK TRUE
#define DDCAPS2_CERTIFIED 0x00000001
// DirectDraw Surface Description flags
#define DDSD_CAPS DDSurfaceDescFlags::CAPS
#define DDSD_HEIGHT DDSurfaceDescFlags::HEIGHT
#define DDSD_WIDTH DDSurfaceDescFlags::WIDTH
#define DDSD_BACKBUFFERCOUNT DDSurfaceDescFlags::BACKBUFFERCOUNT
#define DDSD_ZBUFFERBITDEPTH DDSurfaceDescFlags::ZBUFFERBITDEPTH
#define DDSD_PIXELFORMAT DDSurfaceDescFlags::PIXELFORMAT
#define DDSCAPS_BACKBUFFER DDSCapsFlags::BACKBUFFER
#define DDSCAPS_COMPLEX DDSCapsFlags::COMPLEX
#define DDSCAPS_FLIP DDSCapsFlags::FLIP
#define DDSCAPS_OFFSCREENPLAIN DDSCapsFlags::OFFSCREENPLAIN
#define DDSCAPS_PRIMARYSURFACE DDSCapsFlags::PRIMARYSURFACE
#define DDSCAPS_SYSTEMMEMORY DDSCapsFlags::SYSTEMMEMORY
#define DDSCAPS_TEXTURE DDSCapsFlags::TEXTURE
#define DDSCAPS_3DDEVICE DDSCapsFlags::D3DDEVICE
#define DDSCAPS_VIDEOMEMORY DDSCapsFlags::VIDEOMEMORY
#define DDSCAPS_ZBUFFER DDSCapsFlags::ZBUFFER
#define DDPCAPS_8BIT DDPixelCaps::_8BIT
#define DDPCAPS_INITIALIZE DDPixelCaps::INITIALIZE
#define DDPCAPS_ALLOW256 DDPixelCaps::ALLOW256
#define DDBLT_KEYSRC 0x00008000
#define DDBLT_ROP 0x00020000
#define DDPF_PALETTEINDEXED8 0x00000020 // The texture uses an 8 bit palette
#define DDPF_RGB 0x00000040 // dwRGBBitCount, dwRBitMask, dwGBitMask, and dwBBitMask is valid
#define DDBLTFAST_SRCCOLORKEY 0x00000001
#define DDBLTFAST_WAIT 0x00000010
#define DDLOCK_WAIT 0x00000001
#define DDLOCK_SURFACEMEMORYPTR 0x00000000
#define DDSCL_NORMAL 0x00000008
#define DDSCL_FULLSCREEN 0x00000001
#define DDSCL_ALLOWREBOOT 0x00000002
#define DDSCL_EXCLUSIVE 0x00000010
#define MAKE_DDHRESULT(code) MAKE_HRESULT(1, _FACDD, code)
#define MAKE_DDHRESULT(code) MAKE_HRESULT(1, 0x876, code)
#define DD_OK S_OK
#define DDERR_ALREADYINITIALIZED MAKE_DDHRESULT(5)
@ -150,47 +103,139 @@
DEFINE_GUID(IID_IDirectDraw2, 0xB3A6F3E0, 0x2B43, 0x11CF, 0xA2, 0xDE, 0x00, 0xAA, 0x00, 0xB9, 0x33, 0x56);
DEFINE_GUID(IID_IDirectDrawSurface3, 0xDA044E00, 0x69B2, 0x11D0, 0xA1, 0xD5, 0x00, 0xAA, 0x00, 0xB8, 0xDF, 0xBB);
// --- Enums ---
#define DDCKEY_SRCBLT DDColorKeyFlags::SRCBLT
enum class DDColorKeyFlags : uint32_t {
SRCBLT = 1 << 3,
};
#define DDFLIP_WAIT DDFlipFlags::WAIT
enum class DDFlipFlags : uint32_t {
WAIT = 1,
};
#define DDCAPS2_CERTIFIED DDCaps2Flags::CERTIFIED
enum class DDCaps2Flags : uint32_t {
CERTIFIED = 1,
};
#define DDPCAPS_8BIT DDPixelCaps::_8BIT
#define DDPCAPS_INITIALIZE DDPixelCaps::INITIALIZE
#define DDPCAPS_ALLOW256 DDPixelCaps::ALLOW256
enum class DDPixelCaps : uint32_t {
_8BIT = 1 << 2,
INITIALIZE = 1 << 3,
ALLOW256 = 1 << 6,
};
ENABLE_BITMASK_OPERATORS(DDPixelCaps)
#define DDBLT_NONE DDBltFlags::NONE
#define DDBLT_KEYSRC DDBltFlags::KEYSRC
#define DDBLT_ROP DDBltFlags::ROP
enum class DDBltFlags : uint32_t {
NONE = 0,
KEYSRC = 1 << 15,
ROP = 1 << 17,
};
ENABLE_BITMASK_OPERATORS(DDBltFlags)
#define DDPF_PALETTEINDEXED8 DDPixelFormatFlags::PALETTEINDEXED8
#define DDPF_RGB DDPixelFormatFlags::RGB
enum class DDPixelFormatFlags : uint32_t {
PALETTEINDEXED8 = 1 << 5, // The texture uses an 8 bit palette
RGB = 1 << 6, // dwRGBBitCount, dwRBitMask, dwGBitMask, and dwBBitMask is valid
};
ENABLE_BITMASK_OPERATORS(DDPixelFormatFlags)
#define DDBLTFAST_SRCCOLORKEY DDBltFastFlags::SRCCOLORKEY
#define DDBLTFAST_WAIT DDBltFastFlags::WAIT
enum class DDBltFastFlags : uint32_t {
SRCCOLORKEY = 1 << 0,
WAIT = 1 << 4,
};
ENABLE_BITMASK_OPERATORS(DDBltFastFlags)
#define DDLOCK_WAIT DDLockFlags::WAIT
#define DDLOCK_SURFACEMEMORYPTR DDLockFlags::SURFACEMEMORYPTR
enum class DDLockFlags : uint32_t {
SURFACEMEMORYPTR,
WAIT,
};
#define DDSCL_FULLSCREEN DDSCLFlags::FULLSCREEN
#define DDSCL_ALLOWREBOOT DDSCLFlags::ALLOWREBOOT
#define DDSCL_NORMAL DDSCLFlags::NORMAL
#define DDSCL_EXCLUSIVE DDSCLFlags::EXCLUSIVE
enum class DDSCLFlags : uint32_t {
FULLSCREEN = 1 << 0,
ALLOWREBOOT = 1 << 1,
NORMAL = 1 << 3,
EXCLUSIVE = 1 << 4,
};
ENABLE_BITMASK_OPERATORS(DDSCLFlags)
#define DDSD_CAPS DDSurfaceDescFlags::CAPS
#define DDSD_HEIGHT DDSurfaceDescFlags::HEIGHT
#define DDSD_WIDTH DDSurfaceDescFlags::WIDTH
#define DDSD_BACKBUFFERCOUNT DDSurfaceDescFlags::BACKBUFFERCOUNT
#define DDSD_ZBUFFERBITDEPTH DDSurfaceDescFlags::ZBUFFERBITDEPTH
#define DDSD_PIXELFORMAT DDSurfaceDescFlags::PIXELFORMAT
enum class DDSurfaceDescFlags : uint32_t {
CAPS = 0x00000001, // ddsCaps is valid
HEIGHT = 0x00000002, // dwHeight is valid
WIDTH = 0x00000004, // dwWidth is valid
BACKBUFFERCOUNT = 0x00000020, // dwBackBufferCount is valid
ZBUFFERBITDEPTH = 0x00000040, // dwZBufferBitDepth is valid
PIXELFORMAT = 0x00001000, // ddpfPixelFormat is valid
CAPS = 1 << 0, // ddsCaps is valid
HEIGHT = 1 << 1, // dwHeight is valid
WIDTH = 1 << 2, // dwWidth is valid
BACKBUFFERCOUNT = 1 << 5, // dwBackBufferCount is valid
ZBUFFERBITDEPTH = 1 << 6, // dwZBufferBitDepth is valid
PIXELFORMAT = 1 << 12, // ddpfPixelFormat is valid
};
ENABLE_BITMASK_OPERATORS(DDSurfaceDescFlags)
#define DDSCAPS_BACKBUFFER DDSCapsFlags::BACKBUFFER
#define DDSCAPS_COMPLEX DDSCapsFlags::COMPLEX
#define DDSCAPS_FLIP DDSCapsFlags::FLIP
#define DDSCAPS_OFFSCREENPLAIN DDSCapsFlags::OFFSCREENPLAIN
#define DDSCAPS_PRIMARYSURFACE DDSCapsFlags::PRIMARYSURFACE
#define DDSCAPS_SYSTEMMEMORY DDSCapsFlags::SYSTEMMEMORY
#define DDSCAPS_TEXTURE DDSCapsFlags::TEXTURE
#define DDSCAPS_3DDEVICE DDSCapsFlags::D3DDEVICE
#define DDSCAPS_VIDEOMEMORY DDSCapsFlags::VIDEOMEMORY
#define DDSCAPS_ZBUFFER DDSCapsFlags::ZBUFFER
enum class DDSCapsFlags : uint32_t {
BACKBUFFER = 0x00000004,
COMPLEX = 0x00000008,
FLIP = 0x00000010,
OFFSCREENPLAIN = 0x00000040,
PRIMARYSURFACE = 0x00000200,
SYSTEMMEMORY = 0x00000800,
TEXTURE = 0x00001000,
D3DDEVICE = 0x00002000,
VIDEOMEMORY = 0x00004000,
ZBUFFER = 0x00020000,
BACKBUFFER = 1 << 2,
COMPLEX = 1 << 3,
FLIP = 1 << 4,
OFFSCREENPLAIN = 1 << 6,
PRIMARYSURFACE = 1 << 9,
SYSTEMMEMORY = 1 << 11,
TEXTURE = 1 << 12,
D3DDEVICE = 1 << 13,
VIDEOMEMORY = 1 << 14,
ZBUFFER = 1 << 17,
};
ENABLE_BITMASK_OPERATORS(DDSCapsFlags)
enum class DDPixelCaps : uint32_t {
_8BIT = 0x00000004,
INITIALIZE = 0x00000008,
ALLOW256 = 0x00000040,
#define PC_NONE PCFlags::NONE
#define PC_NOCOLLAPSE PCFlags::NOCOLLAPSE
#define D3DPAL_READONLY PCFlags::D3DREADONLY
#define D3DPAL_RESERVED PCFlags::D3DRESERVED
enum class PCFlags : uint8_t {
NONE = 0,
NOCOLLAPSE = 1 << 2,
D3DREADONLY = 1 << 6,
D3DRESERVED = 1 << 7,
};
ENABLE_BITMASK_OPERATORS(DDPixelCaps)
ENABLE_BITMASK_OPERATORS(PCFlags)
// --- Structs ---
struct DDCAPS {
DWORD dwSize;
DWORD dwCaps2; // DDCAPS2_*
DDCaps2Flags dwCaps2;
DWORD dwSVBRops[8];
};
typedef DDCAPS* LPDDCAPS;
struct DDSCAPS {
DDSCapsFlags dwCaps; // DDSCAPS_*
DDSCapsFlags dwCaps;
};
typedef struct DDSCAPS* LPDDSCAPS;
@ -201,8 +246,8 @@ struct DDBLTFX {
};
struct DDPIXELFORMAT {
DWORD dwSize; // sizeof(DDPIXELFORMAT)
DWORD dwFlags; // DDPF_RGB
DWORD dwSize;
DDPixelFormatFlags dwFlags;
DWORD dwRGBBitCount; // Bit count, Lego Island only handles 8 or 16
DWORD dwRBitMask; // Red bit mask (0xF800)
DWORD dwGBitMask; // Green bit mask (0x07E0)
@ -217,8 +262,8 @@ struct DDCOLORKEY {
typedef DDCOLORKEY* LPDDCOLORKEY;
struct DDSURFACEDESC {
DWORD dwSize; // sizeof(DDSURFACEDESC)
DDSurfaceDescFlags dwFlags; // DDSD_*
DWORD dwSize;
DDSurfaceDescFlags dwFlags;
DWORD dwHeight;
DWORD dwWidth;
LONG lPitch;
@ -230,6 +275,21 @@ struct DDSURFACEDESC {
};
typedef struct DDSURFACEDESC* LPDDSURFACEDESC;
struct PALETTEENTRY {
BYTE peRed;
BYTE peGreen;
BYTE peBlue;
PCFlags peFlags;
};
typedef PALETTEENTRY* LPPALETTEENTRY;
struct LOGPALETTE {
WORD palVersion;
WORD palNumEntries;
PALETTEENTRY palPalEntry[1];
};
typedef LOGPALETTE* LPLOGPALETTE;
typedef struct IDirectDraw* LPDIRECTDRAW;
struct IDirectDrawPalette : virtual public IUnknown {
virtual HRESULT GetCaps(LPDWORD lpdwCaps) = 0;
@ -252,7 +312,7 @@ struct IDirectDrawSurface : virtual public IUnknown {
LPRECT lpDestRect,
LPDIRECTDRAWSURFACE lpDDSrcSurface,
LPRECT lpSrcRect,
DWORD dwFlags,
DDBltFlags dwFlags,
LPDDBLTFX lpDDBltFx
) = 0;
virtual HRESULT BltFast(
@ -260,10 +320,10 @@ struct IDirectDrawSurface : virtual public IUnknown {
DWORD dwY,
LPDIRECTDRAWSURFACE lpDDSrcSurface,
LPRECT lpSrcRect,
DWORD dwTrans
DDBltFastFlags dwTrans
) = 0;
virtual HRESULT DeleteAttachedSurface(DWORD dwFlags, LPDIRECTDRAWSURFACE lpDDSAttachedSurface) = 0;
virtual HRESULT Flip(LPDIRECTDRAWSURFACE lpDDSurfaceTargetOverride, DWORD dwFlags) = 0;
virtual HRESULT Flip(LPDIRECTDRAWSURFACE lpDDSurfaceTargetOverride, DDFlipFlags dwFlags) = 0;
virtual HRESULT GetAttachedSurface(LPDDSCAPS lpDDSCaps, LPDIRECTDRAWSURFACE* lplpDDAttachedSurface) = 0;
virtual HRESULT GetCaps(LPDDSCAPS lpDDSCaps) = 0;
virtual HRESULT GetDC(HDC* lphDC) = 0;
@ -273,11 +333,11 @@ struct IDirectDrawSurface : virtual public IUnknown {
virtual HRESULT GetSurfaceDesc(LPDDSURFACEDESC lpDDSurfaceDesc) = 0;
virtual HRESULT Initialize(LPDIRECTDRAW lpDD, LPDDSURFACEDESC lpDDSurfaceDesc) = 0;
virtual HRESULT IsLost() = 0;
virtual HRESULT Lock(LPRECT lpDestRect, LPDDSURFACEDESC lpDDSurfaceDesc, DWORD dwFlags, HANDLE hEvent) = 0;
virtual HRESULT Lock(LPRECT lpDestRect, LPDDSURFACEDESC lpDDSurfaceDesc, DDLockFlags dwFlags, HANDLE hEvent) = 0;
virtual HRESULT ReleaseDC(HDC hDC) = 0;
virtual HRESULT Restore() = 0;
virtual HRESULT SetClipper(LPDIRECTDRAWCLIPPER lpDDClipper) = 0;
virtual HRESULT SetColorKey(DWORD dwFlags, LPDDCOLORKEY lpDDColorKey) = 0;
virtual HRESULT SetColorKey(DDColorKeyFlags dwFlags, LPDDCOLORKEY lpDDColorKey) = 0;
virtual HRESULT SetPalette(LPDIRECTDRAWPALETTE lpDDPalette) = 0;
virtual HRESULT Unlock(LPVOID lpSurfaceData) = 0;
};
@ -316,7 +376,7 @@ struct IDirectDraw : virtual public IUnknown {
virtual HRESULT GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc) = 0;
virtual HRESULT Initialize(GUID* lpGUID) = 0;
virtual HRESULT RestoreDisplayMode() = 0;
virtual HRESULT SetCooperativeLevel(HWND hWnd, DWORD dwFlags) = 0;
virtual HRESULT SetCooperativeLevel(HWND hWnd, DDSCLFlags dwFlags) = 0;
virtual HRESULT SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP) = 0;
};
@ -329,3 +389,23 @@ HRESULT DirectDrawCreate(LPGUID lpGuid, LPDIRECTDRAW* lplpDD, IUnknown* pUnkOute
typedef BOOL (*LPDDENUMCALLBACKA)(GUID*, LPSTR, LPSTR, LPVOID);
HRESULT DirectDrawEnumerate(LPDDENUMCALLBACKA cb, void* context);
inline UINT WINAPI GetSystemPaletteEntries(HDC hdc, UINT iStart, UINT cEntries, LPPALETTEENTRY pPalEntries)
{
return 0;
}
inline HPALETTE CreatePalette(LPLOGPALETTE lpLogPalette)
{
return nullptr;
}
inline int SelectPalette(HDC hdc, HPALETTE hpal, BOOL bForceBackground)
{
return 0;
}
inline int RealizePalette(HDC hdc)
{
return 0;
}

View File

@ -22,18 +22,19 @@ struct DirectDrawSurfaceImpl : public IDirectDrawSurface3 {
LPRECT lpDestRect,
LPDIRECTDRAWSURFACE lpDDSrcSurface,
LPRECT lpSrcRect,
DWORD dwFlags,
DDBltFlags dwFlags,
LPDDBLTFX lpDDBltFx
) override
{
return DD_OK;
}
HRESULT BltFast(DWORD dwX, DWORD dwY, LPDIRECTDRAWSURFACE lpDDSrcSurface, LPRECT lpSrcRect, DWORD dwTrans) override
HRESULT BltFast(DWORD dwX, DWORD dwY, LPDIRECTDRAWSURFACE lpDDSrcSurface, LPRECT lpSrcRect, DDBltFastFlags 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 Flip(LPDIRECTDRAWSURFACE lpDDSurfaceTargetOverride, DDFlipFlags dwFlags) override { return DDERR_GENERIC; }
HRESULT GetAttachedSurface(LPDDSCAPS lpDDSCaps, LPDIRECTDRAWSURFACE* lplpDDAttachedSurface) override
{
return DDERR_GENERIC;
@ -51,14 +52,14 @@ struct DirectDrawSurfaceImpl : public IDirectDrawSurface3 {
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
HRESULT Lock(LPRECT lpDestRect, LPDDSURFACEDESC lpDDSurfaceDesc, DDLockFlags 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 SetColorKey(DDColorKeyFlags dwFlags, LPDDCOLORKEY lpDDColorKey) override { return DD_OK; }
HRESULT SetPalette(LPDIRECTDRAWPALETTE lpDDPalette) override { return DD_OK; }
HRESULT Unlock(LPVOID lpSurfaceData) override { return DD_OK; }
};
@ -128,7 +129,7 @@ struct DirectDrawImpl : public IDirectDraw2, public IDirect3D2 {
HRESULT GetDisplayMode(LPDDSURFACEDESC lpDDSurfaceDesc) override { return DD_OK; }
HRESULT Initialize(GUID* lpGUID) override { return DD_OK; }
HRESULT RestoreDisplayMode() override { return DD_OK; }
HRESULT SetCooperativeLevel(HWND hWnd, DWORD dwFlags) override { return DD_OK; }
HRESULT SetCooperativeLevel(HWND hWnd, DDSCLFlags dwFlags) override { return DD_OK; }
HRESULT SetDisplayMode(DWORD dwWidth, DWORD dwHeight, DWORD dwBPP) override { return DD_OK; }
// IDirect3D2 interface
HRESULT CreateDevice(const GUID& guid, void* pBackBuffer, IDirect3DDevice2** ppDirect3DDevice) override

View File

@ -10,8 +10,11 @@
#ifndef MINIWIN
#define D3DCOLOR_NONE 0
#define D3DRMMAP_NONE 0
#define PC_NONE 0
#define DDBLT_NONE 0
#define D3DRMRENDERMODE DWORD
#define DDSCapsFlags DWORD
#define DDBitDepths DWORD
#endif
// Disable "identifier was truncated to '255' characters" warning.