Цитата(cirus @ 23.11.2023, 13:44)
Чем больше фпс, тем быстрее получение цвета.
Я, конечно, не знаю, как делает пилот, но в сишарпике Graphics.CopyFromScreen(), который зовёт Gdi32.BitBlt(), который, судя по всему, терпеливо ждёт до ближайшего кадра. Получается, чем быстрее следующий кадр, тем быстрее вернётся, а само получение-отпускание девайс контекста (GetDC + ReleaseDC) и копирование очень быстрые. Ограничивается только ожиданием, чего бы тут покопировать. (IMG:
style_emoticons/default/smile.gif)
Процессор не кушает, а именно что тихонько ждёт.
Замеры с высокоточным таймером (Stopwatch) для Graphics.CopyFromScreen + Bitmap.GetPixel:
— при копировании с 60 фпс (поставить в виндовс) десктопа без запущенных игр это как раз 1000/60 мс;
— для десктопа со 165фпс это 1000/165 мс;
— для игры с VSync ON + FPS Limit 158 (в драйвере нвидии aka Nvidia Control Panel), которая выдаёт эти 158 фпс, будет 1000/158 мс,
— для игры, которая крутит около 250 фпс с отключением вертикальной синхронизации и лимитера (в драйвере нвидии), аж через 1-2 мс возвращалась. Получается даже чаще каждого кадра, когда vsync не блочит. Пробы десктопа без запущенной игры так не могут. (IMG:
style_emoticons/default/smile.gif)
Чёрных пикселей вместо реальных, на что иногда жалуются для пилота (малевичи), не было. Но игры диабло 3 и овервотч, которые новее линеаге.
Для копирования маленького куска пикселей вместо пробы одного: graphics.CopyFromScreen + bitmap.LockBits + Marshal.Copy(в свой управляемый массив) + bitmap.UnlockBits — замеры времени такие же.
Но для целого экрана 2560x1440 одно только копирование длится долго + ждать ближайший кадр — выходило около 18-24мс вместе (раз в 3-4 кадра для 165 фпс). Причём, отказ от Marshal.Copy в пользу щупания байтиков через указатель, выданный в LockBits(), ничего не изменил. Всё время съедает CopyFromScreen.
Такое вот для виндовс 11 22631.2861, Hardware-accelerated GPU scheduling - ON, Windowed Optimizations - ON.
Хоть это не имеет прямого отношения к пилоту, наверное, он всё равно пользуется теми же виндовс функциями, потому ожидания могут быть сходные.