我开始使用 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 有没有办法查看着色器编译过程中出了什么问题?我知道在着色器上调试很困难,但是至少知道在编译期间它可能出错的地方会很棒。