警告 X4000:使用可能未初始化的变量



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;
}

相关内容

  • 没有找到相关文章

最新更新