5xHs 5xHs
关注数: 8 粉丝数: 48 发帖数: 2,116 关注贴吧数: 27
那位大神 用delphi 写过 directx 我怎么跑不去来 唉 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Direct3D9; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public function InitD3D():Boolean; { Public declarations } end; var Form1: TForm1; g_d3d: IDirect3D9; g_d3ddev: IDirect3DDevice9; implementation {$R *.dfm} function GetFormatName(ModeFormat: TD3DFormat): string; begin case ModeFormat of D3DFMT_R5G6B5: Result:= 'D3DFMT_R5G6B5'; D3DFMT_R8G8B8: Result:= 'D3DFMT_R8G8B8'; D3DFMT_A8R8G8B8: Result:= 'D3DFMT_A8R8G8B8'; D3DFMT_X8R8G8B8: Result:= 'D3DFMT_X8R8G8B8'; D3DFMT_X1R5G5B5: Result:= 'D3DFMT_X1R5G5B5'; D3DFMT_A4R4G4B4: Result:= 'D3DFMT_A4R4G4B4'; D3DFMT_A1R5G5B5: Result:= 'D3DFMT_A1R5G5B5'; D3DFMT_R3G3B2: Result:= 'D3DFMT_R3G3B2'; D3DFMT_A8: Result:= 'D3DFMT_A8'; D3DFMT_A8R3G3B2: Result:= 'D3DFMT_A8R3G3B2'; D3DFMT_X4R4G4B4: Result:= 'D3DFMT_X4R4G4B4'; D3DFMT_A2B10G10R10: Result:= 'D3DFMT_A2B10G10R10'; else Result:= 'D3DFMT_UNKNOWN'; end; end; function TForm1.InitD3D():Boolean; var AdapterCount: Integer; AdapterIdentifier: TD3DAdapterIdentifier9; DisplayMode: TD3DDisplayMode; parms: TD3DPresentParameters; ModeCount: Integer; MCount: Integer; hr: LongInt; begin g_d3d:= Direct3DCreate9(D3D_SDK_VERSION); if (g_d3d = nil) then begin ShowMessage('失败了!!!'); g_d3d:= nil; end; AdapterCount:= g_d3d.GetAdapterCount(); //Form1.Memo1.Lines.Add('视频卡数量:'+IntToStr(AdapterCount)); g_d3d.GetAdapterIdentifier(D3DADAPTER_DEFAULT, D3DENUM_WHQL_LEVEL, AdapterIdentifier); //Form1.Memo1.Lines.Add(AdapterIdentifier.Driver) ; //Form1.Memo1.Lines.Add(AdapterIdentifier.Description); //Form1.Memo1.Lines.Add(AdapterIdentifier.DeviceName); ModeCount:= g_d3d.GetAdapterModeCount(D3DADAPTER_DEFAULT, D3DFMT_R5G6B5); for MCount:= 0 to ModeCount - 1 do begin g_d3d.EnumAdapterModes(D3DADAPTER_DEFAULT, D3DFMT_R5G6B5, MCount, DisplayMode); //Form1.Memo1.Lines.Add('分辨率宽度:'+IntToStr(DisplayMode.Width)+ '分辨率高度:'+IntToStr(DisplayMode.Height)+ '分辨率刷新速度:'+IntToStr(DisplayMode.RefreshRate)+'分辨率格式'+ GetFormatName(DisplayMode.Format)); end; g_d3d.GetAdapterDisplayMode(D3DADAPTER_DEFAULT, DisplayMode); //Form1.Memo1.Lines.Add('当前分辨率宽度:'+IntToStr(DisplayMode.Width)+ '当前分辨率高度:'+IntToStr(DisplayMode.Height)+ '当前分辨率刷新速度:'+IntToStr(DisplayMode.RefreshRate)+'当前分辨率格式'+ GetFormatName(DisplayMode.Format)); parms.BackBufferWidth:= 800; parms.BackBufferHeight:= 600; parms.BackBufferFormat:= D3DFMT_R5G6B5; parms.BackBufferCount:= 1; parms.MultiSampleType:= D3DMULTISAMPLE_NONE; parms.SwapEffect:= D3DSWAPEFFECT_COPY; parms.hDeviceWindow:= Handle; parms.Windowed:= True; parms.EnableAutoDepthStencil:= False; parms.AutoDepthStencilFormat:= D3DFMT_UNKNOWN; parms.Flags:= 0; parms.FullScreen_RefreshRateInHz:= 0; parms.PresentationInterval:= D3DPRESENT_RATE_DEFAULT; hr:= g_d3d.CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, handle ,D3DCREATE_SOFTWARE_VERTEXPROCESSING, @parms, g_d3ddev); if Failed(hr) then ShowMessage('shibaile'); //g_d3ddev.Clear(0,0, D3DCLEAR_TARGET,RGB(255,255,255), 0, 0); end; procedure TForm1.Button1Click(Sender: TObject); begin InitD3D(); end; end. 创建失败 ShowMessage('shibaile');
首页 1 2 下一页