OpenGL: atributo de vértice único para múltiplos vértices?

Eu tenho um sombreador de vértice que aceita os seguintes atributos:

a_posCoord: posição do vérticea_texCoord: coordenada de textura (passada para o shader de fragmento)a_alpha: fator de transparência (passado para o shader do fragmento)

Os objetos que estou renderizando são todos "outdoors" (um par de triângulos retângulos para fazer um retângulo).

Estou usando uma única chamada paraglDrawArrays renderizarmuitos outdoors, cada qual pode ter um valor alfa único. Um único outdoor tem 6 vértices. Aqui está um pseudocódigo para ilustrar como eu organizo o buffer de atributos de vértices para um único outdoor:

vertexAttributes = [

  px1,py1,pz1, // vertex 1: a_posCoord
  tx1,ty1,     // vertex 1: a_texCoord
  alpha,       // vertex 1: a_alpha

  px2,py2,pz2, // vertex 2: a_posCoord
  tx2,ty2,     // vertex 2: a_texCoord
  alpha,       // vertex 2: a_alpha

  px3,py3,pz3, // vertex 3: a_posCoord
  tx3,ty3,     // vertex 3: a_texCoord
  alpha,       // vertex 3: a_alpha

  px4,py4,pz4, // vertex 4: a_posCoord
  tx4,ty4,     // vertex 4: a_texCoord
  alpha,       // vertex 4: a_alpha

  px5,py5,pz5, // vertex 5: a_posCoord
  tx5,ty5,     // vertex 5: a_texCoord
  alpha,       // vertex 5: a_alpha

  px6,py6,pz6, // vertex 6: a_posCoord
  tx6,ty6,     // vertex 6: a_texCoord
  alpha        // vertex 6: a_alpha

  // ... Many more billboards not shown ...
];

Observe como o mesmoalpha o valor é repetido 6 vezes, uma vez para cada vértice.

Existe uma maneira que eu possa especificar um atributo para todos os 6 vértices sem repeti-lo para cada vértice individual?

Aqui está o que eu quero que meu buffer de atributos de vértices seja semelhante, no interesse de reduzir o tamanho do buffer:

vertexAttributes = [
  px1,py1,pz1, // vertex 1: a_posCoord
  tx1,ty1,     // vertex 1: a_texCoord

  px2,py2,pz2, // vertex 2: a_posCoord
  tx2,ty2,     // vertex 2: a_texCoord

  px3,py3,pz3, // vertex 3: a_posCoord
  tx3,ty3,     // vertex 3: a_texCoord

  px4,py4,pz4, // vertex 4: a_posCoord
  tx4,ty4,     // vertex 4: a_texCoord

  px5,py5,pz5, // vertex 5: a_posCoord
  tx5,ty5,     // vertex 5: a_texCoord

  px6,py6,pz6, // vertex 6: a_posCoord
  tx6,ty6,     // vertex 6: a_texCoord

  alpha        // vertex 1-6: a_alpha

  // ... Many more billboards not shown ...
];

Por que vale a pena, minha solução atual funciona muito bem, mas me faz sentir sujo. Eu apenas comecei a entender como usarglVertexAttribPointer e queria saber se de alguma forma apoiava algo assim, ou se há um método ou técnica diferente que eu pudesse usar para conseguir algo menos força bruta.

Isso é mais especificamente uma questão WebGL, mas estou curioso sobre o OpenGL no sentido geral.

Estou ciente de que um shader de geometria é realmente o que eu preciso para esse exemplo específico, mas está fora de questão, já que eles não são suportados atualmente no WebGL.

questionAnswers(5)

yourAnswerToTheQuestion