самый быстрый блит (под winapi)

Я много занимаюсь блиттингом (за последние месяцы написал много прототипов 2D-игр) и ищу самый быстрый из возможных блиттингов. Может быть, есть что-нибудь быстрее, чем SetDIBitsToDevice или StretchDIBits? Это около 1-5 мс, насколько я помню, для обычных размеров окна, поэтому они не очень быстрые (сложно или невозможно написать что-то быстрее, чем 200 кадров в секунду), хотя это нормально, я думаю, потому что сама оперативная память не такая быстрая.


person grunge fightr    schedule 28.11.2012    source источник
comment
Как правило, никто не слишком беспокоится о том, сколько времени потребуется для рендеринга растрового изображения на экране, предпочитая вместо этого компоновать вещи в заднем буфере, а затем сбрасывать все это целиком. В любом случае вашим ограничением, скорее всего, будет видеооборудование, а не конкретная функция, которую вы используете для выполнения блита. Вы можете рассмотреть возможность использования DirectX, который, вероятно, более оптимизирован, чем Windows API.   -  person Jim Mischel    schedule 28.11.2012


Ответы (1)


Это зависит.

Узким местом для большинства машин будет перемещение из системной памяти в графическую память.

Во многих случаях не будет никакой эффективной разницы между SetDIBitsToDevice и BitBlt, но в некоторых случаях она может быть. Если вы работаете в низком цветовом режиме (например, 256), то будет быстрее отправить 1-байтовые индексы, чем 32-битные пиксельные данные, и переназначить их на карту. (Я полагаю, будет ли переназначение обрабатываться в графическом адаптере или в системе, будет зависеть от драйвера.)

Я считаю, что самое безопасное, что вы можете сделать, это BitBlt из зависящего от устройства (совместимого) растрового изображения. Я не думаю, что это когда-либо будет хуже, чем SetDIBitsToDevice, но часто это может быть ничья.

Я ожидаю (но не проверял), что любой растягивающий блит может быть немного дороже, чем прямой блит, если только дополнительные пиксели не синтезируются на графическом процессоре.

Вы можете рассмотреть некоторые из более новых API-интерфейсов, таких как Direct2D, которые предназначены для более тесной работы с оборудованием, а не для представления идеалистической модели программного обеспечения.

Какое бы решение вы ни выбрали, я готов к большим различиям в производительности между машинами.

person Adrian McCarthy    schedule 28.11.2012
comment
хорошо, но если кто-то может добавить что-то еще, я бы тоже хотел это услышать (я очень заинтересован в блиттинге под winapi) - person grunge fightr; 29.11.2012