为什么“警告X4000:使用可能未初始化的变量”显示了不止一种通用方法的用法?

时间:2019-02-20 07:33:51

标签: c++ directx-11 hlsl pixel-shader

我在hlsli中有一个常用方法

/// RendererShaderTypes.hlsli
///
static inline float4 OverlayColor(float2 texOverlay, float4 videoColor)
{

      float4 texColor = float4(imageMixTexture[4].Sample(imageMixSampler[4], texOverlay));
      if (texColor.r == keyColor.r &&
          texColor.g == keyColor.g &&
          texColor.b == keyColor.b)
      {
          return videoColor;
      }
      return lerp(texColor, videoColor, transparency);
}

从多个hlsl像素着色器中调用它。

#include "RendererShaderTypes.hlsli"
float4 main(PSPosTexOverlay input) : SV_TARGET
{
    return OverlayColor(input.texOverlay, backColor);
}

也被调用到另一个像素着色器

#include "RendererShaderTypes.hlsli"
float4 main(PSPosVideoTexture input) : SV_TARGET
{
     // lookup color of video
     float4 mixColor = mul(colorMatrix[0], VideoColor(imageMixSampler[0], imageMixTexture[0], input.texImage));
     mixColor.rgb *= mixColor.a;
     mixColor.a = 1.0f;
     return OverlayColor(input.texOverlay, mixColor);
}

编译时显示以下警告。知道为什么会显示吗?

  

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

1 个答案:

答案 0 :(得分:0)

我不知道任何令人满意的原因,但我已经解决了这个问题。任何调用中间函数return语句的函数都会在编译过程中显示警告。我这样重写了上面的其中之一,警告消失了。

eli5