【发布时间】: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