Показать сообщение отдельно
  #1  
Старый 16.06.2008, 22:24
cavalera cavalera вне форума
Прохожий
 
Регистрация: 16.06.2008
Сообщения: 3
Репутация: 10
По умолчанию Почему не хочет создаваться IDirect3DDevice9

Посмотрите пожалуйста в чём ошибка. У меня не хочет создаваться графическое устройство, если убрать в прорисовке проверку на nil, то выдаёт Access Violitation
PHP код:
unit Unit1;

interface

uses
  Windows
MessagesSysUtilsVariantsClassesGraphicsControlsForms,
  
DialogsDirect3D9D3DX9AppEvnts;

type
  TForm1 
= class(TForm)
    
ApplicationEvents1TApplicationEvents;
    
procedure FormCreate(SenderTObject);
    
procedure FormDestroy(SenderTObject);
    
procedure ApplicationEvents1Idle(SenderTObject; var DoneBoolean);
  private
    { Private 
declarations }
    
DirectX IDirect3D9;
    
Device IDirect3DDevice9;
    
font ID3DXFont;
  public
    { Public 
declarations }
  
end;

var
  
Form1TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(SenderTObject);
var
  
ps PD3DPRESENT_PARAMETERS;
  
dm TD3DDISPLAYMODE;
  
hRet HRESULT;
begin
  Device 
:= nil;
  
DirectX := nil;
  
DirectX := Direct3DCreate9(D3D_SDK_VERSION);
  
DirectX.GetAdapterDisplayMode(D3DADAPTER_DEFAULTdm);

  
ps.Windowed := true;
  
ps.SwapEffect := D3DSWAPEFFECT_DISCARD;
  
ps.BackBufferFormat := dm.Format;
  
HRet := DirectX.CreateDevice(D3DADAPTER_DEFAULTD3DDEVTYPE_HALHandleD3DCREATE_SOFTWARE_VERTEXPROCESSINGpsDevice);

  
HRet := D3DXCreateFont(Device150FW_BOLD1FALSEDEFAULT_CHARSET,
             
OUT_DEFAULT_PRECISDEFAULT_QUALITYDEFAULT_PITCH or FF_DONTCARE,
             
'Arial'Font);
end;

procedure TForm1.FormDestroy(SenderTObject);
begin
  font 
:= nil;
  
Device := nil;
  
DirectX := nil;
end;

procedure TForm1.ApplicationEvents1Idle(SenderTObject;
  var 
DoneBoolean);
begin
  
if (device nilthen exit;
  
Device.Clear(0nilD3DCLEAR_TARGETD3DCOLOR_XRGB(000), 1.00);
  
Device.BeginScene;
  
Device.EndScene;
  
Device.Present(nilnil0nil);
end;

end
Ответить с цитированием