Re[2]: GDI+ быстрый вывод
От: samius Япония http://sams-tricks.blogspot.com
Дата: 15.12.10 04:05
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Итого, как происходит отрисовка


I>0. В OnMouseMove управляем флагами для перерисовки, что нужно обновлять.

I>1. в OnPaint проверяем, надо ли перерисовать статический контент, если надо — перерисовать основной битмап.
I>2. в OnPaint проверяем, надо ли перерисовать динамический контент, если надо — перерисовываем вспомогательный битмап, в качестве фона — основной битмап.
I>3. в конце отрисовываем или основной битмап или вспомогательный вот такой функцией

+1
Примерно к такой же схеме я пришел когда занимался ГИС-ом, где была и статическая информация (очень много, до нескольких секунд, или даже до минуты вывода GDI средствами) и динамическая, которая всегда должна быть актуальна, даже во время длительной отрисовки статической. Т.е. паузы в отображении динамической информации быть не должно.

Отличия были в том, что динамической информации было как-правило мало, и она не требовала буферизации. Но само-собой, выводилась не на DC контрола, а в итоговый буфер, где склеивались различные буфера, после чего этот буфер копировался на DC контрола.
А статических буферов было несколько. Так же был D3D рельеф ортогонального вида, который тоже приходилось буферизовывать, т.к. рисовался он немаленьким mesh-ем.

Для комфортных Pan/Zoom/ResizeWindow приходилось держать буферы значительно превышающие размеры окна. Это позволяло при изменениях параметров вида получать превью статической информации с помощью трансформаций буферов. После завершения выбора параметров вида (т.е. когда пользователь повозит мышкой и успокоится), начиналась фоновая отрисовка статических буферов с регулярным (раз 5-10 в секунду) выбросом нарендеренной статики на девайс контрола. Динамическая информация при этом обновлялась от 20и раз в секунду.

Специально для Павла: в 2004м году вся эта кухня позволяла комфортно работать на 4м пне с 256Мб оперативки с интегрированной графикой на 1м тогда фреймворке . Работало и на 3м пне. Но там даже винда сама по себе тормозила.
Ну и как-то на фоне всего происходящего, экономить на том что бы делать Invalidate по ребрам раббера, просто в голову не приходило.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.