我通過以下代碼示例從here瞭解DirectX。我在代碼集1,第6章框代碼示例。當我嘗試編譯第6章的代碼在DirectX 11兼容的機器,它運行良好,但是當我在DirectX 11的機器上運行的代碼在DirectX 10的FEATURE LEVEL
的Shader 5.0DirectX 11向後兼容
//d3App.cpp.
//In InitDirect3D() method
D3D_FEATURE_LEVEL a[]={D3D_FEATURE_LEVEL_10_0};
HRESULT hr = D3D11CreateDevice(
0, // default adapter
md3dDriverType,
0, // no software device
createDeviceFlags,
a, 1, // default feature level array
D3D11_SDK_VERSION,
&md3dDevice,
&featureLevel,
&md3dImmediateContext);
if(FAILED(hr))
{
MessageBox(0, L"D3D11CreateDevice Failed.", 0, 0);
return false;
}
//if(featureLevel != D3D_FEATURE_LEVEL_11_0)
//{
// MessageBox(0, L"Direct3D Feature Level 11 unsupported.", 0, 0);
// return false;
//}
然後在box.cpp
//Box.cpp
//In BuildFX() method
HRESULT hr = D3DX11CompileFromFile(L"FX/color.fx", 0, 0, 0, "fx_5_0", shaderFlags,
0, 0, &compiledShader, &compilationMsgs, 0);
它在
//Box.cpp. Line 172
HR(mSwapChain->Present(0, 0));
了錯誤。如果我改變着色器fx_4_0
與DirectX 10的feature level
,它失敗在在DirectX 11和DirectX 10機器中均使用。此外,在DirectX 10機器中,如果我使用着色器fx_5_0
在DirectX 10功能級別上運行它,它不會給出錯誤,但它也不會執行任何操作。
是否可以使用DirectX 11 API來構建應用程序,該應用程序與僅支持較低版本DirectX的機器兼容?如果兒子,directX自動處理它,還是我們必須自己做?
Direct3D 11的傳統D3DX功能替換完整列表可以在這裏找到(http://blogs.msdn.com/b/chuckw/archive/2013/08/21/living-without-d3dx。 ASPX)。 – 2014-09-27 18:24:30
另請參見[Direct3D 11創建設備剖析](http://blogs.msdn.com/b/chuckw/archive/2014/02/05/anatomy-of-direct3d-11-create-device。aspx)和[Direct3D Feature Levels](http://blogs.msdn.com/b/chuckw/archive/2012/06/20/direct3d-feature-levels.aspx) – 2014-09-27 18:25:49
@ChuckWalbourn傑出。謝謝你的提示。 – Jeff 2014-09-29 02:50:17