Gemäß dem OpenGL ES 2.0-Programmierhandbuch :
A constant vertex attribute is the same for all vertices of a primitive, and
therefore only one value needs to be specified for all the vertices of a
primitive.
Für Uniformen heißt es im Buch:
...any parameter to a shader that is constant across either all vertices or
fragments (but that is not known at compile time) should be passed in as
a uniform.
Ich habe immer Uniformen für Daten verwendet, die für ein Grundelement konstant sind, aber jetzt scheint es, dass Attribute auch auf die gleiche Weise verwendet werden können. Gibt es mehr constant vertex attribute
als nur "sie sind die gleichen wie Uniformen" ?
Antworten:
Dies ist das erste Mal, dass ich von einem gehört habe
constant vertex attribute
, aber aus seiner Definition geht hervor, dass es sich um ein Vertex-Attribut handelt . Scheitelpunktattribute werden pro Scheitelpunkt definiert (unabhängig davon, ob sie für jeden Scheitelpunkt gleich sind oder nicht). Das heißt, Sie haben nur im Vertex-Shader Zugriff darauf. Uniformen hingegen werden in einem separaten Raum aufbewahrt und sind sowohl für das Fragment als auch für den Vertex-Shader zugänglich.Da wir Scheitelpunktattribute mit Uniformen vergleichen:
Versuchen Sie, sie so zu sehen:
Ein Vertex-Attribut ist genau das, was sein Name impliziert: ein Attribut, das dem Vertex entspricht. Jeder Scheitelpunkt hat dieses Attribut. Wenn dieses Attribut für jeden Scheitelpunkt gleich ist, können Sie es als konstantes Scheitelpunktattribut verwenden. Die Menge der Vertex-Attribute ist die Eingabe für einen Vertex-Shader.
Eine Uniform ist etwas, das getrennt von den Vertex- oder Fragment-Shadern gespeichert wird und von beiden aus zugänglich ist. Sie können Zahlen, Matrizen, Texturen und sogar Strukturen speichern. Sie werden nicht als Eingabe verwendet , sondern als Ressourcenpool, auf den Sie jederzeit und überall zugreifen können. Sie werden auch von der Grafikkarte anders behandelt.
quelle