Hallo.
Wie ihr vieleicht mitbekommen habt, schreibe ich gerade eine kleine 2D Engine.
Mein Problem ist jedoch, dass diese bei manchen Leuten während der Initialisierung aussteigt.
Meine Frage: Sieht vielleicht jemand, der sich mit
DirectX gut auskennt was ich falsch machen könnte? Ich habe meinen SourceCode mal ausschnittsweise geposted. Der gesammte Code findet sich unter folgender Addresse:
http://andorra.cvs.sourceforge.net/a...w=markup#l_458
Delphi-Quellcode:
function InitDisplay(Appl:TAndorraApplication; AWindow:hWnd; AOptions:TAdDrawModes;
ADisplay:TAdDrawDisplay):boolean;
var
d3dpp:TD3DPresent_Parameters;
d3ddm:TD3DDisplayMode;
d3dcaps9:TD3DCaps9;
d3ddi:TD3DADAPTER_IDENTIFIER9;
dtype:TD3DDevType;
hvp:boolean;
vp : Integer;
i:integer;
begin
result := false;
if Appl <> nil then
begin
with TAndorraApplicationItem(Appl) do
begin
[SNIP]
//Get the device capilities.
if failed(Direct3D9.GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, d3dcaps9)) then
begin
WriteLog(ltFatalError,PChar('Error while getting adapter capilities.'));
exit;
end;
//Get the current display mode
if failed(Direct3D9.GetAdapterDisplayMode(D3DADAPTER_DEFAULT, d3ddm)) then
begin
WriteLog(ltFatalError,PChar('Error while getting current adapter displaymode.'));
exit;
end;
Fillchar(d3dpp,sizeof(d3dpp),0);
with d3dpp do
begin
Windowed := not (doFullscreen in AOptions);
SwapEffect := D3DSWAPEFFECT_DISCARD;
if not (doVSync in AOptions) then
begin
Fullscreen_PresentationInterval := D3DPRESENT_INTERVAL_IMMEDIATE;
end;
if (ADisplay.BitCount = 0) or (Windowed) then
begin
BackBufferFormat := d3ddm.Format;
end
else
begin
case ADisplay.BitCount of
16 : BackBufferFormat := D3DFMT_R5G6B5;
24 : BackBufferFormat := D3DFMT_R8G8B8;
32 : BackBufferFormat := D3DFMT_A8R8G8B8;
else
BackBufferFormat := D3DFMT_A8R8G8B8;
end;
end;
if not Windowed then
begin
BackBufferWidth := ADisplay.Width;
BackBufferHeight := ADisplay.Height;
if ADisplay.Freq > 0 then
begin
Fullscreen_RefreshRateInHz := ADisplay.Freq;
end;
end;
end;
if hvp then
vp := D3DCREATE_HARDWARE_VERTEXPROCESSING
else
vp := D3DCREATE_SOFTWARE_VERTEXPROCESSING;
//Set weather to use HAL
if doHardware in AOptions then
dtype := D3DDEVTYPE_HAL
else
dtype := D3DDEVTYPE_REF;
//HIER GIBTS DAS PROBLEM...
//Create device
if Failed(Direct3D9.CreateDevice(D3DADAPTER_DEFAULT, dtype, AWindow, vp, d3dpp, Direct3d9Device)) then
begin
WriteLog(ltFatalError, 'Couldn''t initialize Direct3DDevice!');
exit;
end
else
begin
result := true;
end;
[SNIP]
Wie schon im Quellcode gezeigt schmiert er bei manchen in der Zeile Direct3D9.CreateDevice ab. Ich denke, dass es etwas mit den Presentation Parameters zu tun hat.
Danke, hoffentlich findet sich etwas...
Igel457