Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Вниз

IDirect3DDevice9 Не хочет создаваться   Найти похожие ветки 

 
Ford ©   (2005-09-26 19:45) [0]

Почему у меня не создаётся Device ??? И где можно найти доки к
DirectX на русском

procedure TForm1.Button1Click(Sender: TObject);
var
 D3DObject: IDirect3D9; //Директ 3Д Объект
 D3DDevice: IDirect3DDevice9;
 D3DParametre: D3DPRESENT_PARAMETERS;
 hr: Hresult;
 InfoFromVideo: D3DCAPS9;
begin
 //  1.  Созданния Директ 3Д Объекта
 D3DObject:= nil;
 D3DObject:= Direct3DCreate9((* это значенние должн вчегда быть D3D_SDK_VERSION *) D3D_SDK_VERSION);

 //  2.1 Заполнения структуры нужной для созданния устройства
 D3DParametre.Windowed:= true;
 D3DParametre.BackBufferFormat:= D3DFMT_UNKNOWN;
 D3DParametre.SwapEffect:= D3DSWAPEFFECT_DISCARD;
 D3DParametre.MultiSampleType:= D3DMULTISAMPLE_NONE;
 D3DParametre.hDeviceWindow:= panel1.Handle;
 D3DParametre.EnableAutoDepthStencil:= false;
 D3DParametre.PresentationInterval:= D3DPRESENT_INTERVAL_DEFAULT;
 //  2.2 Созданния Директ 3Д Устройства
 D3DDevice:= nil;
 hr:= D3DObject.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, form1.Handle,
   D3DCREATE_HARDWARE_VERTEXPROCESSING, @D3DParametre, D3DDevice );

 if (FAILED(hr)) then Halt(1);

end;


 
Sphinx ©   (2005-09-26 20:21) [1]

Инициализация в оконном режиме
http://forum.mirg.ru/index.php?act=Attach&type=post&id=10436

и в полноэкранном
http://forum.mirg.ru/index.php?act=Attach&type=post&id=10438

а так - ошибка на вскидку одна:
> D3DParametre.BackBufferFormat:= D3DFMT_UNKNOWN;
Нужно явно указывать формат
D3DFMT_A8R8G8B8 (32 битный режим) или D3DFMT_R5G6B5 (16 битный режим) должны работать почти всегда

а вообще....половину параметров можно получить на автомате...
вот куски из кода инициализации...у меня пока что проблем не было с ним :)
 // запись параметров устройства вывода Direct3D
 TD3DParametrs   = record
   HALTnL            : Boolean;                // признак аппаратной поддержки просчета вершин, трансформаций и освещения
   D3DAdapter        : Longword;               // устройство вывода
   DevType           : TD3DDevType;            // тип устройства вывода
   BufferPixFormat   : TD3DFormat;             // формат пикселей
   DepthFormat       : TD3DFormat;             // формат буфера глубины
   BehaviorFlags     : Longword;               // параметры инициализации
   PresentParameters : TD3DPresentParameters;  // параметры устройства
   DisplayMode       : TD3DDisplayMode;        // текущие настройки дисплея
   Caps              : TD3DCaps9;              // данные устройства вывода
   Identifier        : TD3DAdapterIdentifier9; // данные о драйвере устройства вывода
 end;
...
recD3DParametrs         : TD3DParametrs;      // запись параметров устройства вывода
...
 d3d9                    : IDirect3D9;         // основной интерфейс DirectX
 d3d9Device              : IDirect3DDevice9;   // интерфейс устройства вывода Direct3D
...
 // очистка и инициализация записи параметров устройства вывода
 with recD3DParametrs do
   begin
     HALTnL          := False;
     D3DAdapter      := D3DADAPTER_DEFAULT;
     DevType         := D3DDEVTYPE_HAL;
     BufferPixFormat := D3DFMT_UNKNOWN;
     DepthFormat     := D3DFMT_UNKNOWN;
     BehaviorFlags   := 0;
     ZeroMemory (@PresentParameters, SizeOf(TD3DPresentParameters));
     ZeroMemory (@DisplayMode,       SizeOf(TD3DDisplayMode));
     ZeroMemory (@Caps,              SizeOf(TD3DCaps9));
     ZeroMemory (@Identifier,        SizeOf(TD3DAdapterIdentifier9));
   end;
