【发布时间】:2013-04-07 20:43:22
【问题描述】:
我开始使用 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" />,但这似乎没有什么不同。
我还认为这可能与浮点数和矢量的精度有关,但我无法弄清楚我必须如何更改它们才能修复它。
有没有人可以帮助我解决这个问题?我无法在其他地方找到答案!
提前致谢,
尤里
附:有没有办法查看在着色器编译过程中出了什么问题?我知道在着色器上调试很困难,但是至少知道编译过程中哪里可能出错了。
【问题讨论】:
-
您可以通过
x = new ShaderProgram(...); if (!x.isCompiled()) { Gdx.app.log("Shader", x.getLog()); }在 Libgdx 中获取着色器编译器日志。您是否还在您的应用配置中启用了useGL20? -
感谢着色器日志!打算试一试。如果您的意思是在
cfg.useGL20 = true;中启用 useGL20,那么可以。 -
如果你能用你遇到的实际问题来回答你自己的问题,那就太好了(我假设如果着色器在桌面而不是 Android 上工作,会有一些有趣的事情发生.. .)
-
我做了,我在原来的问题中回答了,最后;)!
-
这对于将 GLSL 移植到 Android 的其他人来说非常方便。但是,您的答案可能应该出现在下面的“答案”框中。请阅读stackoverflow.com/faq#howtoask
标签: android compilation glsl shader libgdx