Android

时间:2017-05-05 18:27:49

标签: android opengl-es shader love2d

我正在使用Love2D编写一款安卓游戏,其中我使用高斯模糊着色器来获得绽放效果,但我在PC上测试它,而PC和Android上的结果非常不同,使得着色器在Android上无用。

以下是PC版的外观: Running on my PC

以下是Android版本的外观: Running on android

两者都使用以下着色器运行,执行垂直和水平偏移方向的传递。

// 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;
}

我目前正在猜测问题是浮点精度,但我不确定我需要做些什么才能解决这个问题。

0 个答案:

没有答案