6 votes

Pourquoi le message "Warning X4000 : use of potentially uninitialized variable" apparaît-il pour plus d'une utilisation d'une méthode commune ?

J'ai une méthode commune dans 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);
}

Il est appelé par plus d'un pixel shaders hlsl.

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

également appelé à un autre pixel shader

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

lorsqu'il est compilé, l'avertissement suivant apparaît. Une idée de la raison de cet affichage ?

warning X4000 : utilisation d'une variable potentiellement non initialisée (OverlayColor)

10voto

Tajuddin Khandaker Points 563

Je ne connais pas encore de raison satisfaisante mais j'ai résolu le problème. Toute fonction qui appelle une déclaration de retour au milieu d'une fonction affichera l'avertissement pendant la compilation. J'ai réécrit l'une des fonctions ci-dessus comme ceci et l'avertissement a disparu.

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X