У меня есть шейдер обнаружения краев, который отлично работает как на обезьяне рендера, так и на моем 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();
}
Теперь на ПК и Desire HD это выглядит как в основном черное изображение с выделенными цветными краями.Однако на устройстве LG оно выглядит как переэкспонированное изображение, но с небольшим шумом.
Это похоже на проблему точности, и, как вы можете видеть, я пытался повысить точность, но я неНе знаю, что еще попробовать, или если я сделал это правильно.
Это не изолировано для этого шейдера, у меня есть шейдер освещения, который, кажется, имеет шум на этом устройстве, но не на других.1010 *
Я тоже пытался зафиксировать окончательное значение.