ich ein Spiel für Android schreibe mit Love2D in dem ich eine Gaußsche Unschärfe Shader mit einer Bloom-Effekt zu bekommen, aber ich es auf dem PC am Testen und die Ergebnisse auf dem PC und Android sind sehr anders, bis zu dem Punkt, den Shader auf Android nutzlos zu machen.Gaussian Blur Shader weniger intensiv auf Android
Hier ist, wie die PC-Version wie folgt aussieht:
Und hier ist, wie die Android-Version wie folgt aussieht:
Sowohl mit den folgenden Shadern laufen, mit Versatzrichtung einen Pass zu tun vertikaler und horizontal.
// Vertex Shader:
#ifdef GL_ES
#ifdef GL_FRAGMENT_PRECISION_HIGH
precision highp float;
#else
precision mediump float;
#endif
#endif
varying vec2 coordinate2b;
varying vec2 coordinate1b;
varying vec2 coordinate0f;
varying vec2 coordinate1f;
varying vec2 coordinate2f;
uniform vec2 offset_direction;
vec4 position(mat4 transform_projection, vec4 vertex_position)
{
coordinate2b = VertexTexCoord.xy + -3.230769 * offset_direction;
coordinate1b = VertexTexCoord.xy + -1.384615 * offset_direction;
coordinate0f = VertexTexCoord.xy + 0.000000 * offset_direction;
coordinate1f = VertexTexCoord.xy + 1.384615 * offset_direction;
coordinate2f = VertexTexCoord.xy + 3.230769 * offset_direction;
return transform_projection * vertex_position;
}
// Fragment Shader:
#ifdef GL_ES
#ifdef GL_FRAGMENT_PRECISION_HIGH
precision highp float;
#else
precision mediump float;
#endif
#endif
varying vec2 coordinate2b;
varying vec2 coordinate1b;
varying vec2 coordinate0f;
varying vec2 coordinate1f;
varying vec2 coordinate2f;
vec4 effect(vec4 color, Image texture, vec2 texture_coords, vec2 screen_coords)
{
vec4 c = vec4(0.0);
c += vec4(0.070270) * Texel(texture, coordinate2b);
c += vec4(0.316216) * Texel(texture, coordinate1b);
c += vec4(0.227027) * Texel(texture, coordinate0f);
c += vec4(0.316216) * Texel(texture, coordinate1f);
c += vec4(0.070270) * Texel(texture, coordinate2f);
return c * color;
}
ich zur Zeit das Problem bin zu raten, ist mit float Präzision, aber ich bin nicht sicher, was ich tun würde, muss das zu beheben.
Was ist der Wert von offset_direction auf jeder Plattform? Ich nehme an, es hängt mit der Bildschirmauflösung zusammen, stimmen also die Bildschirmauflösungen überein? – Columbo
Es ist eigentlich das gleiche in beiden, da ich die Szene auf eine Zwischen Leinwand rendert und dann diese Leinwand auf die Bildschirmgröße skalieren –
Ist es möglich, die Textur-Filterung Einstellungen sind unterschiedlich? (d. h. lineare Filterung ist auf dem PC aktiviert, aber auf Android deaktiviert) – Columbo