自定义着色器在Android设备上不工作(使用LibGDX)

自定义着色器在Android设备上不工作(使用LibGDX),android,compilation,glsl,shader,libgdx,Android,Compilation,Glsl,Shader,Libgdx,我开始使用LibGDX为PC和Android开发。我目前正在做一个小项目,要求我用GLSL(基于全屏四边形)编写自定义着色器。来自HLSL环境的我在将整个着色器系统与SpriteBatch结合使用时遇到了一点麻烦(因为我希望尽可能使代码保持简单) 我在桌面上使用了以下着色器代码: 顶点着色器: attribute vec4 a_position; uniform mat4 u_projectionViewMatrix; void main() { gl_Position = a_posi

我开始使用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);
}
碎片着色器:

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权限有关,因此我在清单中添加了以下内容:
,但这似乎没有什么不同

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

有人能帮我吗?我在别处找不到答案

提前感谢,

尤里


另外,是否有办法查看着色器编译过程中出现的错误?我知道对着色器进行调试很困难,但如果至少知道编译过程中可能出现的错误,那就太棒了。

使用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

您可以在Libgdx中使用以下命令获取着色器编译器日志:
x=newshaderprogram(…);如果(!x.isCompiled()){Gdx.app.log(“Shader”,x.getLog());}
。您是否在应用程序配置中启用了
useGL20
?谢谢您的着色器日志!我要试试看。如果您的意思是在
cfg.useGL20=true中启用useGL20,然后是的。如果你能用你遇到的实际问题回答你自己的问题,那就太好了(我假设如果着色器在桌面上而不是Android上工作,会发生一些有趣的事情…)我做了,我在最初的问题中回答了,最后;)!这对于其他正在将GLSL移植到Android的人来说是很方便的。但是,您的答案应该放在下面的“答案”框中。请阅读