Jump to content
  • Advertisement
Sign in to follow this  
Funkymunky

unbind VBO, draw vertex array, rebind VBO?

This topic is 2114 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

If I'm drawing a whole bunch of data from a VBO, is it terrible practice to unbind the VBO, render some stuff with a standard vertex array, then rebind the VBO and continue drawing from it?  Or is it better to just switch to a different VBO for that middle render?

Share this post


Link to post
Share on other sites
Advertisement

In the modern API, you are required to use VBO for all vertex arrays, so if you can use VBO then there's no reason why you should use VBO for only some of your vertex arrays. Get in line with the new API and use VBO for all your vertex arrays.

Share this post


Link to post
Share on other sites
In the modern API, you are required to use VBO for all vertex arrays, so if you can use VBO then there's no reason why you should use VBO for only some of your vertex arrays. Get in line with the new API and use VBO for all your vertex arrays.

 

The core profile for OpenGL 4.3 says no such thing. Certainly the old fixed function pointer methods have been removed (e.g. glVertexPointer), but glVertexAttribPointer can be used to specify system memory based vertex arrays. Even glVertexAttrib3f() is still part of the core spec. There is what seems to be a typo in the online GL docs, where is says the INVALID_OPERATION will be generated if no ARRAY_BUFFER is bound, and the pointer is not NULL (which makes no sense, since that would mean using 0 for the array buffer, and null for the pointer would be valid). I'm guessing that's where the confusion has arisen from.

Share this post


Link to post
Share on other sites
In the modern API, you are required to use VBO for all vertex arrays, so if you can use VBO then there's no reason why you should use VBO for only some of your vertex arrays. Get in line with the new API and use VBO for all your vertex arrays.

 

The core profile for OpenGL 4.3 says no such thing. Certainly the old fixed function pointer methods have been removed (e.g. glVertexPointer), but glVertexAttribPointer can be used to specify system memory based vertex arrays.

Version 4.3 core specification, section 10.8.3, page 304; last sentence says "If any enabled array’s buffer binding is zero when DrawArrays or one of the
other drawing commands defined in section 10.5 is called, the result is undefined
." Thus, it is an error to draw with the zero-buffer bound; an array must therefore have a non-zero buffer binding.

 

There is what seems to be a typo in the online GL docs, where is says the INVALID_OPERATION will be generated if no ARRAY_BUFFER is bound, and the pointer is not NULL (which makes no sense, since that would mean using 0 for the array buffer, and null for the pointer would be valid). I'm guessing that's where the confusion has arisen from.

Even the specification itself says that: page 299 in the definition of glVertexAttribArray.
 

Even glVertexAttrib3f() is still part of the core spec.

glVertexAttrib*() is used to set the default attribute value for attributes that doesn't have an enabled buffer attached to it. I don't see what it has to do with my comment you questioned though.

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!