1 – شمارش تعداد آداپتورهای گرافیکی یک سیستم : فرض کنید متغیر nAdapters متغیری از نوع long باشد . همچنین شی D3DADAPTER_IDENTIFIER8 یک ساختار است که اطلاعات مربوط به آداپتور را نگه می دارد . در اینصورت روتین enumerateAdapters بصورت زیر خواهد بود :
Dim adapterinfo as D3DADAPTER_IDENTIFIER8
Private Sub EnumerateAdapters
Dim i as integer
nadapters=D3D.Getadaptercount
برای بدست آوردن جزئیات آداپبورها بصورت زیر عمل می کنیم :
for i=0 to nadapters-1
D3D.GetadapterIdentifier i ,0,adapterinfo
نام این آداپتور بصورت لیستی از کدهای اسکی است که بایستی آنها را درون یک string قرار دهیم :
for j=0 to 511
name=name & chr$(adapterinfo.description(j)) x
next j
name=replace(name,chr$(0),” “) x
end sub
بنابراین در متغیر name نام آداپتور قرار خواهد گرفت .
۲ – مشخص کردن نوع Rendering : فرض کنید شی D3DCAPS8 توانایی rendering آداپتور را نشان دهد . در اینصورت روتین EnumerateDevices بصورت زیر خواهد بود :
Private EnumerateDevices
On Local Error resume next
Dim Caps as D3DCAPS8
deviceindex=0 ‘For Example
D3D.Getdevicecaps deviceindex,D3DDEVTYPE_HAL,caps
if err.number=D3DERR_NOTAVAILABLE then
اگر آداپتور امکان رندر سخت افزاری نداشته باشد در اینصورت :
MsgBox(“Reference Rasterizer(REF)”) x
else
MsgBox(“Hardware Acceleration(HAL)+Reference Rasterizer(REF)”) x
end if
end sub
3 – شمارش تعداد Mode نمایشی آداپتور :
فرض کنید در صورت REF بودن امکان رندر ، متغیر r=2 و در غیراینصورت r=1
باشد . همچنین شی D3DDISPLAYMODE اطلاعات مدهای نمایشی را در خود
دارد . همچنین فرض کنید متغیر nModes از نوع longباشد . در اینصورت روتین enumeratedispmodes بصورت زیر خواهد بود :
Private Sub EnumerateDispModes(r as Long,n as Long) x
Dim i as integer
Dim mode_tmp as D3DDISPLAYMODE
deviceindex=0 ‘For Example
nModes=D3D.Getadaptermodecount(deviceindex) x
for i=0 to nModes-1
D3D.EnumAdapterModes(deviceindex,i,mode_tmp) x
ابتدا Mode ها را به دو گروه ۱۶ بیتی و ۳۲ بیتی تقسیم می کنیم :
if mode_tmp.format=D3DFMT_R8G8B8 or mode_tmp=D3DFMT_X8R8G8B8 or mode_tmp=D3DFMT_A8R8G8B8 then
حال چک می کنیم که device قابل پذیرش و معتبر است یا نه :
if D3D.checkdevicetype(deviceindex,r,mode_tmp.format,mode_tmp.format,Flase)>=0 then
MsgBox(mode_tmp.width & “X” & mode_tmp.height & “32 Bit
FMT:” & mode_tmp.format ) x & ”
end if
else
if D3D.checkdevicetype(deviceindex,r,mode_tmp.format,mode_tmp.format,Flase)>=0 then
MsgBox(mode_tmp.width & “X” & mode_tmp.height & “16 Bit
FMT:” & mode_tmp.format ) x & ”
end if
end if
next i
4 – مشخص کردن توانایی های آداپتور گرافیکی : فرض کنید در صورت REF بودن امکان رندر ، متغیر r=2 و در غیراینصورت r=1 باشد :
Private Sub EnumerateHardware(r as long) x
Dim caps as D3DCAPS8
D3D.Getdevicecaps deviceindex,r,caps
If Caps.MaxActiveLights = -1 Then
MsgBox “Maximum Active Lights: Unlimited” x
Else
MsgBox “Maximum Active Lights: ” & Caps.MaxActiveLights
End If
MsgBox “Maximum Point Vertex size: ” & Caps.MaxPointSize
MsgBox “Maximum Texture Size: ” & Caps.MaxTextureWidth & “X” & Caps.MaxTextureHeight
MsgBox “Maximum Primatives in one call: ” & Caps.MaxPrimitiveCount
If Caps.TextureCaps And D3DPTEXTURECAPS_SQUAREONLY Then
MsgBox “Textures must always be square” x
End If
If Caps.TextureCaps And D3DPTEXTURECAPS_CUBEMAP Then
MsgBox “Device Supports Cube Mapping” x
End If
If Caps.TextureCaps And D3DPTEXTURECAPS_VOLUMEMAP Then
MsgBox “Device Supports Volume Mapping” x
End If
If Caps.DevCaps And D3DDEVCAPS_PUREDEVICE Then
MsgBox “Device supports the Pure Device Option” x
End If
If Caps.DevCaps And D3DDEVCAPS_HWTRANSFORMANDLIGHT Then
MsgBox “Device supports hardware transform and lighting” x
End If
If Caps.DevCaps And D3DDEVCAPS_HWRASTERIZATION Then
MsgBox “Device can use Hardware Rasterization” x
End If
If Caps.Caps2 And D3DCAPS2_CANCALIBRATEGAMMA Then
MsgBox “Device can Calibrate Gamma” x
End If
If Caps.Caps2 And D3DCAPS2_CANRENDERWINDOWED Then
MsgBox “Device can Render in Windowed Mode” x
End If
If Caps.Caps2 And D3DCAPS2_FULLSCREENGAMMA Then
MsgBox “Device can calibrate gamma in fullscreen mode” x
End If
If Caps.RasterCaps And D3DPRASTERCAPS_FOGRANGE Then
MsgBox “Device supports range based fog calculations” x
End If
If Caps.RasterCaps And D3DPRASTERCAPS_ANISOTROPY Then
MsgBox “Device supports Anisotropic Filtering” x
End If
If Caps.RasterCaps And D3DPRASTERCAPS_ZBUFFERLESSHSR Then
MsgBox “Device does not require a Z-Buffer/Depth Buffer” x
End If
دیدگاه خود را بیان کنید.
باید وارد سایت شده باشید برای دیدگاه دادن