...
 // создаем основной интерфейс DirectX
 d3d9 := Direct3DCreate9(D3D_SDK_VERSION);
 if d3d9 = nil then
   Exit;

 // получаем параметры экрана
 hrError := d3d9.GetAdapterDisplayMode(recD3DParametrs.D3DAdapter, recD3DParametrs.DisplayMode);
 if Failed(hrError) then
   begin
     d3d9 := nil;
     Exit;
   end;

 // получаем информацию об устройстве вывода
 hrError := d3d9.GetDeviceCaps(recD3DParametrs.D3DAdapter, recD3DParametrs.DevType, recD3DParametrs.Caps);
 if (Failed(hrError)) and (hrError = D3DERR_INVALIDDEVICE) then
   begin
     recD3DParametrs.DevType := D3DDEVTYPE_REF;
     hrError := d3d9.GetDeviceCaps(recD3DParametrs.D3DAdapter, recD3DParametrs.DevType, recD3DParametrs.Caps);
   end;
 // если информацию об устройстве получить не удалось
 if Failed(hrError) then
   begin
     d3d9 := nil;
     Exit;
   end;

 // получаем данные о драйвере без проверки правильности
 d3d9.GetAdapterIdentifier(recD3DParametrs.D3DAdapter, 0, recD3DParametrs.Identifier);
...
 // заполнение полей записи создания устройства вывода
 with recD3DParametrs.PresentParameters do
   begin
     BackBufferWidth             := iSetting.ScreenWidth;
     BackBufferHeight            := iSetting.ScreenHeight;
     case iSetting.BPP of
       16: BackBufferFormat      := D3DFMT_R5G6B5;
       32: BackBufferFormat      := D3DFMT_A8R8G8B8;
     end;
     BackBufferCount             := 1;
     MultiSampleType             := D3DMULTISAMPLE_NONE;
     MultiSampleQuality          := 0;
     SwapEffect                  := D3DSWAPEFFECT_DISCARD;
     hDeviceWindow               := recRenderTargetWindow.WindowHandle;
     Windowed                    := not(iSetting.FullScreen);
     EnableAutoDepthStencil      := True;
     AutoDepthStencilFormat      := D3DFMT_D16;
     FullScreen_RefreshRateInHz  := D3DPRESENT_RATE_DEFAULT;
     if iSetting.VSync then
       PresentationInterval      := D3DPRESENT_INTERVAL_DEFAULT
     else
       PresentationInterval      := D3DPRESENT_INTERVAL_IMMEDIATE;
   end;
...
 // определение второстепенных параметров
 if (recD3DParametrs.Caps.DevCaps and D3DDEVCAPS_HWTRANSFORMANDLIGHT) = D3DDEVCAPS_HWTRANSFORMANDLIGHT then
   begin
     recD3DParametrs.HALTnL := True;
     recD3DParametrs.BehaviorFlags := D3DCREATE_HARDWARE_VERTEXPROCESSING;
   end
 else
   begin
     recD3DParametrs.BehaviorFlags := D3DCREATE_SOFTWARE_VERTEXPROCESSING
   end;
...
 // создание устройства вывода Direct3D
 hrError := d3d9.CreateDevice
                   (recD3DParametrs.D3DAdapter,
                    recD3DParametrs.DevType,
                    recRenderTargetWindow.WindowHandle,
                    recD3DParametrs.BehaviorFlags,
                    @recD3DParametrs.PresentParameters,
                    d3d9Device);
 if Failed(hrError) then
   begin
     d3d9Device := nil;
     Exit;
   end


 
NailMan ©   (2005-09-26 20:22) [2]

1.
D3DCREATE_HARDWARE_VERTEXPROCESSING  видеокарта поддерживает?

