D3D 编译 E_INVALIDARG
D3DCompile E_INVALIDARG
我在使用 D3DCompile 时遇到了一些问题。我正在编写具有 CX\C++ 运行时的 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。
有趣的是,如果我在着色器的文本中犯了一个错误(例如,没有写另一个入口点),那么结果就是特定的编译错误。
可能是什么问题?
是的,放弃旧的 SDK 就可以了!
不应将旧版 DirectX SDK 用于 UWP 应用程序开发。
见MSDN: Where is the DirectX SDK? and this blog post。
用于 Windows 8.0、Windows 8.1 和 Windows 10 的 Windows SDK 已经包含所有最新的 DirectX headers,包括最新版本的D3DCompile(版本 #47,与旧版 DirectX SDK 的版本 #43 相对)。参见 HLSL, FXC, and D3DCompile
一些旧版 DirectX SDK 已弃用,并且在 Windows SDK 中不可用,特别是 D3DX9、D3DX10 和 D3DX11。参见 Living without D3DX。
Really, you shouldn't need the legacy DirectX SDK even for Win32 desktop development except when you are still targeting Windows XP -or- if you need XAudio2 on Windows 7. See The Zombie DirectX SDK.
我在使用 D3DCompile 时遇到了一些问题。我正在编写具有 CX\C++ 运行时的 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。
有趣的是,如果我在着色器的文本中犯了一个错误(例如,没有写另一个入口点),那么结果就是特定的编译错误。
可能是什么问题?
是的,放弃旧的 SDK 就可以了!
不应将旧版 DirectX SDK 用于 UWP 应用程序开发。
见MSDN: Where is the DirectX SDK? and this blog post。
用于 Windows 8.0、Windows 8.1 和 Windows 10 的 Windows SDK 已经包含所有最新的 DirectX headers,包括最新版本的D3DCompile(版本 #47,与旧版 DirectX SDK 的版本 #43 相对)。参见 HLSL, FXC, and D3DCompile
一些旧版 DirectX SDK 已弃用,并且在 Windows SDK 中不可用,特别是 D3DX9、D3DX10 和 D3DX11。参见 Living without D3DX。
Really, you shouldn't need the legacy DirectX SDK even for Win32 desktop development except when you are still targeting Windows XP -or- if you need XAudio2 on Windows 7. See The Zombie DirectX SDK.