【问题标题】:HLSL: problematic pixelshader code (alpha at zero when sampling)?HLSL:有问题的像素着色器代码(采样时 alpha 为零)?
【发布时间】:2011-04-03 11:21:17
【问题描述】:

像素着色器中的采样器有这个奇怪的问题。当我从采样器采样到一个空的 float4 变量时,我总是会返回黑色/透明颜色。所以如果我使用它,我会得到一个黑屏:

float4 PixelShaderFunction(float2 TextureCoordinate : TEXCOORD0) : COLOR0
    {
        float2 uv = TextureCoordinate;          
        float4 pixelColor = tex2D(implicitInputSampler, uv);

        //contrast
        pixelColor.rgb = ((pixelColor.rgb - 0.5f) * max(Contrast, 0)) + 0.5f;

        //brightness
        pixelColor.rgb = pixelColor.rgb + (Brightness - 1);

        // return final pixel color
        return pixelColor;
    }

我用这个代替它工作正常:

float4 PixelShaderFunction(float2 TextureCoordinate : TEXCOORD0) : COLOR0
    {
        float2 uv = TextureCoordinate;          
        float4 pixelColor = {0,0,0,1};
        pixelColor += tex2D(implicitInputSampler, uv);

        //contrast
        pixelColor.rgb = ((pixelColor.rgb - 0.5f) * max(Contrast, 0)) + 0.5f;

        //brightness
        pixelColor.rgb = pixelColor.rgb + (Brightness - 1);

        // return final pixel color
        return pixelColor;
    }

这只发生在我家的 AMD 4850 GPU 开发环境中。当我在一些 nVidias 或 AMD5850 上尝试它时,它无论如何都可以工作......

这是什么原因? 我错过了一些设备初始化吗?

干杯!

【问题讨论】:

  • 在第一种情况下,您正在从纹理中读取输出 alpha 并将其返回。你的纹理是否包含 alpha 值?
  • 纹理被声明为 A8R8G8B8,我使用的是来自 VMR9 发送到图像合成器的表面的拉伸矩形。可能是 VMR 中的 A 始终为 0 ?奇怪的是,不同的显卡和操作系统会有所不同:/

标签: c# directx hlsl pixel-shader


【解决方案1】:

看起来像素着色器源纹理中的A确实是0...

纹理声明为 A8R8G8B8 并使用 device.StretchRectangle 填充纹理。

此方法的工作方式因硬件而异:/

【讨论】:

    【解决方案2】:

    我很想知道纹理是否为 32 位。主要是因为我遇到了 AMD 与 Nvidia 的问题。事实上,在一种情况下,一个非功能着色器在另一种情况下是完全可用的(AMD 工作,NVIDIA 没有)只是因为我的顶点缓冲区声明中有一个偏移量 1 个字节......但我离题了,我的问题是如果 alpha 组件未声明或不是真正的 32 位纹理,则每个驱动程序都可能会随意解释它。如果您使用不同的纹理,会发生同样的事情吗?您的 Alpha 通道是否设置为不透明 (1.0f)?

    有兴趣看到我以前遇到过旧的 AMD/NVIDIA 驱动程序行为差异。在一个驱动程序中起作用的实际上可能是另一个驱动程序中的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      相关资源
      最近更新 更多