2016-09-26 2 views
0

mediump float dans les shaders GLES est censé être suffisant pour les coordonnées de texture, mais est-ce suffisant pour les coordonnées de l'écran?Est-ce que le float médium GLES a suffisamment de précision pour mapper les coordonnées d'affichage?

Selon le this answer, mediump float a une bonne quantité de portée - de -16384 à +16384, mais la précision est seulement de 10 bits, ce qui signifie que ci-dessus +1024 ou au-dessous -1024, la variable de flotteur peut être incrémenté seulement deux pixels à une temps, si je comprends bien, donc vous obtiendrez des erreurs de pixels et des coutures entre les textures à proximité des bords de l'écran. Avec la résolution d'affichage des téléphones modernes allant jusqu'à 3840x2160, il semble que mediump ne soit pas suffisant pour spécifier des coordonnées d'écran pixel-parfait dans le vertex shader. Je suppose que les écrans 1920x1080 sont toujours bons, si vous utilisez le milieu de l'écran comme coordonnée zéro, et non le coin supérieur gauche ou inférieur gauche, et faites attention aux opérations arithmétiques que vous effectuez sur ces variables à ne jamais dépasser leur gamme -1024:+1024 sécuritaire.

Les fabricants de téléphones pourraient également augmenter la précision en virgule flottante dans leur matériel GFX au-dessus de la spécification, pour correspondre à leurs plus grands écrans, mais je doute qu'ils le feront.

Quelqu'un peut-il confirmer cela?

Répondre

0

La plupart des GPU sont susceptibles d'implémenter mediump comme un flottant demi-précision. C'est légèrement mieux que le minimum autorisé pour mediump car il peut représenter tous les ints dans la gamme -2048 à 2048 (Source), pas les -1024 à 1024 qui vous inquiètent.

De même, vous ne devriez pas avoir de joints visibles sur une géométrie correctement soudée, car les règles de tramage l'éviteraient.

Mais vous avez absolument raison de dire que mediump va causer des problèmes sur les écrans haute résolution, vous ne pourrez pas spécifier les coordonnées exactes.

Je recommande toujours d'utiliser highp pour les coordonnées de position et les matrices qui fonctionnent en position. Cependant, même si vous faites cela, il y a un problème sur les écrans haute résolution que gl_FragCoord peut être implémenté comme moyen (some discussion here)