· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.WIN32 —› Fast GDI

Посл.отвђт Сообщенiе


Дата: Апр 3, 2003 14:09:31

Есть необходимоть строить много кривых.

Если я рисую функциями ГДИ (LineTo..) напрямую в контекст экрана. То выходит все очень медленно и дерганно.

Еще пробую создать в памяти совместимый контекст и вставляю туда совместимый битмап и там рисую. А когда надо копирую все на экран. Этот метод шустрый, но когда нужно рисовать очень длинный график битмап отжирает огромное колличество памяти. И при изменении размера - перерисовки всего - тормозит зверски.

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


Дата: Апр 4, 2003 04:22:54

копирую все на экран ... нужно рисовать очень длинный график битмап отжирает огромное колличество памяти
Т.е. Вы рисуете и копируете не только видимую часть?
Когда Ваша программа занимается рисованием в совместимый контекст? В отдельном потоке или в ответ на WM_PAINT/WM_ERASEBKGND/...?


Дата: Апр 4, 2003 07:42:46

я рисую в обработчике WM_SIZE. Рисую всё. А вот копирую на экран при обработке WM_PAINT только видимую часть.


Дата: Апр 4, 2003 09:10:27

в обработчике WM_SIZE. Рисую всё.
Почему все?
Картинка статичная или динамичная?


Дата: Апр 4, 2003 19:53:45

Строго говоря - рисовать надо только в WM_PAINT. Причем использовать GDI Tools Caching и RectVisible() для оптимизации. Если в процессе редактирования изменился документ - InvalidateRect() + UpdateWindow() тут же вызовут WM_PAINT напрямую.


Дата: Апр 7, 2003 15:17:41

А можно поподробнее о GDI Tools Caching и RectVisible(). Про эти тулс я нигде не слышал.


Дата: Апр 7, 2003 19:40:35

Как часто пишут:

while (...) {
HPEN hPen = CreatePen (...);
SelectObject (hDC, hPen);
MoveToEx (...);
LineTo (...);
DeleteObject (hPen);
}

И так рисуют 1000 линий или больше.
Лучше было-бы держать HPEN извне,
удалив из цикла CreatePen() и DeleteObject().
То же самое и с другими: HBRUSH, HFONT, HBITMAP...

2. Любой объект может быть заключен в RECT.
RectVisible(HDC, RECT*) возвращает TRUE если RECT виден в данном HDC при данной обработке WM_PAINT.
Таким образом, не все рисуется, а только видимые объекты.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.068