1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-26 10:29:23 +01:00

#309 Fix for Nancy Draw: Last Train to Blue Moon Canyon "SetSurfaceDesc() error"

This commit is contained in:
FunkyFr3sh 2024-05-13 05:45:50 +02:00
parent 32f508cba3
commit fdcf9a7d1a

View File

@ -1225,9 +1225,7 @@ HRESULT dds_SetSurfaceDesc(IDirectDrawSurfaceImpl* This, LPDDSURFACEDESC2 lpDDSD
dbg_dump_dds_flags(lpDDSD->dwFlags); dbg_dump_dds_flags(lpDDSD->dwFlags);
dbg_dump_dds_caps(lpDDSD->ddsCaps.dwCaps); dbg_dump_dds_caps(lpDDSD->ddsCaps.dwCaps);
DWORD req_flags = DDSD_LPSURFACE | DDSD_PITCH | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT; if ((lpDDSD->dwFlags & DDSD_LPSURFACE) == 0)
if (((lpDDSD->dwFlags & req_flags) != req_flags) && (lpDDSD->dwFlags & DDSD_ALL) == 0)
return DDERR_UNSUPPORTED; return DDERR_UNSUPPORTED;
@ -1262,9 +1260,12 @@ HRESULT dds_SetSurfaceDesc(IDirectDrawSurfaceImpl* This, LPDDSURFACEDESC2 lpDDSD
This->mapping = NULL; This->mapping = NULL;
} }
if (lpDDSD->dwFlags & DDSD_PIXELFORMAT)
{
switch (lpDDSD->ddpfPixelFormat.dwRGBBitCount) switch (lpDDSD->ddpfPixelFormat.dwRGBBitCount)
{ {
case 0:
break;
case 8: case 8:
This->bpp = 8; This->bpp = 8;
break; break;
@ -1279,15 +1280,31 @@ HRESULT dds_SetSurfaceDesc(IDirectDrawSurfaceImpl* This, LPDDSURFACEDESC2 lpDDSD
This->bpp = 32; This->bpp = 32;
break; break;
default: default:
This->bpp = 8;
TRACE(" NOT_IMPLEMENTED bpp=%u\n", lpDDSD->ddpfPixelFormat.dwRGBBitCount); TRACE(" NOT_IMPLEMENTED bpp=%u\n", lpDDSD->ddpfPixelFormat.dwRGBBitCount);
break; break;
} }
}
if (lpDDSD->dwFlags & DDSD_WIDTH)
{
This->width = lpDDSD->dwWidth; This->width = lpDDSD->dwWidth;
}
if (lpDDSD->dwFlags & DDSD_HEIGHT)
{
This->height = lpDDSD->dwHeight; This->height = lpDDSD->dwHeight;
This->surface = lpDDSD->lpSurface; }
if (lpDDSD->dwFlags & DDSD_PITCH)
{
This->pitch = lpDDSD->lPitch; This->pitch = lpDDSD->lPitch;
}
if (lpDDSD->dwFlags & DDSD_LPSURFACE)
{
This->surface = lpDDSD->lpSurface;
}
This->bytes_pp = This->bpp / 8; This->bytes_pp = This->bpp / 8;
This->size = This->pitch * This->height; This->size = This->pitch * This->height;
This->custom_buf = TRUE; This->custom_buf = TRUE;