mirror of
https://github.com/isledecomp/isle.git
synced 2026-02-14 16:47:37 +00:00
WIP fixes
This commit is contained in:
parent
0c01fd7981
commit
c92e0c8cbf
@ -591,7 +591,7 @@ LPDIRECTDRAWSURFACE MxDisplaySurface::VTable0x44(
|
||||
ddsd.ddsCaps.dwCaps = DDSCAPS_SYSTEMMEMORY | DDSCAPS_OFFSCREENPLAIN;
|
||||
|
||||
if (draw->CreateSurface(&ddsd, &surface, NULL) != S_OK) {
|
||||
if (!*p_ret) {
|
||||
if (*p_ret) {
|
||||
*p_ret = 0;
|
||||
|
||||
// Try creating bitmap surface in vram if system ram ran out
|
||||
@ -602,28 +602,24 @@ LPDIRECTDRAWSURFACE MxDisplaySurface::VTable0x44(
|
||||
surface = NULL;
|
||||
}
|
||||
}
|
||||
else
|
||||
surface = NULL;
|
||||
}
|
||||
|
||||
if (!surface) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (surface) {
|
||||
memset(&ddsd, 0, sizeof(ddsd));
|
||||
ddsd.dwSize = sizeof(ddsd);
|
||||
|
||||
if (surface->Lock(NULL, &ddsd, 1, 0) != S_OK) {
|
||||
if (surface->Lock(NULL, &ddsd, DDLOCK_WAIT, 0) != S_OK) {
|
||||
surface->Release();
|
||||
return NULL;
|
||||
surface = NULL;
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (p_doNotWriteToSurface) {
|
||||
return surface;
|
||||
goto done;
|
||||
}
|
||||
|
||||
BITMAPINFOHEADER* hdr = p_bitmap->GetBmiHeader();
|
||||
MxU32 rowsBeforeTop;
|
||||
MxU8* bitmapSrcPtr;
|
||||
|
||||
// The goal here is to enable us to walk through the bitmap's rows
|
||||
// in order, regardless of the orientation. We want to end up at the
|
||||
// start of the first row, which is either at position 0, or at
|
||||
@ -632,8 +628,10 @@ LPDIRECTDRAWSURFACE MxDisplaySurface::VTable0x44(
|
||||
// Reminder: Negative biHeight means this is a top-down DIB.
|
||||
// Otherwise it is bottom-up.
|
||||
|
||||
MxU8* bitmapSrcPtr;
|
||||
switch (p_bitmap->GetBmiHeader()->biCompression) {
|
||||
case BI_RGB: {
|
||||
MxS32 rowsBeforeTop;
|
||||
if (p_bitmap->GetBmiHeight() < 0)
|
||||
rowsBeforeTop = 0;
|
||||
else
|
||||
@ -645,6 +643,7 @@ LPDIRECTDRAWSURFACE MxDisplaySurface::VTable0x44(
|
||||
bitmapSrcPtr = p_bitmap->GetBitmapData();
|
||||
break;
|
||||
default: {
|
||||
MxS32 rowsBeforeTop;
|
||||
if (p_bitmap->GetBmiHeight() < 0)
|
||||
rowsBeforeTop = 0;
|
||||
else
|
||||
@ -664,6 +663,7 @@ LPDIRECTDRAWSURFACE MxDisplaySurface::VTable0x44(
|
||||
MxS32 rowSeek = ((p_bitmap->GetBmiWidth() + 3) & -4);
|
||||
if (p_bitmap->GetBmiHeader()->biCompression != BI_RGB_TOPDOWN && p_bitmap->GetBmiHeight() >= 0)
|
||||
rowSeek = -rowSeek;
|
||||
|
||||
MxU32 newPitch = ddsd.lPitch;
|
||||
switch (ddsd.ddpfPixelFormat.dwRGBBitCount) {
|
||||
case 8: {
|
||||
@ -726,7 +726,9 @@ LPDIRECTDRAWSURFACE MxDisplaySurface::VTable0x44(
|
||||
surface->Unlock(ddsd.lpSurface);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
done:
|
||||
return surface;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user