Render Monkey と 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 デバイスでは露出オーバーの画像として表示されますが、かなりのノイズが含まれています。
精度の問題のように感じます。ご覧のとおり、精度を上げようとしましたが、他に何を試すべきか、またはそれが正しく行われたかどうかはわかりません。
これは、このシェーダーに分離されたものではありません。このデバイスにはノイズがあるように見える照明シェーダーがありますが、他のデバイスにはありません。
私も最終値をクランプしようとしました。