2. BackBufferFormat необходимо задавать явно. Если не знаешь что тебе нужно определи какой у десктопа формат поверхности.

к примеру делается так
d3d.GetAdapterDisplayMode(D3DADAPTER_DEFAULT,D3DMM);
 If d3dpp.BackBufferFormat<>D3DMM.Format then
    d3dpp.BackBufferFormat:=d3dmm.Format;


где var D3dMM:TD3DDisplayMode;

3. EnableAutoDepthStencil желательно включить и указать формат Z-буфера.

4. нужно указывать все параметры создаваемой плоскости, даже если она оконная

к примеру
  D3DPP.BackBufferWidth:=ScreenWidth;
  D3DPP.BackBufferHeight:=ScreenHeight;

и обязательно
  D3DPP.BackBufferCount:=1;

И вообще анализируй возвращаемый код ошибки в твоей переменной HR. Среди модулей есть функция генерации текстового описания ошибки который можно showmessage-нуть.

---
P.L.U.R. and WBR, NailMan aka 2:5020/3337.13


 
Ford ©   (2005-09-26 20:25) [3]

Попробал поменять  BackBufferFormat не выходит, щас код твой посмотрю чо к чему


 
Ford ©   (2005-09-26 20:31) [4]

Так я понял то что не создает из за ошибки в установленных мной параметрах. Так а функция как называеться чтоб описанния ошибки посмотреть.


 
NailMan ©   (2005-09-26 20:35) [5]

DXGetErrorString9 строковый эквивалент кода ошибки

---
P.L.U.R. and WBR, NailMan aka 2:5020/3337.13


 
Sphinx ©   (2005-09-26 20:45) [6]

Угу...только при этом не забудь dxerr.dll скопировать...
А лучше, если есть DirectX SDK выводить куда-нибудь код ошибки, только приводи к Cardinal например, а то HResult не всегда правильно выводит и используй "DirectX Error Lookup" то же самое - только dll не нужна будет...


 
Ford ©   (2005-09-26 21:09) [7]

Написала D3DERR_INVALIDCALL, че такое незнаю


 
Sphinx ©   (2005-09-26 21:20) [8]

DirectX SDK
D3DERR_INVALIDCALL The method call is invalid. For example, a method"s parameter may have an invalid value.


 
Sphinx ©   (2005-09-26 21:22) [9]

Я же тебе дал две ссылки на работающие примеры создания и инициализации директа...
Посмотреть в них код "гордость не позволяет" (с) ???


 
Ford ©   (2005-09-26 21:26) [10]

Ладно щас гляну, тут такой вопрос есть ли сылка на справку по функциям желательнно офицальнная.  В SDK есть какие либо справки ??? или там тока заголовки да примеры, а то думаю кочать или нет


 
Sphinx ©   (2005-09-26 21:39) [11]

($SDK ROOT)\Documentation\DirectX9\directx9_m.chm - 12 МБ
Думаю достаточная справка :)

А так...если в Инете - то онлайновый экземпляр того же самого
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directx9_c/directx/directx9cpp.asp


 
Sphinx ©   (2005-09-26 21:40) [12]

тэк...ошибочка малость directx9_m.chm - это для Managed
а для обычных программ - directx9_c.chm и весит она уже 14 МБ


 
Ford ©   (2005-09-26 22:05) [13]

У меня SDK как таковой нету, хочу тока справку скачать
Где сылку на неё найти ???



Страницы: 1 вся ветка

Форум: "Игры";
Текущий архив: 2006.04.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.012 c
1-1141670794
Начинающий__
2006-03-06 21:46
2006.04.09
Form.BorderStyle = bsSizeable, не показывать иконку


2-1143193076
Eugene5086
2006-03-24 12:37
2006.04.09
как показать модальную MDI-форму?


6-1135782302
Nepovezlo
2005-12-28 18:05
2006.04.09
Передача данных по ЛВС...


15-1142928107
kozhanov
2006-03-21 11:01
2006.04.09
Расширенный TDateTimePicker


2-1143100184
Bool
2006-03-23 10:49
2006.04.09
FormKeyDown





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский