Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenGL - Associate Texture Coordinates Array With Index Array Rather Than Vertex Array?

Tags:

Whenever we use an index array to render textured polygons with glDraw*Elements*, we can provide an array of vertices and an array of texture coordinates. Then each index in the index array refers to a vertex at some position in the vertex array and the corresponding texture coordinate at the same position in the texture array. Now, if for instance several separate primitives (like QUADS) share one vertex, but require different texture coordinates for that vertex, we have to duplicate that vertex in our array as many times as we have different texture coordinates for it. Therefore, it would be much more convenient if the texture coordinate array could be associated with the positions in the index array. That way no vertex duplication would be necessary to associate one specific vertex with different texture coordinates.

Is this possible? If yes, what syntax to use?

like image 354
Fejwin Avatar asked Oct 17 '11 18:10

Fejwin


1 Answers

No. Not in a simple way.

You could use buffer textures and shader logic to implement it. But there is no simple API to make attributes index the way you want. All attributes are sampled from the same index (except when instanced array divisors are used, but that won't help you either).

Note that doing this will be a memory/performance tradeoff. Using buffer textures to access vertex data will take up less memory, but it will be significantly slower and more limiting than just using regular attributes. You won't have access to normalized vertex attributes, so compressing the vertex data will require explicit shader logic. And accessing buffer textures is just slower overall.

You should only do this if memory is at a premium.

like image 150
Nicol Bolas Avatar answered Sep 20 '22 17:09

Nicol Bolas