OpenGL: Vertex attribute arrays per primitive?

c, opengl

Solution

This is essentially an alternate form of this question about multi-indexed rendering (it's different, which is why I'm not calling it a duplicate). The simple answer is no. The less simple answer is to do the accessing and indexing yourself.

Problem

I'm wondering if it's possible in OpenGL (via extensions or otherwise) to have an attribute array specified by the `glVertexAttribPointer`type functions that advances by one for every primitive (or N vertices) instead of one for every vertex? For example, if I have an array of triangles which have a solid color currently I'm having to repeat the same color data for every vertex, what I would like instead is something along these lines: ``` struct pos { uint8_t x, y; } positions[NUM_VERTICES]; struct col { uint8_t r, g, b; } colors[NUM_VERTICES / 3]; ``` Where one element of the `colors` array is reused for every 3 consecutive `positions` elements when both arrays are submitted to OpenGL with `glVertexAttribPointer` and renderered with a single `glDrawArrays(GL_TRIANGLES, ...);` I found the `ARB_instanced_arrays` extension, which provides the `glVertexAttribDivisorARB` function which seemed promising at first, but I don't think it works the way I've described.

Original source

Related problems