Почему «Предупреждение X4000: использование потенциально неинициализированной переменной» показано для более чем одного использования общего метода? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть общий метод в 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 голосов
/ 29 июня 2019

Я пока не знаю удовлетворительной причины, но я решил проблему.Любая функция, которая вызывает оператор возврата средней функции, будет отображать предупреждение во время компиляции.Я переписал один из вышеперечисленных слов, и это предупреждение исчезло.

static inline float4 OverlayColor(int texIndex, float2 texOverlay, float4 videoColor)
{
    float4 texColor = float4(imageMixTexture[4].Sample(imageMixSampler[4], texOverlay));
    float4 overlayColor;
    if (texColor.r == keyColor.r &&
        texColor.g == keyColor.g &&
        texColor.b == keyColor.b)
    {
        overlayColor = videoColor;
    }
    else
        overlayColor = lerp(texColor, videoColor, transparency);
    return overlayColor;
}
...