我一直在开始使用LibGDX开发PC和Android。我目前正在开展一个小项目,要求我在GLSL中编写自定义着色器(基于全屏四边形)。来自HLSL环境我在设置整个着色器系统与SpriteBatch时遇到了一些麻烦(因为我希望尽可能简化代码)。
我在桌面上有以下着色器代码:
Vertexshader:
attribute vec4 a_position;
uniform mat4 u_projectionViewMatrix;
void main()
{
gl_Position = a_position * u_projectionViewMatrix;
}
Fragmentshader:
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" />
,但这似乎没有什么区别。
我还认为它可能与浮点数和向量的精度有关,但我无法弄清楚如何更改它们以便修复它。
有人可以帮我这个吗?我无法在其他地方找到答案!
提前致谢,
由里
P.S。有没有办法在编译着色器时看到出了什么问题?我知道着色器上的调试很难,但至少要知道在编译过程中它可能出错的地方真是太棒了。
答案 0 :(得分:2)
使用P.T。建议记录编译时修复它! 片段着色器中存在两个问题,固定着色器看起来像这样:
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)来修复它!
谢谢P.T。!