2017-08-08 279 views
1

我正在开发使用LibGDX的游戏。在我的游戏画面中,我只画了一些圈子。为此,我使用此GitHub存储库中的Circle java类来使该圆形消除锯齿。错误:在顶点和片段着色器中使用不同精度定义的符号

https://github.com/Dych/Smooth-circle/blob/master/core/src/gdx/example/Circle.java

它的工作桌面上,并在Android模拟器就好了,但是当我尝试我的Android手机(Nexus 5的)上运行它,它只是崩溃,并显示以下信息:

com.badlogic.gdx.utils.GdxRuntimeException: --From Vertex Shader: 
                    Error: Symbol u_projTrans defined with different precision in vertex and fragment shaders. 
                    --From Fragment Shader: 
                    Error: Symbol u_projTrans defined with different precision in vertex and fragment shaders. 

你能帮我吗? 谢谢。

+0

要尽量添加 '#ifdef来GL_ES 精密mediump浮动;顶点着色器中的顶点着色器中是否还有顶点? #endif? ? – dwursteisen

+0

谢谢,它工作!多么简单的修复!它张贴作为回答,这样我可以接受它 –

回答

1

如果您的设计使用GL_ES或不使用GL_ES,则您的片段着色器使用#def来定义精度。

但是您的顶点着色器中不存在相同的#def,所以您的顶点着色器和片段着色器之间的精度可能不一样(这是解释错误的原因)。

只需添加顶点着色器来解决问题。

#ifdef GL_ES 
precision mediump float; 
#endif 
+0

假设u_projTrans是某种射影变换,我想说的更好的修复可能是将其定义为两个顶点和片段着色器highp,而不是mediump,因为mediump是通常对顶点位置的精度不够高。请记住,在大多数设备上它可能看起来不错,但会在定义中介时在使用半精度浮点的GPU上产生工件。 – Columbo

相关问题