HLSL 编译器使用以下代码发出错误消息">警告 X4000:使用可能未初始化的变量":
float4 GetPixelColorFromRawImage(
in ByteAddressBuffer Source,
in uint2 SourceSize,
in uint2 XY)
{
// Check if within range
if (any(XY >= SourceSize))
return float4(0.5, 0.0, 0.0, 1.0); // <<<==== WARNING HERE
if (BytesPerPixel == 3) {
// 24 bits RGB color image
uint4 RGBA = GetPixelRGBAFromRawImage(Source, SourceSize, XY);
return float4(RGBA.r / 256.0,
RGBA.g / 256.0,
RGBA.b / 256.0,
RGBA.a / 256.0);
}
else if (BytesPerPixel == 2) {
// 16 bit grayscale image
uint Gray1 = GetPixel16BitGrayFromRawImage(Source, SourceSize, XY);
uint Gray2 = GetByteFromUInt(LUT16.Load(Gray1 & (~3)), Gray1 & 3);
float Gray3 = (float)Gray2 / 256.0;
return float4(Gray3, Gray3, Gray3, 1.0);
}
else {
return float4(0.0, 0.0, 0.0, 1.0);
}
}
我不明白这个警告。违规行中根本没有使用变量!
任何帮助表示赞赏。
编译器有时会对中间return
调用发疯,并在不应该有错误的地方给出错误。
您可以尝试一些解决方法。
在方法的开头,定义并实例化一个变量,然后在 ifs 中更新它并返回它。
float4 GetPixelColorFromRawImage(
in ByteAddressBuffer Source,
in uint2 SourceSize,
in uint2 XY)
{
float4 returnVar = float4(0.0, 0.0, 0.0, 0.0);
// Check if within range
if (any(XY >= SourceSize))
returnVar = float4(0.5, 0.0, 0.0, 1.0);
if (BytesPerPixel == 3) {
// 24 bits RGB color image
uint4 RGBA = GetPixelRGBAFromRawImage(Source, SourceSize, XY);
returnVar = float4(RGBA.r / 256.0,
RGBA.g / 256.0,
RGBA.b / 256.0,
RGBA.a / 256.0);
}
else if (BytesPerPixel == 2) {
// 16 bit grayscale image
uint Gray1 = GetPixel16BitGrayFromRawImage(Source, SourceSize, XY);
uint Gray2 = GetByteFromUInt(LUT16.Load(Gray1 & (~3)), Gray1 & 3);
float Gray3 = (float)Gray2 / 256.0;
returnVar = float4(Gray3, Gray3, Gray3, 1.0);
}
else {
returnVar = float4(0.0, 0.0, 0.0, 1.0);
}
return returnVar;
}