mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-26 10:29:23 +01:00
Optimize GDI renderer by blitting directly to DC
This commit is contained in:
parent
921684fed8
commit
6c7e656c67
@ -22,10 +22,7 @@
|
|||||||
|
|
||||||
DWORD WINAPI render_soft_main(void)
|
DWORD WINAPI render_soft_main(void)
|
||||||
{
|
{
|
||||||
HDC memDC = CreateCompatibleDC(ddraw->render.hDC);
|
PBITMAPINFO bmi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD) * 256);
|
||||||
HBITMAP surface = CreateCompatibleBitmap(ddraw->render.hDC, ddraw->width, ddraw->height);
|
|
||||||
|
|
||||||
PBITMAPINFO bmi = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(BITMAPINFO) + (sizeof(RGBQUAD) * 256) + 1024);
|
|
||||||
|
|
||||||
bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
|
||||||
bmi->bmiHeader.biWidth = ddraw->width;
|
bmi->bmiHeader.biWidth = ddraw->width;
|
||||||
@ -34,8 +31,6 @@ DWORD WINAPI render_soft_main(void)
|
|||||||
bmi->bmiHeader.biBitCount = ddraw->bpp;
|
bmi->bmiHeader.biBitCount = ddraw->bpp;
|
||||||
bmi->bmiHeader.biCompression = BI_RGB;
|
bmi->bmiHeader.biCompression = BI_RGB;
|
||||||
|
|
||||||
SelectObject(memDC, surface);
|
|
||||||
|
|
||||||
DWORD tick_start = 0;
|
DWORD tick_start = 0;
|
||||||
DWORD tick_end = 0;
|
DWORD tick_end = 0;
|
||||||
DWORD frame_len = 0;
|
DWORD frame_len = 0;
|
||||||
@ -65,15 +60,13 @@ DWORD WINAPI render_soft_main(void)
|
|||||||
ddraw->primary->palette->data_rgb = &bmi->bmiColors[0];
|
ddraw->primary->palette->data_rgb = &bmi->bmiColors[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
SetDIBits(memDC, surface, 0, ddraw->height, ddraw->primary->surface, bmi, DIB_RGB_COLORS);
|
|
||||||
|
|
||||||
if (ddraw->render.width != ddraw->width || ddraw->render.height != ddraw->height)
|
if (ddraw->render.width != ddraw->width || ddraw->render.height != ddraw->height)
|
||||||
{
|
{
|
||||||
StretchBlt(ddraw->render.hDC, 0, 0, ddraw->render.width, ddraw->render.height, memDC, 0, 0, ddraw->width, ddraw->height, SRCCOPY);
|
StretchDIBits(ddraw->render.hDC, 0, 0, ddraw->render.width, ddraw->render.height, 0, 0, ddraw->width, ddraw->height, ddraw->primary->surface, bmi, DIB_RGB_COLORS, SRCCOPY);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BitBlt(ddraw->render.hDC, 0, 0, ddraw->width, ddraw->height, memDC, 0, 0, SRCCOPY);
|
SetDIBitsToDevice(ddraw->render.hDC, 0, 0, ddraw->width, ddraw->height, 0, 0, 0, ddraw->height, ddraw->primary->surface, bmi, DIB_RGB_COLORS);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LeaveCriticalSection(&ddraw->cs);
|
LeaveCriticalSection(&ddraw->cs);
|
||||||
@ -92,7 +85,6 @@ DWORD WINAPI render_soft_main(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, bmi);
|
HeapFree(GetProcessHeap(), 0, bmi);
|
||||||
DeleteObject(surface);
|
|
||||||
DeleteDC(memDC);
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user