Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Пара вопросов по Direct Draw [D7, Win95/98, WinXP]


Дмитрий В. Белькевич ©   (2005-05-12 05:35:00) 

1. Битность всех дайректовых поверхностей idirectdrawsurface7 всегда равна битности дисплея? Т.е. битность дисплея фактически выставляет битность этих пов-тей. Я правильно понял? И первичной, и внеэкранных?
2. Можно ли с помощью direct draw сделать такую фичу:
a) создать внеэкранную пов-ть, загнать в неё нужные данные.
б) отобразить их, но не простым блитом (что сейчас и делаю), а выполнять над каждым пиксеелем некоторые преобразования - табличное изменение яркости пикселей. Это можно сделать, как я понял, если включить режим 8 bit у дисплея, и изменять палитру у первичной пов-ти (собсно, в msdn написано, что палитра только для первичной пов-ти и имеет смысл). Но! Нужен либо 32 битный, либо 24 битный режим монитора - так как кроме восьмибитных изображений нужно смотреть полноцветные изображния с количеством цветов гораздо большим, чем вмещается в 8 бит.


Sapersky   (2005-05-14 13:27:00) [1]

>В системной памяти можно создать любого формата.
Возможно ли с такой поверхности потом сделать 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-битный битмап довольно быстро рисуется, даже на весь экран.


Дмитрий В. Белькевич   (2005-05-13 14:28:00) [2]

Большое спасибо за ответ.

>>Т.е. битность дисплея фактически выставляет битность этих пов-тей.

>В системной памяти можно создать любого формата.

Возможно ли с такой поверхности потом сделать blt на первичную поверхность, которая в другом формате?

>>выполнять над каждым пиксеелем некоторые преобразования - табличное изменение яркости пикселей. Это можно сделать, как я понял, если включить режим 8 bit у дисплея, и изменять палитру у первичной пов-ти

>Есть ещё гамма-контроль, IDirectDrawGammaControl. Действует тоже на первичную поверхность, но при любой глубине цвета.

То есть, гамма-контроль действует не только на первичную? Первичную-то мне как раз и не нужно изменять - нужно изменять особым образом внеэкранную поверхность, а затем выводить блитом на первичную. Нужно делать замену цветов (или градаций яркости) на внеэкранной, а затем выводить на первичную. Грубо говоря, нужно регулировать яркость/контрастность выводимой картинки. Сейчас приходится делать через временные буферы с попиксельным пересчетом основным процессором в основной памяти. Хотелось бы прикрутить как-то образом палитры, что бы процессор вообще не гонять.

>>(собсно, в msdn написано, что палитра только для первичной пов-ти и имеет смысл)

>Ещё для текстур.

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

Еще небольшой вопрос: какой максимальный размер может быть у текстур?


Sapersky   (2005-05-12 12:19:00) [3]

Т.е. битность дисплея фактически выставляет битность этих пов-тей.

В системной памяти можно создать любого формата.

выполнять над каждым пиксеелем некоторые преобразования - табличное изменение яркости пикселей. Это можно сделать, как я понял, если включить режим 8 bit у дисплея, и изменять палитру у первичной пов-ти

Есть ещё гамма-контроль, IDirectDrawGammaControl. Действует тоже на первичную поверхность, но при любой глубине цвета.

(собсно, в msdn написано, что палитра только для первичной пов-ти и имеет смысл)

Ещё для текстур.


Наверх

Титульная страница Поиск, карта сайта Написать письмо