1

所以,我今天开始用 DirectX11 编程,我有很多编码经验,但不是专门的 DirectX,所以我去看了一些教程。一切进展顺利,我可以初始化一个窗口,设置背景颜色,但是一旦我尝试定义着色器并绘制对象,它就会在加载时崩溃。这段代码非常简单,我已经把它放在了一个 rar 中,所以你可以告诉我哪里出了问题。我在 Visual C++ Express Edition 中进行编码,因为我昨天尝试了几个小时在 Netbeans 中设置 OpenGL 参考路径无济于事,所以我还没有尝试让 DirectX 在那里工作。这是我目前拥有的代码:http ://www.mediafire.com/?i8w1trkx7c03qts

我还尝试下载并运行 www.dx11.org.uk/3dcube.htm 中提供的 exe,以测试它是否是我的直接 X 或其他东西,并且那个给我一个错误“无法创建 D3D11 设备”,它从他们的代码看是未能完成“D3D11CreateDeviceAndSwapChain”命令。老实说,我做错了什么/发生了什么?(关于如何在 netbeans 中设置 directX 库引用的任何帮助都会有很大帮助)。

4

3 回答 3

4

这个对我有用 :)

我不得不删除一些字符串的 L 前缀来编译代码: "shaders.hlsl", "WindowClass","Our First Direct3D Program"

您是否在与可执行文件相同的路径中有 .hlsl 文件?你也不能从VS启动程序。您需要从资源管理器中启动 .exe。但是,如果您不想要这种行为,您可以设置着色器的绝对路径,如下所示:

D3DX11CompileFromFile("C:\\Users\\Stringer\\Desktop\\DXTest\\shaders.hlsl", ...
D3DX11CompileFromFile("C:\\Users\\Stringer\\Desktop\\DXTest\\shaders.hlsl", ...

编辑: 此外,在创建设备或设备/交换链时,请始终D3D11_CREATE_DEVICE_DEBUG 在调试模式下使用。这将在 VS 输出窗口中打印有用的警告和错误(我这边一切正常)。

    D3D11CreateDeviceAndSwapChain(NULL,
                                  D3D_DRIVER_TYPE_REFERENCE,
                                  NULL,
#ifdef _DEBUG
                                  D3D11_CREATE_DEVICE_DEBUG,
#else
                                  0,
#endif
                                  NULL,
                                  NULL,
                                  D3D11_SDK_VERSION,
                                  &scd,
                                  &swapchain,
                                  &dev,
                                  NULL,
                                  &devcon);

编辑2:

还要始终检查应用程序可能失败的任何地方的错误代码:

ID3D10Blob* pErrorBlob = NULL;

HRESULT hr = D3DX11CompileFromFile("C:\\Users\\Stringer\\Desktop\\\\DXTest\\shaders.hlsl", 0, 0, "VShader", "vs_5_0", 0, 0, 0, &VS, &pErrorBlob, 0);
LPVOID pError = NULL;
if( pErrorBlob )
{
    pError = pErrorBlob->GetBufferPointer();
    // then cast to a char* to see it in the locals window
}
于 2010-08-16T22:54:12.077 回答
1

来自 www.directxtutorial.com 的 DX11 代码尝试将着色器编译为着色器模型 5。虽然 DX 10/10.1 类硬件已更新以利用一些 DX11 功能,但着色器模型 5 并不是其中之一。

更改:D3DX11CompileFromFile(L"shaders.hlsl", 0, 0, "VShader", "vs_5_0", 0, 0, 0, &VS, 0, 0); D3DX11CompileFromFile(L"shaders.hlsl", 0, 0, "PSShader", "ps_5_0", 0, 0, 0, &PS, 0, 0);

D3DX11CompileFromFile(L"shaders.hlsl", 0, 0, "VShader", "vs_4_0", 0, 0, 0, &VS, 0, 0); D3DX11CompileFromFile(L"shaders.hlsl", 0, 0, "PSShader", "ps_4_0", 0, 0, 0, &PS, 0, 0);

http://en.wikipedia.org/wiki/DirectX#DirectX_11

于 2010-08-27T05:57:10.420 回答
1

使用相同的教程我遇到了完全相同的问题。我只是尝试了同一教程的 DirectX 9 版本,它立即运行没有任何问题(除了需要从字符串开头删除的 L 字符,这与 Unicode 支持有关)。看来这个问题的根本原因是在某些人的系统上缺乏对 DX11 的支持。

于 2012-08-21T12:09:37.980 回答