Jump to content
  • Advertisement
Sign in to follow this  
slicer4ever

OpenGL glVertexAttribPointer for interleaved array's.

This topic is 1962 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I can't seem to find an answer for this with openGL, but recently when using PSM i've found that I can pass an interleaved array to the shader, and the api can map my interleaved arrays to the shader inputs without any fuss. It reduces alot of additional calls for setting up where each specific part of the vbo has to go.

I'm curious if their is something like this for openGL that i haven't found. I'd like it to be 3.0 capable if possible, but instead of doing:
...
glVertexAttribPointer(PosIdx, 4, GL_FLOAT, sizeof(myvertex), 0x0);
glVertexAttribPointer(ClrIdx, 4, GL_FLOAT, sizeof(myvertex), 0x10);
glVertexAttribPointer(NrmIdx, 3, GL_FLOAT, sizeof(myvertex), 0x20); //I know, padding, just an example!
glVertexAttribPointer(TexIdx, 2, GL_FLOAT, sizeof(myvertex), 0x2C);
//etc, etc
...
i could do something like:
glVertexAttribBlock(BlockIdx, sizeof(myvertex), 0, 0x0);
//Index to attribute block, size of the block in bytes, stride(0 is tightly packed), offset into vbo)
Edited by slicer4ever

Share this post


Link to post
Share on other sites
Advertisement

A vertex array object can be used to reduce the 4 calls into 1 call, so that the per frame API overhead can be reduced.

 

However, setting up the VAO is going to involve adding more than 4 lines of code, so if you're wanting to improve runtime efficiency, then they might be useful, but if you're trying to reduce code complexity, then they're no help (I wasn't sure from your question which you were trying to achieve).

Share this post


Link to post
Share on other sites

A vertex array object can be used to reduce the 4 calls into 1 call, so that the per frame API overhead can be reduced.
 
However, setting up the VAO is going to involve adding more than 4 lines of code, so if you're wanting to improve runtime efficiency, then they might be useful, but if you're trying to reduce code complexity, then they're no help (I wasn't sure from your question which you were trying to achieve).

well, i am looking more into improving efficiency. I'm assuming the driver can figure out the vbo is interleaved, and load the data into the shader in chunks. but I'm surprised there's no native method for doing so. I'm not sure how efficient VAO's are, they remove a few calls during runtime, but they seem to only store the current state of the vertex attributes, so if I understand them correctly, it's similar to using Display Lists.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!