Jump to content

  • Log In with Google      Sign In   
  • Create Account

Interested in a FREE copy of HTML5 game maker Construct 2?

We'll be giving away three Personal Edition licences in next Tuesday's GDNet Direct email newsletter!

Sign up from the right-hand sidebar on our homepage and read Tuesday's newsletter for details!


We're also offering banner ads on our site from just $5! 1. Details HERE. 2. GDNet+ Subscriptions HERE. 3. Ad upload HERE.


unbind VBO, draw vertex array, rebind VBO?


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
3 replies to this topic

#1 Funkymunky   Members   -  Reputation: 660

Like
0Likes
Like

Posted 26 December 2012 - 12:50 AM

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?



Sponsor:

#2 Brother Bob   Moderators   -  Reputation: 8429

Like
0Likes
Like

Posted 26 December 2012 - 04:50 AM

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.



#3 RobTheBloke   Crossbones+   -  Reputation: 2349

Like
0Likes
Like

Posted 03 January 2013 - 10:55 AM

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.



#4 Brother Bob   Moderators   -  Reputation: 8429

Like
0Likes
Like

Posted 03 January 2013 - 12:17 PM

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.






Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS