DirectX从内存编译着色器?

时间:2013-09-03 19:34:56

标签: c++ directx shader directx-11

使用从这样的文件编译的着色器起作用:

    D3DX11CompileFromFile(filename, NULL, NULL, "main", "vs_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL, 
                   &vertexShaderBuffer, &errorMessage, NULL);

但如果我用这个替换上面的那一行:

D3DX11CompileFromMemory(vs, strlen(vs), NULL, NULL, NULL, "main", "vs_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL, 
                   &vertexShaderBuffer, &errorMessage, NULL);

虽然vs是着色器文件的char *(如果我使用vs打印std::cout,则会正确打印)。

它刚刚在那条线上崩溃......

我做错了什么?

1 个答案:

答案 0 :(得分:2)

不推荐使用D3DX API,您应该使用来自D3DCompiler.h的D3DCompile API。 D3DX11大致相同的东西被D3D取代,所以过渡很简单。

使用至少一个callstack或输出日志来编辑您的消息,因为没有更多信息,很难对答案更具体。