OpenGL ES Shaders et 64 bits iPhone 5S

Je viens de commencer à tester avec l'iPhone 5S et l'architecture 64 bits sur une application OpenGL ES. Le problème que je vois est que les valeurs (CGFloat) sont fausses quand elles arrivent aux shaders. Je passe en 0.8 et ça change en -1.58819e-23 quand je débogue le shader. J'utilise glUniform4fv () pour transmettre la valeur. Dois-je utiliser un type de données différent ou? ou une méthode différente pour transmettre les valeurs? La valeur passe bien quand je l'essai sur 32bit

CGFloat brushColor[4]; brushColor[0] = 0.8; brushColor[1] = 0.1; brushColor[2] = 0.1; brushColor[3] = 0.3; glUniform4fv(program[PROGRAM_POINT].uniform[UNIFORM_VERTEX_COLOR], 1, brushColor); 

(Certains d'entre vous remarqueront peut-être que cela provient de la démo GLPaint …)

Merci,

austin

    CGFloat est un typedef variable. Sur un environnement de construction 32 bits, il est à simple précision, sur 64 bits il est à double précision. Normalement, ce ne serait pas un gros problème, mais vous utilisez glUniform4fv , qui prend un GLfloat * .

    Spécification OpenGL ES 2.0 – Fonctionnement de base GL – p. 12

    Échantillon de spécification

    OpenGL stipule que GLfloat est toujours une valeur à floating point à simple précision et que les compilateurs peuvent gérer la rétrogradation de type de double précision à simple précision lorsque vous utilisez la version sans pointeur de cette fonction. Lorsque vous utilisez des pointeurs, ce comportement ne se produit pas – OpenGL s'attend à recevoir un tableau de flottants à simple précision, mais vous lui transmettez un tableau de flottants à double précision sans conversion de type.

    Ce que vous devez faire est d'arrêter d'utiliser CGFloat . Au lieu de cela, utilisez GLfloat . OpenGL typedefs sont fournis pour s'assurer que ce genre de chose n'arrive jamais.