所以我开始熟悉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运行,以及如何解决这个问题?
感谢您的帮助。
答案 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_0
或D3D_DRIVER_TYPE_WARP
(软件驱动程序比硬件慢,但比旧的参考驱动程序快得多)。
请参阅Direct3D Feature Levels和Anatomy of Direct3D 11 Create Device。
rastertek教程很有用,但很老。特别是他们使用deprecated中的大量legacy DirectX SDK内容。我建议您更新到较新版本的Visual Studio(可能是Community edition)并使用DirectX Tool Kit tutorial。一旦掌握了这些内容,就可以回到rastertek教程。