2011-02-24 63 views
2

我想通過下面的代碼來創建一個DirectX設備:C#:無法創建DirectX設備。無論是硬件式或軟件式的作品

Caps deviceCapability; 
int deviceAdapter = Manager.Adapters.Default.Adapter; 

try 
{ 
    deviceCapability = Manager.GetDeviceCaps(
     deviceAdapter, DeviceType.Hardware); 
} 
catch (Exception ex1) 
{ 
    try 
    { 
     deviceCapability = Manager.GetDeviceCaps(
      deviceAdapter, DeviceType.Software); 
    } 
    catch (Exception ex2) 
    { 
     deviceCapability = Manager.GetDeviceCaps(
      deviceAdapter, DeviceType.Reference); 
    } 
} 

CreateFlags deviceFlags = CreateFlags.SoftwareVertexProcessing; 
if(deviceCapability.DeviceCaps.SupportsHardwareTransformAndLight == true) 
{ 
    deviceFlags = CreateFlags.HardwareVertexProcessing; 
} 

mDevice = new Device(deviceAdapter, deviceCapability.DeviceType, 
    mInvisiblePanel, deviceFlags, mPresentParams); 

的問題是,在某些計算機上這只是作品(如我的工作電腦),而它不在別人身上(具體而言,是松下CF-19 Toughbook)。我已經檢查過,以確保有問題的電腦通過dxdiag啓用了硬件加速功能,但它仍然沒有退出。

不幸的是,我得到的唯一錯誤消息是「應用程序錯誤」。我甚至在上面的代碼之間插入了幾個消息框,並且它似乎從未碰到過ex1和ex2 catch塊。

有關如何解決此問題的任何想法?

編輯:對不起,我只是意識到我忘了顯示我的PresentParameters。

// Setup the device parameters 
PresentParameters mPresentParams = new PresentParameters(); 
mPresentParams.Windowed = true; 
mPresentParams.SwapEffect = SwapEffect.Discard; 
mPresentParams.AutoDepthStencilFormat = DepthFormat.D16; 
mPresentParams.EnableAutoDepthStencil = true; 
///* TODO: Anti-aliasing is not working 
mPresentParams.MultiSample = MultiSampleType.NonMaskable; 
mPresentParams.MultiSampleQuality = 0; 
+0

相同版本的DirectX? – MusiGenesis 2011-02-24 00:49:26

+2

受管DirectX已被棄用4年了嗎?這東西用完了。 2007年8月的SDK版本是最後一個仍支持它的版本,我想你需要在機器上使用匹配的DirectX版本。版本9,我想。使用XNA前進。 – 2011-02-24 00:56:00

+0

是的,我在Toughbook和我的機器上安裝了相同的DirectX。至少,根據dxdiag。 – Japtar 2011-02-24 00:56:51

回答

1

解決了它。該死,我已經感到很蠢。

將PresentParameters減少到僅僅這3行就可以在Toughbook上工作。

// Setup the device parameters 
PresentParameters mPresentParams = new PresentParameters(); 
mPresentParams.Windowed = true; 
mPresentParams.SwapEffect = SwapEffect.Discard;