Почему DirectX снимает экран в несколько раз медленнее, чем GDI? - PullRequest
0 голосов
/ 15 апреля 2020

У меня есть два примера захвата экрана, реализованные в двух программах:

1) Использование GDI

HWND wnd = GetDesktopWindow();
HDC hdcScreen = GetDC(wnd);
HDC hdcMemory = CreateCompatibleDC(hdcScreen);
HBITMAP hbmScreen = CreateCompatibleBitmap(hdcScreen,
    width, height);
SelectObject(hdcMemory, hbmScreen);
BitBlt(hdcMemory,
    0, 0,
    width, height,
    hdcScreen,
    startX, startY,
    SRCCOPY);

2) Использование DirectX

//...Init stuff....
device->GetFrontBufferData(0, surface);
surface->LockRect(&rc, NULL, 0);
CopyMemory(shot, rc.pBits, rc.Pitch * height);
surface->UnlockRect();

a) I протестировал оба образца на старом ноутбуке с win7 и coreduo pro c и получил 1) 1-8 FPS, 2) 15-20 FPS

b) Я тестировал его на настольных win10 и i7-7700 pro c и получаю 1) 15 FPS 2) 30 FPS

c) ПРОБЛЕМА: Я тестировал на новом Macbook Pro с win10 (bootcamp) и Intel Core i7 8. Генерал 4.3 ГГц и получил 1) 30 FPS , 2) 15 FPS

Для меня было ясно, что (2) версия DX должна быть быстрее, чем (1) GDI, но что может быть причиной того, что Top Macbook показывает такие обратные результаты?

...