Re[9]: GDI+ быстрый вывод
От: samius Япония http://sams-tricks.blogspot.com
Дата: 14.12.10 08:24
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Здравствуйте, samius, Вы писали:


PD>>>Paint.net так не рисует.

S>>А попробуй нарисовать в нем линию, или прямоугольник

PD>Не понял. Я же только о контуре говорил.

Да, подтверждаю версию Sinix-а. Инверсная граница, а содержимое слегка тонировано.

PD>Что-то у меня не получается посмотреть Spy++ окно paint.net. А другого ничего нет. Попробуй.

А что ты хочешь увидешь?

S>>Чем так страшен WM_PAINT, если есть двойной буфер?


PD>На каждый мышкин чих перерисовывать прямоугольник ?



PD>>>По идее UpdateWindow заставит немедленно перерисовать именно эту линию и снять флаг инвалидности.


S>>А ради чего собственно выжимать такты на ровном месте? Тебя не устраивает скорость BitBlt?


PD>На каждое мышкино передвижение ?


S>>Более того, я даже не уверен, что посылка нескольких InvalidateRect-ов и UpdateWindow будет быстрее BitBlt.


PD>Так InvalidateRect + UpdateWindow и приведут к BitBlt, только на 4 линии. Остально-то зачем перерисовывать ?

Просто что бы не мудрить.

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

Сделал в лоб WM_PAINT-ом на каждый мышиный чих. Т.е. не блит, а вся отрисовка всех глифов с доп информацией + блит из двойного буфера (от фликов). Ну и что бы ты думал? Все отлично рисуется, правда немного поджирается процессор. Меня это не беспокоит на столько что бы заниматься экономией перерисовки на уровне пикселов. И пока у меня нет отсечения по страницам. Т.е. на каждый мышиный чих рисуется весь документ, хоть и видна лишь его часть.

Можешь сказать что из-за таких как я тормозит виндовс, но мое мнение — одиночных блитов бояться не нужно в современных интерактивных приложениях.
В более менее сложных и многослойных могут работать и множественные блиты (2 и более буферов).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.