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

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

Иерархия данных форматов. [Delphi]


MrAngel ©   (2004-06-22 00:31:00) 

Всё относится к Direct3D.
Есть так называемые форматы. Вот моя предположительная иерархия:

Будем считать от форматов заднего буффера (Back Buffer Formats).
Итак -
1. каждый формат заднего буффера (Back Buffer Format) может иметь в себе несколько форматов мультисемплирования (Multisample Formats), т.е. D3DMULTISAMPLE_NONE, D3DMULTISAMPLE_2_SAMPLES, D3DMULTISAMPLE_4_SAMPLES и т.д.

2. каждый формат мультисемплирования (Multisample Format), может содержать в себе несколько Depth/Stencil Formats, т.е. D3DFMT_D16_LOCKABLE, D3DFMT_D24S8, D3DFMT_D24X8, D3DFMT_D16 и т.д.

Верно ли моё суждение. Или есть какие-нибудь иные способы реализации размещения данных ?


MrAngel   (2004-06-25 17:57:00) [1]

На самом деле идея такого размещения данных была взята из DirectX Caps Viewer.

Я бы сам не разобрался в том, что они наворотили там с этими методами определения параметров. С определением видео режимов ещё куда бы не шло, но это !!!


MrAngel   (2004-06-25 17:36:00) [2]

NailMan © почему не так ? всё так как и у тебя. Только у меня ещё каждый формат мультисемплинга имеет ещё набор Depth/Stencil Formats.

За второе большое спасибо.


NailMan   (2004-06-25 15:52:00) [3]

Нет не так:
Я в деске(в настройках) энумерирую так(конкретно для формата бэкбуфера 16-bit):

if CheckMultiSample(D3DFMT_R5G6B5,D3DMULTISAMPLE_NONE) then
   MS.Lines.Add(GetSampleTypeFromFormat(D3DMULTISAMPLE_NONE));
For i:=2 to 16 do
if CheckMultiSample(D3DFMT_R5G6B5,TD3DMultiSample_Type(i)) then
     MS.Lines.Add(GetSampleTypeFromFormat(TD3DMultiSample_Type(i)));

Где

Function CheckMultiSample(AdapterFormat:TD3DFormat;Fmt:TD3DMultiSample_Type):boolean;
var hr:hresult;
begin
hr:=d3d.CheckDeviceMultiSampleType(D3DADAPTER_DEFAULT,
                                  D3DDEVTYPE_HAL,
                                  AdapterFormat,
                                  False,
                                  Fmt,
                                  nil);
//    If failed(hr) then showmessage(DXGetErrorString9(hr));
   result:=SUCCEEDED(hr);
end;

Тоесть для каждого формата бэкбуфера может или не может поддерживаться какой-либо формат мультисемплинга. Сам мультисемплинг уже ничего не содержит - это константы вобщем-то.
Function GetSampleTypeFromFormat(fmt:TD3DMULTISAMPLE_TYPE):string;
begin
result:='D3DMULTISAMPLE_NONE';
 if fmt=D3DMULTISAMPLE_NONE then begin result:='D3DMULTISAMPLE_NONE';exit;end;
result:='D3DMULTISAMPLE_'+inttostr(dword(fmt))+'_SAMPLES';
end;




> Как определить какие из этих IDirect3D9::CreateDevice может
> принимать. Ведь попустим, если видеокарта не поддерживает
> хардварный процессинг, то D3DCREATE_HARDWARE_VERTEXPROCESSING
> сразу же отпадает, но как это определить ?


d3d.GetDeviceCaps(D3DADAPTER_DEFAULT,D3DDEVTYPE_HAL,D3DCaps);
if
    (not checkflag(D3DCaps.DevCaps,D3DDEVCAPS_DRAWPRIMITIVES2EX)) and
    (not checkflag(D3DCaps.DevCaps,D3DDEVCAPS_HWTRANSFORMANDLIGHT))
    then
   begin
    ShowErrorReport('Извините, но у Вас видеокарта не поддерживает Hardware Transform & Lightning.'#13#10+
                    'Программа не запустится на картах не имеющих геометрического сопроцессора.'#13#10+
                    'Минимальные видеокарты имеющие геометрический сопроцессор являются nVIDIA GeForce 256 и ATI Radeon 8500');
    D3D:=nil;
    result:=1;
    exit;
   end;


Так пойдет?  ;-)

Сосбно и D3DDEVCAPS_HWTRANSFORMANDLIGHT вполне хватит. Если D3DDEVCAPS_HWTRANSFORMANDLIGHT поддерживается, то и MIXED тоже поддерживается.

---
WBR, NailMan aka 2:5020/3337.13


MrAngel   (2004-06-25 15:00:00) [4]

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

В общем всё выше спрашиваемое было правильным подходом.

Но вот теперь несколько иная проблема по той же теме.
BehaviorFlags должна принимать обязательно одно из этих значений:
D3DCREATE_SOFTWARE_VERTEXPROCESSING
D3DCREATE_MIXED_VERTEXPROCESSING
D3DCREATE_HARDWARE_VERTEXPROCESSING

Как определить какие из этих IDirect3D9::CreateDevice может принимать. Ведь попустим, если видеокарта не поддерживает хардварный процессинг, то D3DCREATE_HARDWARE_VERTEXPROCESSING сразу же отпадает, но как это определить ?


Колбасьев   (2004-06-25 13:10:00) [5]

Я (почти) все делаю по умолчанию :-) И работает.


MrAngel   (2004-06-22 17:06:00) [6]

Ребята неужели ни кто этим не занимался? Ведь это относится к перечислению возможных параметров при создании девайса.


Наверх

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