我在这里遇到了D3DCompile的问题。我正在编写一个具有CX \ C ++ Runtime的UWP应用程序。 有一个代码
const std::string shaderSource =
"struct PixelShaderInput\n"
"{\n"
" float3 color : COLOR0;\n"
"};\n\n"
"float4 main(PixelShaderInput input) : SV_TARGET\n"
"{\n"
" return float4(1.0f, 1.0f, 0.0f, 1.0f);\n"
"}";
HRESULT hr = D3DCompile(
shaderSource.c_str(),
shaderSource.length(),
NULL,
NULL,
NULL,
"main",
"ps_5_0",
NULL,
NULL,
&pShaderCode,
&errorBlob);
结果,我得到了E_INVALIDARG。
有趣的是,如果我在着色器的文本中出错(例如,不要写另一个入口点),那么结果就是特定的编译错误。
可能是什么问题?
答案 0 :(得分:0)
是的,删除旧的SDK,它可以工作!
答案 1 :(得分:0)
旧版DirectX SDK不应用于UWP应用程序开发。
请参阅MSDN: Where is the DirectX SDK?和this blog post。
适用于Windows 8.0,Windows 8.1和Windows 10的Windows SDK已包含所有最新的DirectX标头,包括最新版本的D3DCompile(版本#47,而不是旧版DirectX SDK的#43版本)。见HLSL, FXC, and D3DCompile
旧版DirectX SDK的一些部分已弃用,在Windows SDK中不可用,特别是D3DX9,D3DX10和D3DX11。请参阅Living without D3DX。
实际上,即使是针对Win32桌面开发,您也不需要传统的DirectX SDK,除非您仍然使用Windows XP - 或者 - 如果您需要在Windows 7上使用XAudio2,请参阅The Zombie DirectX SDK。