【问题标题】:Initializing Direct3D failure in rastertek tutorial在 rastertek 教程中初始化 Direct3D 失败
【发布时间】:2017-01-22 18:10:50
【问题描述】:

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

教程可以在这里找到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 行,但它完成了您可以在教程页面中看到的所有检查。

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

这就是我可能遇到的导致 Direct X 11 无法运行的问题吗?如何解决?

感谢您的帮助。

【问题讨论】:

  • “会不会是我遗漏了一些非常重要的东西?” - 是的,minimal reproducible example
  • 代码可以在链接中找到,我的代码是 1:1。所以教程并没有真正提到这个问题,它期望没有失败。但是是什么原因造成的呢?
  • 本教程当然不是"minimal",这里的问题不应该链接到场外内容,如果这对问题至关重要的话。跨度>
  • 是的,不知道该怎么做......好吧,我会让你在我的位置写一个问题,这样我就可以看到并向你学习如何写一个关于这个确切问题的最小问题.如果您可以简单地判断这是不正确的,请以正确的方式显示。
  • 您可以看到我的个人资料。如果您需要灵感,可以在那里查看我的问题。

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


【解决方案1】:

这其实是在教程中特别提到的:

// 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 教程很有用,但已经过时了。特别是他们使用了大量来自legacy DirectX SDKdeprecated 内容。我建议您改为更新到较新版本的 Visual Studio(可能是 Community edition)并使用 DirectX Tool Kit tutorial。掌握了这些内容后,您可以返回 rastertek 教程。

【讨论】:

  • 感谢您提供的信息,我正在检查并决定改用 Direct X 10,因为速度对于像我这样的 PC 很重要。我想我会在购买新笔记本电脑时更新到更新的 VS,它会搞乱我当前的项目和我现在的流程。
  • 您不需要使用 DirectX 10 API,也不应该使用。它已被弃用,任何新程序都不应使用它。 DirectX 11 API 实际上比 DirectX 10 支持 更多 硬件,并且具有完全相同或更好的性能。问题是您正在使用的教程是在假设您拥有D3D_FEATURE_LEVEL_11_0 或更好的视频卡的情况下构建的。 DirectX Tool Kit 教程适用于 Direct3D Feature Level 9.3 或更高的硬件。
  • 我可以按照 Code::Blocks 或 VS2010 进行操作吗,因为我不想占用更多内存并花更多时间更改 IDE
猜你喜欢
  • 2012-01-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 2012-11-17
  • 2017-12-10
  • 2018-09-17
  • 1970-01-01
相关资源
最近更新 更多