在rastertek教程中初始化Direct3D失败

时间:2017-01-21 20:38:32

标签: c++ visual-studio-2010 directx-11 direct3d11

所以我开始熟悉C ++语言和DirectX 11。 主要是因为可以获得巨大的学习资源。

可以在http://www.rastertek.com/dx11tut03.html

找到该教程

问题是DirectX 11 Visual Studio 2010程序真的不起作用,初始化过程返回错误

我的问题很简单。它没有初始化Direct3D,没有错误,只是它没有得到布尔值等于true。下载解决方案将导致相同的结果。

// Initialize the Direct3D object.
result = m_D3D->Initialize(screenWidth, screenHeight, VSYNC_ENABLED, hwnd, FULL_SCREEN, SCREEN_DEPTH, SCREEN_NEAR);
if(!result)
{
    MessageBox(hwnd, L"Could not initialize Direct3D", L"Error", MB_OK);
    return false;
}

整个初始化代码超过100行,但它会执行您在教程页面中看到的所有检查。

我遇到了驱动程序可能遇到的问题并发现了这个问题: So there's one thing we can notice, the DDI is 10 instead of 11

这就是我可能遇到的问题,它不能让Direct X 11运行,以及如何解决这个问题?

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

这实际上是在教程中专门提到的:

// Set the feature level to DirectX 11.
featureLevel = D3D_FEATURE_LEVEL_11_0;
  

请注意,如果用户没有DirectX 11视频卡,则此功能调用将无法创建设备和设备上下文。此外,如果您自己测试DirectX 11功能并且没有DirectX 11视频卡,那么您可以将D3D_DRIVER_TYPE_HARDWARE替换为D3D_DRIVER_TYPE_REFERENCE,而DirectX将使用您的CPU来绘制而不是视频卡硬件。请注意,它的速度是1/1000,但对于那些在所有机器上都没有DirectX 11视频卡的用户来说这是个好消息。

// Create the swap chain, Direct3D device, and Direct3D device context.
result = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, &featureLevel, 1, 
                       D3D11_SDK_VERSION, &swapChainDesc, &m_swapChain, &m_device, NULL, &m_deviceContext);
if(FAILED(result))
{
    return false;
}

由于您的dxdiag显示您有10.0,因此您无法将D3D_FEATURE_LEVEL_11_0与硬件一起使用。由于rastertek教程有点过时,他们没有提到你可以使用D3D_FEATURE_LEVEL_10_0D3D_DRIVER_TYPE_WARP(软件驱动程序比硬件慢,但比旧的参考驱动程序快得多)。

请参阅Direct3D Feature LevelsAnatomy of Direct3D 11 Create Device

  

rastertek教程很有用,但很老。特别是他们使用deprecated中的大量legacy DirectX SDK内容。我建议您更新到较新版本的Visual Studio(可能是Community edition)并使用DirectX Tool Kit tutorial。一旦掌握了这些内容,就可以回到rastertek教程。