Я готовлюсь подавать заявку рисунка в Windows. Я просто задаюсь вопросом, графические редакторы имеют битовый массив памяти, который они блокируют, затем устанавливают каждый пиксель, затем блитируют?
Я не понимаю, как Photoshop может переместить целые слои без задержки или мерцание, не используя аппаратное ускорение. Также в программе как Дизайн Выражения, я мог иметь 200 форм и переместить их внезапно без задержки. Я действительно задаюсь вопросом, как это может быть сделано без справки GPU.
Кроме того, я не думаю, что супер эффективные алгоритмы могли выровнять по ширине это?
Посмотрите на этот вопрос:
Уменьшение мерцания с помощью GDI+ и C++
Все, что вы можете сделать о рисовании DC без GPU - это уменьшить мерцание. Все остальное зависит от скорости заполнения битовой карты памяти. И здесь вы можете использовать эффективные алгоритмы, многопоточность и все, что вам нужно.
Двойная (или более) буферизация - это то, как это делается в играх, где мы втягиваем тонны дерьма в «задний» буфер, пока отображается «передний» буфер. Затем, когда отрисовка завершена, буферы меняются местами (замена указателя, а не копии!), И процесс продолжается в новом переднем и заднем буферах.
Тройная буферизация предлагает еще один бонус в том, что вы можете начать рисовать два кадра с этого момента, когда будет готов следующий кадр, но без принудительной замены буфера в середине обновления экрана. Во многих играх замена буфера выполняется в середине обновления, но иногда это можно увидеть как видимые артефакты (разрыв) на экране.
В любом случае - для приложения, отрисовывающего растровые изображения в окне, если у вас есть "медленная" операция, сделайте это в не отображаемом буфере при представлении отображаемой версии в API визуализации, например GDI. Позвольте системному программному обеспечению выполнять все модные обновления.
Конечно, современный Photoshop использует ускорение графического процессора , если оно доступно. Другой возможный инструмент - DMA . Вам также может быть полезно прочитать исходный код существующих программ, таких как GIMP .