Les textures à virgule flottante dans OpenGL ES 2.0 sur iOS sans les brider sur


Answers

Tout ce qui concerne les textures flottantes est de supporter aprox [+ inf, -inf] dans les shaders. Vous trouverez peut-être plus d'informations utiles ici: rendre la texture en virgule flottante sous iOS

Question

J'ai besoin de gl_FragColor pour "peindre" des valeurs à virgule flottante, qui peuvent aussi être négatives (x <0) et> 1.0. Je veux ensuite utiliser l'attachement de couleur de la FBO cette valeurs où rendu et l'utiliser comme une texture dans un autre FBO. Maintenant, j'ai lu sur http://www.khronos.org/opengles/sdk/docs/man/ (sous glTexImage2D) que toutes les valeurs sont fixées à une plage de [0, 1] et que je n'ai pas trouvé de glClampColor instruction. Y at-il une possibilité de trouver une solution de contournement ici ou est-ce que quelqu'un a une idée qui pourrait m'aider avec mon problème? :)

Résolu

C'est possible et les valeurs ne sont pas du tout fixées à [0, 1] lorsque vous utilisez des textures à virgule flottante, mais cela ne fonctionne qu'avec GL_HALF_FLOAT_OES comme format interne de la texture. L'utilisation de GL_FLOAT résulte plutôt en un objet framebuffer incomplet, ce qui est vraiment triste, car je construisais une table de surface sommée (SAT) et j'ai un gros problème de précision ici. Donc, en général, il semble que seuls les nombres à virgule flottante en demi-précision (2 octets, 1 bit de signe + 5 bits d'exposant + 10 fractions) sont supportés sur l'iPad2.

Création de la texture d'attachement des couleurs du FBO

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_HALF_FLOAT_OES, NULL);

Encore une chose à mentionner: Les instruments signaleront un message "Enumid enum for argument 'type" ", mais cela fonctionne quand même. De plus, le simulateur utilisera des textures de pleine précision à la place de la demi-précision spécifiée (je pense qu'il n'y a pas de type de données de ce type en C). C'est pourquoi vous obtiendrez probablement moins de problèmes de précision sur le simulateur.

Mais le plus déroutant est que "GL_OES_texture_float" est supporté lors de l'impression de glGetString (GL_EXTENSIONS). Cependant, comme mentionné précédemment, cela ne fonctionne pas.