2010-05-20 1 views
8

Я собираюсь сделать приложение для рисования в Windows. Мне просто интересно, у программы рисования есть битмап памяти, который они блокируют, а затем устанавливают каждый пиксель, а затем blit?Как работает Photoshop (или программы рисования)?

Я не понимаю, как Photoshop может перемещать целые слои без задержек или мерцания без использования аппаратного ускорения. Кроме того, в такой программе, как Expression Design, я мог бы иметь 200 фигур и перемещать их сразу, без запаздывания. Мне действительно интересно, как это можно сделать без помощи GPU.

Кроме того, я не думаю, что суперэффективные алгоритмы могут это оправдать?

ответ

1

Посмотрите на этот вопрос:

Reduce flicker with GDI+ and C++

Все, что вы можете делать чертежу DC без GPU, чтобы уменьшить мерцание. Все остальное зависит от скорости заполнения вашего растрового изображения. И здесь вы можете использовать эффективные алгоритмы, многопоточность и все, что вам нужно.

+0

Итак, в конце дня это скорость, которую я могу заполнить растровым изображением памяти, я думаю, что я сделаю тогда, чтобы получить легкую непрозрачность, это использовать OpenGL и просто рисовать текстуры на квадроциклах. спасибо – jmasterx

1

Конечно, современный Photoshop uses GPU acceleration если есть. Другим возможным инструментом является DMA. Вам также может быть полезно прочитать исходный код существующих программ, например GIMP.

+0

Но мой вопрос на самом деле заключался в том, как он может это сделать, не потому, что не использовал его. – jmasterx

+0

DMA - это еще не один инструмент. Это помогает GPU передавать данные без использования процессора. –

+0

@ Кирилл, это неправда. DMA можно использовать без GPU, и CPU может инициировать его. –

1

Двойная (или более) буферизация - это то, как это делается в играх, где мы рисуем тонну дерьма в «задний» буфер, пока отображается «передний» буфер. Затем, когда выполняется ничья, буферы меняются местами (свопинг-указатель, а не копии!), И процесс продолжается в новых передних и задних буферах.

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

В любом случае - для рисования растровых изображений приложения в окне, если у вас есть некоторая «медленная» операция, сделайте это в не отображаемом буфере, показывая отображаемую версию в API визуализации, например. GDI. Пусть системное программное обеспечение обрабатывает все модные обновления.

+0

Спасибо, я уже дважды буферизую, это очень полезная техника! – jmasterx

 Смежные вопросы

  • Нет связанных вопросов^_^