Full Upgrade to the 1.7 tree.

This commit is contained in:
waltje
2018-10-06 18:20:09 -04:00
parent b775d592d4
commit 2f69c95152
395 changed files with 57724 additions and 52823 deletions

View File

@@ -8,7 +8,7 @@
*
* Rendering module for Microsoft DirectDraw 9.
*
* Version: @(#)win_ddraw.cpp 1.0.17 2018/09/02
* Version: @(#)win_ddraw.cpp 1.0.18 2018/10/05
*
* Authors: Fred N. van Kempen, <decwiz@yahoo.com>
* Miran Grca, <mgrca8@gmail.com>
@@ -279,8 +279,15 @@ ddraw_blit_fs(int x, int y, int y1, int y2, int w, int h)
return;
}
for (yy = y1; yy < y2; yy++)
if (buffer32) memcpy((void *)((uintptr_t)ddsd.lpSurface + (yy * ddsd.lPitch)), &(((uint32_t *)buffer32->line[y + yy])[x]), w * 4);
for (yy = y1; yy < y2; yy++) {
if (buffer32) {
if (vid_grayscale || invert_display)
video_transform_copy((uint32_t *)((uintptr_t)ddsd.lpSurface + (yy * ddsd.lPitch)), &(((uint32_t *)buffer32->line[y + yy])[x]), w);
else
memcpy((void *)((uintptr_t)ddsd.lpSurface + (yy * ddsd.lPitch)), &(((uint32_t *)buffer32->line[y + yy])[x]), w * 4);
}
}
video_blit_complete();
lpdds_back->Unlock(NULL);
@@ -352,10 +359,16 @@ ddraw_blit(int x, int y, int y1, int y2, int w, int h)
}
for (yy = y1; yy < y2; yy++) {
if (buffer32)
if ((y + yy) >= 0 && (y + yy) < buffer32->h)
memcpy((uint32_t *) &(((uint8_t *) ddsd.lpSurface)[yy * ddsd.lPitch]), &(((uint32_t *)buffer32->line[y + yy])[x]), w * 4);
if (buffer32) {
if ((y + yy) >= 0 && (y + yy) < buffer32->h) {
if (vid_grayscale || invert_display)
video_transform_copy((uint32_t *) &(((uint8_t *) ddsd.lpSurface)[yy * ddsd.lPitch]), &(((uint32_t *)buffer32->line[y + yy])[x]), w);
else
memcpy((uint32_t *) &(((uint8_t *) ddsd.lpSurface)[yy * ddsd.lPitch]), &(((uint32_t *)buffer32->line[y + yy])[x]), w * 4);
}
}
}
video_blit_complete();
lpdds_back->Unlock(NULL);
@@ -389,7 +402,7 @@ ddraw_blit(int x, int y, int y1, int y2, int w, int h)
static void
ddraw_close(void)
{
pclog("DDRAW: close\n");
DEBUG("DDRAW: close\n");
video_setblit(NULL);
@@ -425,18 +438,18 @@ ddraw_init(int fs)
DWORD dw;
HWND h;
pclog("DDraw: initializing (fs=%d)\n", fs);
INFO("DDraw: initializing (fs=%d)\n", fs);
cgapal_rebuild();
hr = DirectDrawCreate(NULL, &lpdd, NULL);
if (FAILED(hr)) {
pclog("DDRAW: cannot create an instance (%s)\n", GetError(hr));
ERRLOG("DDRAW: cannot create an instance (%s)\n", GetError(hr));
return(0);
}
hr = lpdd->QueryInterface(IID_IDirectDraw4, (LPVOID *)&lpdd4);
if (FAILED(hr)) {
pclog("DDRAW: no interfaces found (%s)\n", GetError(hr));
ERRLOG("DDRAW: no interfaces found (%s)\n", GetError(hr));
return(0);
}
lpdd->Release();
@@ -453,7 +466,7 @@ ddraw_init(int fs)
}
hr = lpdd4->SetCooperativeLevel(h, dw);
if (FAILED(hr)) {
pclog("DDRAW: SetCooperativeLevel failed (%s)\n", GetError(hr));
ERRLOG("DDRAW: SetCooperativeLevel failed (%s)\n", GetError(hr));
return(0);
}
@@ -462,7 +475,7 @@ ddraw_init(int fs)
ddraw_h = GetSystemMetrics(SM_CYSCREEN);
hr = lpdd4->SetDisplayMode(ddraw_w, ddraw_h, 32, 0, 0);
if (FAILED(hr)) {
pclog("DDRAW: SetDisplayMode failed (%s)\n", GetError(hr));
ERRLOG("DDRAW: SetDisplayMode failed (%s)\n", GetError(hr));
return(0);
}
}
@@ -478,7 +491,7 @@ ddraw_init(int fs)
}
hr = lpdd4->CreateSurface(&ddsd, &lpdds_pri, NULL);
if (FAILED(hr)) {
pclog("DDRAW: CreateSurface failed (%s)\n", GetError(hr));
ERRLOG("DDRAW: CreateSurface failed (%s)\n", GetError(hr));
return(0);
}
@@ -489,7 +502,7 @@ ddraw_init(int fs)
ddsd.ddsCaps.dwCaps = DDSCAPS_BACKBUFFER;
hr = lpdds_pri->GetAttachedSurface(&ddsd.ddsCaps, &lpdds_back2);
if (FAILED(hr)) {
pclog("DDRAW: GetAttachedSurface failed (%s)\n", GetError(hr));
ERRLOG("DDRAW: GetAttachedSurface failed (%s)\n", GetError(hr));
return(0);
}
}
@@ -508,7 +521,7 @@ ddraw_init(int fs)
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
hr = lpdd4->CreateSurface(&ddsd, &lpdds_back, NULL);
if (FAILED(hr)) {
pclog("DDRAW: CreateSurface(back) failed (%s)\n", GetError(hr));
ERRLOG("DDRAW: CreateSurface(back) failed (%s)\n", GetError(hr));
return(0);
}
}
@@ -528,26 +541,26 @@ ddraw_init(int fs)
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
hr = lpdd4->CreateSurface(&ddsd, &lpdds_back2, NULL);
if (FAILED(hr)) {
pclog("DDRAW: CreateSurface(back2) failed (%s)\n", GetError(hr));
ERRLOG("DDRAW: CreateSurface(back2) failed (%s)\n", GetError(hr));
return(0);
}
}
hr = lpdd4->CreateClipper(0, &lpdd_clipper, NULL);
if (FAILED(hr)) {
pclog("DDRAW: CreateClipper failed (%s)\n", GetError(hr));
ERRLOG("DDRAW: CreateClipper failed (%s)\n", GetError(hr));
return(0);
}
hr = lpdd_clipper->SetHWnd(0, h);
if (FAILED(hr)) {
pclog("DDRAW: SetHWnd failed (%s)\n", GetError(hr));
ERRLOG("DDRAW: SetHWnd failed (%s)\n", GetError(hr));
return(0);
}
hr = lpdds_pri->SetClipper(lpdd_clipper);
if (FAILED(hr)) {
pclog("DDRAW: SetClipper failed (%s)\n", GetError(hr));
ERRLOG("DDRAW: SetClipper failed (%s)\n", GetError(hr));
return(0);
}
}
@@ -570,7 +583,7 @@ SaveBMP(const wchar_t *fn, BITMAPINFO *bmi, uint8_t *pixels)
FILE *fp;
if ((fp = plat_fopen(fn, L"wb")) == NULL) {
pclog("[SaveBMP] File %ls could not be opened for writing!\n", fn);
ERRLOG("[SaveBMP] File %ls could not be opened for writing!\n", fn);
return(0);
}
@@ -645,8 +658,7 @@ ddraw_screenshot(const wchar_t *fn)
}
#endif
xs = get_actual_size_x();
ys = ys2 = get_actual_size_y();
get_screen_size_natural(&xs, &ys);
if (ysize <= 250) {
ys >>= 1;
@@ -668,9 +680,10 @@ ddraw_screenshot(const wchar_t *fn)
}
/* Allocate a buffer for the pixel data. */
if ((pixels = (uint8_t *)malloc(bmi.bmiHeader.biSizeImage)) == NULL) {
pclog("DDraw: unable to allocate bitmap memory!\n");
_swprintf(temp, get_string(IDS_ERR_SCRSHOT), fn);
if ((pixels = (uint8_t *)mem_alloc(bmi.bmiHeader.biSizeImage)) == NULL) {
ERRLOG("DDraw: unable to allocate bitmap memory!\n");
swprintf(temp, sizeof_w(temp),
get_string(IDS_ERR_SCRSHOT), fn);
ui_msgbox(MBX_ERROR, temp);
ReleaseDC(NULL, hDC);
return;
@@ -698,7 +711,7 @@ ddraw_screenshot(const wchar_t *fn)
bmi.bmiHeader.biSizeImage <<= 1;
/* Allocate new buffer, doubled-up. */
pixels = (uint8_t *)malloc(bmi.bmiHeader.biSizeImage);
pixels = (uint8_t *)mem_alloc(bmi.bmiHeader.biSizeImage);
/* Copy scanlines. */
for (i = 0; i < ys; i++) {
@@ -739,7 +752,8 @@ ddraw_screenshot(const wchar_t *fn)
/* Show error message if needed. */
if (i == 0) {
_swprintf(temp, get_string(IDS_ERR_SCRSHOT), path);
swprintf(temp, sizeof_w(temp),
get_string(IDS_ERR_SCRSHOT), path);
ui_msgbox(MBX_ERROR, temp);
}
}