comportement particulier en OpenGL concernant Vertex shaders et les sommets d'entrée sur le profil de base 330

StackOverflow https://stackoverflow.com/questions/3614630

  •  26-09-2019
  •  | 
  •  

Question

en utilisant '#version 330 core' sur NVIDIA,

En utilisant glBindAttribLocation (programme, 0, "in_Vertex"); le sommet d'entrée fonctionne avec un « dans vec4 in_Vertex; ». Cependant, j'ai remarqué sans appel de fonction OGL dans l'application client, il fonctionne toujours. Il semble être la première variable d'entrée par défaut '. Pourquoi? Faut-il omis ou être connecté explicitement via glBindAttribLocation? [Quel est l'idéal selon la norme?] En outre « dans vec4 gl_Vertex; » fonctionne alors que les spécifications appelle dépréciée et le compilateur de shaders ne donne aucun avertissement. Pourquoi? Je me serais attendu à ce au moins avertir. Je suppose que le dernier peut être un bogue dans le compilateur (compilateur GLSL), mais la première question est particulièrement déroutante.

Était-ce utile?

La solution

  1. si vous ne liez pas les attributs à un emplacement, le GL fera pour vous. Quels sont les endroits qu'il utilise est non spécifiée mais vous est arrivé d'avoir la même valeur.

    • Vous pouvez demander au GL quel endroit il est choisi avec glGetAttribLocation
    • Même si ce n'est pas spécifié, j'ai vu les implémentations choisissent de lier des emplacements pour des shaders. Le premier est 0, la deuxième est 1, ...
  2. La norme laisse ces 2 options ouvertes car il y a des cas d'utilisation valables pour chacun.

  3. En ce qui concerne désapprobations nvidia clairement qu'ils deprecation chose était la mauvaise décision. Dans la personne final doit écrire le code pour émettre l'avertissement ... Il est donc pas surprenant qu'ils ne seraient pas en garde, même si elles ne le devraient.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top