DirectDraw
От: Rota  
Дата: 25.03.03 13:32
Оценка:
Господа, столкнула меня жизнь с DirectDraw. Есть пара вопросов:
1) Как известно, мы можем получить контекст объекта директдро и рисовать там средствами ГДИ. Это быстрее, чем рисовать так в обычном окне? Медленнее, чем рисовать прямо в поверхности (точки)? Инфа по этому поводу противоречива...
Нет ли готовой ф-и или быстрого алгоритма изменения яркости всех точек поверхности?
Спасибо за внимание
Re: DirectDraw
От: Igor Karablin Россия  
Дата: 26.03.03 06:53
Оценка: 14 (1)
Здравствуйте, Rota, Вы писали:

R>Господа, столкнула меня жизнь с DirectDraw. Есть пара вопросов:

R>1) Как известно, мы можем получить контекст объекта директдро и рисовать там средствами ГДИ. Это быстрее, чем рисовать так в обычном окне? Медленнее, чем рисовать прямо в поверхности (точки)? Инфа по этому поводу противоречива...
Скажу один факт — вывод количества fps на поверхность DDraw средствами gdi может замедлить эти самые fps примерно в два раза.

R>Нет ли готовой ф-и или быстрого алгоритма изменения яркости всех точек поверхности?


В полноэкранном режиме можно воспользоваться функциональностью IDirectDrawGammaControl или IDirectDrawColorControl. Причем первый интерфейс поддерживается чаще чем воторой.

В оконном режиме — только ручной обработкой. Основной смысл — для корректного изменения яркости нужно RGB перевести в HSB (Hue, Saturation, Brightness) изменить B-составляющую и выполнить обратное преобразование. Ну а дальше можно попробовать где-то ввести оптимизацию (например табличная подстановка) — но это все, естественно, для определенных частных случаев.

Готовой функции, к сожалению, нет. Было бы больше свободного времени, потерзал бы гугль, а так как нет — возлагаю эту задачу на тебя

R>Спасибо за внимание

Всегда пожалуйста
Re[2]: DirectDraw
От: mega210 Украина http://yomoma.ru
Дата: 26.03.03 08:49
Оценка:
Здравствуйте, Igor Karablin, Вы писали:

R>>1) Как известно, мы можем получить контекст объекта директдро и рисовать там средствами ГДИ. Это быстрее, чем рисовать так в обычном окне? Медленнее, чем рисовать прямо в поверхности (точки)? Инфа по этому поводу противоречива...

IK>Скажу один факт — вывод количества fps на поверхность DDraw средствами gdi может замедлить эти самые fps примерно в два раза.
Это происходит если локать поверхность находящуюся в видеопамяти. Если поверхность в системной, то, имхо, разницы особой нет чем на нее рисовать %)

R>>Нет ли готовой ф-и или быстрого алгоритма изменения яркости всех точек поверхности?

IK>В полноэкранном режиме можно воспользоваться функциональностью IDirectDrawGammaControl или IDirectDrawColorControl. Причем первый интерфейс поддерживается чаще чем воторой.
Это работает сразу для всего экрана. А вопрос, имхо, был об одной поверхностью. Имхо изменять яркость в этом случае можно только "ручками".

IK>В оконном режиме — только ручной обработкой. Основной смысл — для корректного изменения яркости нужно RGB перевести в HSB (Hue,

Хм. Для всего окна можно и не ручками %) Что произойдет со всей остальной поверхностью экрана обычно мало кого волнует %)
zlo iz near
Re[3]: DirectDraw
От: Igor Karablin Россия  
Дата: 26.03.03 10:30
Оценка:
Здравствуйте, mega210, Вы писали:

IK>>Скажу один факт — вывод количества fps на поверхность DDraw средствами gdi может замедлить эти самые fps примерно в два раза.

M>Это происходит если локать поверхность находящуюся в видеопамяти. Если поверхность в системной, то, имхо, разницы особой нет чем на нее рисовать %)
Если рассматривать эту тему в общем виде, то согласен. Однако если брать конкретные частные случаи, то чистый DDraw подход может ускорить процесс значительно. Взять к примеру тот-же самый вывод текста: если заранее заготовить шрифт в виде поверхности и разместить его в видеопамяти — выигрыш в скороти вывода текста однозначно будет.

R>>>Нет ли готовой ф-и или быстрого алгоритма изменения яркости всех точек поверхности?

IK>>В полноэкранном режиме можно воспользоваться функциональностью IDirectDrawGammaControl или IDirectDrawColorControl. Причем первый интерфейс поддерживается чаще чем воторой.
M>Это работает сразу для всего экрана. А вопрос, имхо, был об одной поверхностью. Имхо изменять яркость в этом случае можно только "ручками".
Одна поверхность может быть размером во весь экран. Это частный случай, и я его счел нужным упомянуть.

IK>>В оконном режиме — только ручной обработкой.

M>Хм. Для всего окна можно и не ручками %) Что произойдет со всей остальной поверхностью экрана обычно мало кого волнует %)
Да ну?
Re[4]: DirectDraw
От: Rota  
Дата: 28.03.03 06:11
Оценка: 18 (1)
Всем спасибо за общение

Немного о задаче: действительно, был вопрос о конкретной поверхности, причем не в видеопамяти и не первичной. Так что гамма контрол тут никак.

Функцию я написал в пяти видах
для интереса предоставлю результатфы тестирования:

Duron Morgan 1000 Radeon 8500 WinXP
Тест1 Без затемнения
1292
Тест2 Вложенные циклы
67757
Тест3 Опт. цикл
31585
Тест4 8 бит асм
26798
Тест5 32 бит асм
20529
Тест6 MMX асм
17555


под асм 8 бит подразумевается побайтная работа с памятью, тиna al ah итп.
32 -ит — соответственно читаем по 4 байта в еах.
Как видно, использованеи ММХ дает прирост скорости.
Кроме того, функция довольно простая...ксттаи затемнение идет только по зеленой составляющей, для протокола.
Если вдруг кому-то интеерсно или нужно такую штуку и лень писать — буду рад предостваить
ее вам
Re[5]: DirectDraw
От: Frostbitten Россия  
Дата: 28.03.03 09:49
Оценка:
Здравствуйте, Rota, Вы писали:

R>Если вдруг кому-то интеерсно или нужно такую штуку и лень писать — буду рад предостваить

R>ее вам

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