Текущий архив: 2005.10.02;
Скачать: CL | DM;
Вниз
Пара вопросов по Direct Draw Найти похожие ветки
← →
Дмитрий В. Белькевич (2005-05-12 05:35) [0]1. Битность всех дайректовых поверхностей idirectdrawsurface7 всегда равна битности дисплея? Т.е. битность дисплея фактически выставляет битность этих пов-тей. Я правильно понял? И первичной, и внеэкранных?
2. Можно ли с помощью direct draw сделать такую фичу:
a) создать внеэкранную пов-ть, загнать в неё нужные данные.
б) отобразить их, но не простым блитом (что сейчас и делаю), а выполнять над каждым пиксеелем некоторые преобразования - табличное изменение яркости пикселей. Это можно сделать, как я понял, если включить режим 8 bit у дисплея, и изменять палитру у первичной пов-ти (собсно, в msdn написано, что палитра только для первичной пов-ти и имеет смысл). Но! Нужен либо 32 битный, либо 24 битный режим монитора - так как кроме восьмибитных изображений нужно смотреть полноцветные изображния с количеством цветов гораздо большим, чем вмещается в 8 бит.
← →
Sapersky (2005-05-12 12:19) [1]Т.е. битность дисплея фактически выставляет битность этих пов-тей.
В системной памяти можно создать любого формата.
выполнять над каждым пиксеелем некоторые преобразования - табличное изменение яркости пикселей. Это можно сделать, как я понял, если включить режим 8 bit у дисплея, и изменять палитру у первичной пов-ти
Есть ещё гамма-контроль, IDirectDrawGammaControl. Действует тоже на первичную поверхность, но при любой глубине цвета.
(собсно, в msdn написано, что палитра только для первичной пов-ти и имеет смысл)
Ещё для текстур.
← →
Дмитрий В. Белькевич (2005-05-13 14:28) [2]Большое спасибо за ответ.
>>Т.е. битность дисплея фактически выставляет битность этих пов-тей.
>В системной памяти можно создать любого формата.
Возможно ли с такой поверхности потом сделать blt на первичную поверхность, которая в другом формате?
>>выполнять над каждым пиксеелем некоторые преобразования - табличное изменение яркости пикселей. Это можно сделать, как я понял, если включить режим 8 bit у дисплея, и изменять палитру у первичной пов-ти
>Есть ещё гамма-контроль, IDirectDrawGammaControl. Действует тоже на первичную поверхность, но при любой глубине цвета.
То есть, гамма-контроль действует не только на первичную? Первичную-то мне как раз и не нужно изменять - нужно изменять особым образом внеэкранную поверхность, а затем выводить блитом на первичную. Нужно делать замену цветов (или градаций яркости) на внеэкранной, а затем выводить на первичную. Грубо говоря, нужно регулировать яркость/контрастность выводимой картинки. Сейчас приходится делать через временные буферы с попиксельным пересчетом основным процессором в основной памяти. Хотелось бы прикрутить как-то образом палитры, что бы процессор вообще не гонять.
>>(собсно, в msdn написано, что палитра только для первичной пов-ти и имеет смысл)
>Ещё для текстур.
Там имелось в виду, что из всех видов поверхностей палитра работает только с первичной.
Еще небольшой вопрос: какой максимальный размер может быть у текстур?
← →
Sapersky (2005-05-14 13:27) [3]>В системной памяти можно создать любого формата.
Возможно ли с такой поверхности потом сделать blt на первичную поверхность, которая в другом формате?
Наверное можно (точно не помню, а проверять сейчас некогда), иначе зачем они вообще? Другое дело, что преобразование форматов может делаться софтверно.
Хотя, недавно вычитал в разделе SDK про палитры:
It is important to note that DirectDraw blits never perform color conversion; any palettes attached to the source or destination surface of a blit are ignored.
Может быть это относится только к схеме "палитровая->палитровая"... не знаю.
То есть, гамма-контроль действует не только на первичную?
Только на первичную.
Там имелось в виду, что из всех видов поверхностей палитра работает только с первичной.
С текстурой (которая в DX7 та же поверхность) при выводе через D3D (полигонами) работает, проверял. Если, конечно, видеокарта поддерживает палитровые текстуры.
Собственно, в SDK так и написано: Nonprimary surface palettes are intended for use by Direct3D applications.
Еще небольшой вопрос: какой максимальный размер может быть у текстур?
Зависит от видеокарты. Сейчас практически у всех довольно приличный, например, у интегрированных Intel - 1024 * 1024, GeForce2 - 2048 * 2048. Если не влезает - нарезается на кусочки, у меня где-то был модуль...
Кстати, с текстурами можно менять яркость и без палитры - изменяя цвет полигона, на который она накладывается.
Или может быть проще вообще всё сделать на софте (если требуется только изменять палитру, не нужно никаких спецэффектов вроде сжатия/растяжения)? 8-битный битмап довольно быстро рисуется, даже на весь экран.
Страницы: 1 вся ветка
Текущий архив: 2005.10.02;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.06 c