Народ, помогите с проблемой. Не могу понять почему блитинг и флип
занимают по десятку миллионов тиков на кадр, хотя все поверхности
размещены в видеопамяти. Может кто знает как это ускорить?
Здравствуйте Gvido, Вы писали:
G>Народ, помогите с проблемой. Не могу понять почему блитинг и флип G>занимают по десятку миллионов тиков на кадр, хотя все поверхности G>размещены в видеопамяти. Может кто знает как это ускорить?
Ваш вопрос уже содержит ответ: все поверхности размещены в видео памяти,
а блитинг и флип осуществляются без участия акселератора,
т.е. центральным процессором. Для этого они копируются в системную
память, обрабатываются и копируются обратно.
Вот почему так происходит, другой вопрос. Я Вам на него ответить не
могу -- Вы не предоставили никакой информации о своих драйверах
и железе.
Здравствуйте Snax, Вы писали:
G>>Народ, помогите с проблемой. Не могу понять почему блитинг и флип G>>занимают по десятку миллионов тиков на кадр, хотя все поверхности G>>размещены в видеопамяти. Может кто знает как это ускорить?
S>Ваш вопрос уже содержит ответ: все поверхности размещены в видео памяти, S>а блитинг и флип осуществляются без участия акселератора, S>т.е. центральным процессором. Для этого они копируются в системную S>память, обрабатываются и копируются обратно.
Хотелось бы спросить — а откуда такая информация? Во-первых блит и флип немного разные вещи. Если блиттинг есть копирование куска памяти в другое место, то флип — обычно смена текущего отображаемого буффера (тоже кусок памяти).
Так вот, операция блиттинга сильно зависит от самой видеокарточки. Современные карточки умеют копировать куски памяти у себя на борту и, значит копирование будет произведено без участия процессора. Если видеокарта не умеет сама делать блит — то тут появятся тормоза, т.к. процессору надо будет самому читать из видеопамяти и писать туда. Дело в том что чтение из видеопамяти — вещь довольно тормозная, поэтому Blit будет тормозить.
Теперь с флипом — если железо может (сегодня мало уже таких, которые не могут), то тут даже копирования не происходит. Грубо говоря в видеокарте указатель на начало видеоданных перезаписывается на другой видеобуффер.
А по поводу "обрабатываются" — тоже спорный вопрос :)
Если, в случае с блитом — это можно понимать как обработка color key, то в случае с флипом вообще непонятно чего там обрабатывать. Причем если даже поверхность имеет color key, то есть большая вероятность, что операция произойдет аппаратно (без участия процессора) — проверенно на собственном опыте. Тоже самое можно сказать по поводу stretch.
Здравствуйте Gvido, Вы писали:
G>Народ, помогите с проблемой. Не могу понять почему блитинг и флип G>занимают по десятку миллионов тиков на кадр, хотя все поверхности G>размещены в видеопамяти. Может кто знает как это ускорить?
Чтобы не гадать, хотелось бы увидеть следующие куски исходного кода:
1. Инициализация DirectDraw
2. Операция блиттинга
3. Операция флипа
4. Операция замера времени
Неплохо также было знать на какой видеокарте все это безоразие (тормоза) наблюдается.