1

我开始使用 LibGDX 为 PC 和 Android 进行开发。我目前正在做一个小项目,需要我在 GLSL 中编写自定义着色器(基于全屏四边形)。来自 HLSL 环境,我在设置整个着色器系统和 SpriteBatch 时遇到了一些麻烦(因为我想尽可能保持代码简单)。

我在桌面上有以下着色器代码:

顶点着色器:

attribute vec4 a_position;
uniform mat4 u_projectionViewMatrix;
void main()
{
    gl_Position = a_position * u_projectionViewMatrix;
}

片段着色器:

uniform vec2 effectOrigin;
uniform vec2 effectDir;
void main()
{
    float distToOrigin = distance(effectOrigin.xy, gl_FragCoord.xy);
    gl_FragColor = vec4(mod(distToOrigin+effectDir.x*30, 30)-15, 0.0, 0.0, 1.0);
}

正如我所说,它适用于桌面(Windows),并给我一个漂亮的圆形图案。但是在 Android 上它不能编译,只给我清除的背景颜色。我怀疑它与 Android 上的 OpenGL ES 2 权限有关,所以我在清单中添加了这一行: <uses-feature android:glEsVersion="0x00020000" android:required="true" />,但这似乎没有什么不同。

我还认为这可能与浮点数和向量的精度有关,但我无法弄清楚我必须如何更改它们才能修复它。

有人可以帮助我吗?我一直无法在其他地方找到答案!

提前致谢,

尤里

PS 有没有办法查看着色器编译过程中出了什么问题?我知道在着色器上调试很困难,但是至少知道在编译期间它可能出错的地方会很棒。

4

1 回答 1

3

使用 PT 关于记录编译的建议修复它!片段着色器有两个问题,固定着色器是这样的:

precision mediump float;
uniform vec2 effectOrigin;
uniform vec2 effectDir;
void main()
{
    float distToOrigin = distance(effectOrigin.xy, gl_FragCoord.xy);
    gl_FragColor = vec4(mod(distToOrigin+effectDir.x*30.0, 30.0)-15.0, 0.0, 0.0, 1.0);
}

我在顶部添加了精度定义,并将常量值从整数更改为浮点数(例如 15 到 15.0)以修复它!

谢谢PT!

于 2013-04-07T12:43:22.403 回答