错误:在顶点和片段着色器中使用不同精度定义的符号
问题描述:
我正在开发使用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.
你能帮我吗? 谢谢。
答
如果您的设计使用GL_ES或不使用GL_ES,则您的片段着色器使用#def
来定义精度。
但是您的顶点着色器中不存在相同的#def
,所以您的顶点着色器和片段着色器之间的精度可能不一样(这是解释错误的原因)。
只需添加顶点着色器来解决问题。
#ifdef GL_ES
precision mediump float;
#endif
+0
假设u_projTrans是某种射影变换,我想说的更好的修复可能是将其定义为两个顶点和片段着色器highp,而不是mediump,因为mediump是通常对顶点位置的精度不够高。请记住,在大多数设备上它可能看起来不错,但会在定义中介时在使用半精度浮点的GPU上产生工件。 – Columbo
要尽量添加 '#ifdef来GL_ES 精密mediump浮动;顶点着色器中的顶点着色器中是否还有顶点? #endif? ? – dwursteisen
谢谢,它工作!多么简单的修复!它张贴作为回答,这样我可以接受它 –