Форум: "Игры";
Текущий архив: 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