Господа, столкнула меня жизнь с DirectDraw. Есть пара вопросов:
1) Как известно, мы можем получить контекст объекта директдро и рисовать там средствами ГДИ. Это быстрее, чем рисовать так в обычном окне? Медленнее, чем рисовать прямо в поверхности (точки)? Инфа по этому поводу противоречива...
Нет ли готовой ф-и или быстрого алгоритма изменения яркости всех точек поверхности?
Спасибо за внимание
Здравствуйте, Rota, Вы писали:
R>Господа, столкнула меня жизнь с DirectDraw. Есть пара вопросов:
R>1) Как известно, мы можем получить контекст объекта директдро и рисовать там средствами ГДИ. Это быстрее, чем рисовать так в обычном окне? Медленнее, чем рисовать прямо в поверхности (точки)? Инфа по этому поводу противоречива...
Скажу один факт — вывод количества fps на поверхность DDraw средствами gdi может замедлить эти самые fps примерно в два раза.
R>Нет ли готовой ф-и или быстрого алгоритма изменения яркости всех точек поверхности?
В полноэкранном режиме можно воспользоваться функциональностью IDirectDrawGammaControl или IDirectDrawColorControl. Причем первый интерфейс поддерживается чаще чем воторой.
В оконном режиме — только ручной обработкой. Основной смысл — для корректного изменения яркости нужно RGB перевести в HSB (Hue, Saturation, Brightness) изменить B-составляющую и выполнить обратное преобразование. Ну а дальше можно попробовать где-то ввести оптимизацию (например табличная подстановка) — но это все, естественно, для определенных частных случаев.
Готовой функции, к сожалению, нет.

Было бы больше свободного времени, потерзал бы
гугль, а так как нет — возлагаю эту задачу на тебя
R>Спасибо за внимание
Всегда пожалуйста
Здравствуйте, Igor Karablin, Вы писали:
R>>1) Как известно, мы можем получить контекст объекта директдро и рисовать там средствами ГДИ. Это быстрее, чем рисовать так в обычном окне? Медленнее, чем рисовать прямо в поверхности (точки)? Инфа по этому поводу противоречива...
IK>Скажу один факт — вывод количества fps на поверхность DDraw средствами gdi может замедлить эти самые fps примерно в два раза. 
Это происходит если локать поверхность находящуюся в видеопамяти. Если поверхность в системной, то, имхо, разницы особой нет чем на нее рисовать %)
R>>Нет ли готовой ф-и или быстрого алгоритма изменения яркости всех точек поверхности?
IK>В полноэкранном режиме можно воспользоваться функциональностью IDirectDrawGammaControl или IDirectDrawColorControl. Причем первый интерфейс поддерживается чаще чем воторой.
Это работает сразу для всего экрана. А вопрос, имхо, был об одной поверхностью. Имхо изменять яркость в этом случае можно только "ручками".
IK>В оконном режиме — только ручной обработкой. Основной смысл — для корректного изменения яркости нужно RGB перевести в HSB (Hue,
Хм. Для всего окна можно и не ручками %) Что произойдет со всей остальной поверхностью экрана обычно мало кого волнует %)
Здравствуйте, mega210, Вы писали:
IK>>Скажу один факт — вывод количества fps на поверхность DDraw средствами gdi может замедлить эти самые fps примерно в два раза.
M>Это происходит если локать поверхность находящуюся в видеопамяти. Если поверхность в системной, то, имхо, разницы особой нет чем на нее рисовать %)
Если рассматривать эту тему в общем виде, то согласен. Однако если брать конкретные частные случаи, то чистый DDraw подход может ускорить процесс значительно. Взять к примеру тот-же самый вывод текста: если заранее заготовить шрифт в виде поверхности и разместить его в видеопамяти — выигрыш в скороти вывода текста однозначно будет.
R>>>Нет ли готовой ф-и или быстрого алгоритма изменения яркости всех точек поверхности?
IK>>В полноэкранном режиме можно воспользоваться функциональностью IDirectDrawGammaControl или IDirectDrawColorControl. Причем первый интерфейс поддерживается чаще чем воторой.
M>Это работает сразу для всего экрана. А вопрос, имхо, был об одной поверхностью. Имхо изменять яркость в этом случае можно только "ручками".
Одна поверхность может быть размером во весь экран.

Это частный случай, и я его счел нужным упомянуть.
IK>>В оконном режиме — только ручной обработкой.
M>Хм. Для всего окна можно и не ручками %) Что произойдет со всей остальной поверхностью экрана обычно мало кого волнует %)
Да ну?
Всем спасибо за общение
Немного о задаче: действительно, был вопрос о конкретной поверхности, причем не в видеопамяти и не первичной. Так что гамма контрол тут никак.
Функцию я написал в пяти видах

для интереса предоставлю результатфы тестирования:
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 байта в еах.
Как видно, использованеи ММХ дает прирост скорости.
Кроме того, функция довольно простая...ксттаи затемнение идет только по зеленой составляющей, для протокола.
Если вдруг кому-то интеерсно или нужно такую штуку и лень писать — буду рад предостваить
ее вам
Здравствуйте, Rota, Вы писали:
R>Если вдруг кому-то интеерсно или нужно такую штуку и лень писать — буду рад предостваить
R>ее вам
Очень интересно. Вашего мыла я не нашел, а мое в профайле — если не затруюдит, буду ждать с нетерпением.