2017-08-08 3 views
1

Je développe un jeu en utilisant LibGDX. Dans un écran de mon jeu, je dessine simplement des cercles. Pour cela j'utilise la classe Circle java de ce dépôt GitHub afin de rendre le cercle anti-aliasé.Erreur: Symbole défini avec une précision différente dans les vertex et fragments shaders

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

Il fonctionne très bien sur le bureau et sur l'émulateur Android, mais lorsque je tente de l'exécuter sur mon téléphone Android (Nexus 5), il se bloque juste et affiche le message suivant:

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. 

Pourriez-vous m'aider? Merci.

+0

doivent essayer d'ajouter '#ifdef GL_ES précision mediump flotteur; # endif' dans le vertex shader aussi? – dwursteisen

+0

Merci, ça a marché! Quelle solution simple! Posté comme réponse pour que je puisse l'accepter –

Répondre

1

Votre fragment shader utilise un #def pour définir une précision, si vous utilisez GL_ES ou non.

Mais le même #def n'existe pas dans votre vertex shader, donc la précision peut ne pas être la même entre votre vertex shader et votre fragment shader (cela explique votre erreur). Ajoutez simplement votre vertex shader pour résoudre le problème. Il suffit d'ajouter le vertex shader.

#ifdef GL_ES 
precision mediump float; 
#endif 
+0

En supposant que u_projTrans est une sorte de transformation projective, je dirais que la meilleure solution pourrait être de le définir comme highp à la fois le vertex et fragment shader, plutôt que mediump, parce que mediump est souvent pas assez haute précision pour travailler sur des positions de vertex. Gardez à l'esprit qu'il peut sembler bien sur la plupart des appareils, mais produire des artefacts sur les GPU qui utilisent des flottants à demi-précision lorsque mediump est défini. – Columbo