[英]Initializing Direct3D failure in rastertek tutorial
因此,我已经开始熟悉C ++语言和DirectX11。主要是因为有大量可供学习的资源。
可以在这里找到该教程http://www.rastertek.com/dx11tut03.html
问题是DirectX 11 Visual Studio 2010程序不能真正起作用,初始化过程返回false
我的问题很简单。 它不会初始化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行,但是它完成了您在教程页面中可以看到的所有检查。
我遇到驱动程序可能会出现问题的情况,并发现了这一点: 因此,我们可以注意到,DDI是10而不是11
那么,这可能是我可能无法运行Direct X 11的问题吗?如何解决该问题?
谢谢您的帮助。
实际上,这在本教程中特别指出:
// 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
与HARDWARE D3D_FEATURE_LEVEL_11_0
使用。 由于rastertek教程的日期过旧,因此他们没有提及您可以使用D3D_FEATURE_LEVEL_10_0
或D3D_DRIVER_TYPE_WARP
(一种软件驱动程序,其速度比硬件慢,但比旧的参考驱动器快得多)。
请参见Direct3D功能级别和Direct3D 11 Create Device的剖析 。
rastertek教程很有用,但是过时了。 特别是,它们使用了许多旧版DirectX SDK中不推荐使用的内容。 我建议您改为更新到Visual Studio的较新版本(也许是社区版 ),并使用DirectX Tool Kit教程 。 掌握了这些内容之后,就可以返回rastertek教程了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.