我有一个边缘检测着色器,它在渲染猴子和我的 HTC Desire HD 上都能正常工作。但是,它不适用于我的 LG 3D P920。这是着色器:
简而言之,我取中心像素并减去它周围的 8 个值。纹理为 512x512。
precision highp float;
varying vec2 vTextureCoord;
uniform sampler2D sTexture;
vec4 edges(void)
{
const float offset = 1.0 / 512.0;
vec4 c = texture2D(sTexture, vTextureCoord);
vec4 edge = texture2D(sTexture, vTextureCoord + vec2(-offset, -offset)) +
texture2D(sTexture, vTextureCoord + vec2(-offset, 0.0)) +
texture2D(sTexture, vTextureCoord + vec2(-offset, offset)) +
texture2D(sTexture, vTextureCoord + vec2( 0.0, offset)) +
texture2D(sTexture, vTextureCoord + vec2( offset, offset)) +
texture2D(sTexture, vTextureCoord + vec2( offset, 0.0)) +
texture2D(sTexture, vTextureCoord + vec2( offset, -offset)) +
texture2D(sTexture, vTextureCoord + vec2( 0.0, -offset));
return 8.0 * (c + -0.125 * edge);
}
void main() {
gl_FragColor = edges();
}
现在在 PC 和 Desire HD 上,这显示为主要是黑色的图像,彩色边缘突出显示。然而,在 LG 设备上,它显示为过度曝光的图像,但有相当多的噪点。
这感觉像是一个精度问题,正如你所看到的,我已经尝试提高精度,但我不知道还能尝试什么,或者我是否做得对。
这与此着色器无关,我有一个照明着色器,在此设备上似乎有噪点,但在其他设备上没有。
我也尝试过钳制最终值。