Kann ein Vertex-Attribut in GLSL-ES 2.0 ein Array sein?

  • In GLSL-ES können Arrays verwendet werden. Die GLSL ES-Spezifikation enthält beispielsweise das folgende Beispiel für eine einheitliche Variable ein Array:

     uniform vec4 lightPosition[4];
     

    Ist es möglich, Vertex-Attribute zu haben, die Arrays sind? Ist also gemäß der Spezifikation das Folgende legal?

     attribute vec4 foo[3];  // three vec4s per vertex
     

    Ist die Antwort (entweder ja oder nein ) explizit irgendwo in der GLSL ES-Spezifikation erwähnt? (Ich kann es nicht finden, aber ich habe nicht jede Zeile der Spezifikation gelesen.)

    Wenn dies legal ist, wie initialisiert man dann ein solches Attribut mit dem OpenGL ES 2.0-API? (Angenommen, glVertexAttribPointer würde verwendet werden, wie ist das Layout der Scheitelpunkte / Array-Elemente / Vektor-Elemente?)

    22 November 2011
    Laurence Gonsalves
1 answer
  • Die GLSL ES 2.0-Spezifikation besagt, dass Attribute nicht als Arrays deklariert werden können.

    In Desktop-GL können Sie Attributarrays verwenden. Wenn dem Attribut ein Attributindex zugewiesen wird (entweder mit glBindAttribLocation oder automatisch durch den verknüpften Shader), erhält es fortlaufende Attribute, beginnend mit dem angeforderten, wenn Sie glBindAttribLocation verwendet haben. Wenn also foo die Position 5 gegeben wäre, wäre foo[0] 5, foo[1] wäre 6 und foo[2] wäre 7.

    Wenn es welche gibt ES 2.0-Erweiterung, um Attribut-Arrays zu ermöglichen, würde dies wahrscheinlich so funktionieren.

    22 November 2011
    Nicol Bolas