Я много занимаюсь блиттингом (за последние месяцы написал много прототипов 2D-игр) и ищу самый быстрый из возможных блиттингов. Может быть, есть что-нибудь быстрее, чем SetDIBitsToDevice или StretchDIBits? Это около 1-5 мс, насколько я помню, для обычных размеров окна, поэтому они не очень быстрые (сложно или невозможно написать что-то быстрее, чем 200 кадров в секунду), хотя это нормально, я думаю, потому что сама оперативная память не такая быстрая.
самый быстрый блит (под winapi)
Ответы (1)
Это зависит.
Узким местом для большинства машин будет перемещение из системной памяти в графическую память.
Во многих случаях не будет никакой эффективной разницы между SetDIBitsToDevice и BitBlt, но в некоторых случаях она может быть. Если вы работаете в низком цветовом режиме (например, 256), то будет быстрее отправить 1-байтовые индексы, чем 32-битные пиксельные данные, и переназначить их на карту. (Я полагаю, будет ли переназначение обрабатываться в графическом адаптере или в системе, будет зависеть от драйвера.)
Я считаю, что самое безопасное, что вы можете сделать, это BitBlt из зависящего от устройства (совместимого) растрового изображения. Я не думаю, что это когда-либо будет хуже, чем SetDIBitsToDevice, но часто это может быть ничья.
Я ожидаю (но не проверял), что любой растягивающий блит может быть немного дороже, чем прямой блит, если только дополнительные пиксели не синтезируются на графическом процессоре.
Вы можете рассмотреть некоторые из более новых API-интерфейсов, таких как Direct2D, которые предназначены для более тесной работы с оборудованием, а не для представления идеалистической модели программного обеспечения.
Какое бы решение вы ни выбрали, я готов к большим различиям в производительности между машинами.