Talk:Buffer Object

Revision as of 15:09, 19 May 2010 by SnakE (Talk | contribs) (Buffer Object Usage section does not agree with the specs very well)

Jump to: navigation, search

Using vertex arrays without buffer objects in GL 3.1+

"OpenGL 3.1 and above no longer allow the use of vertex arrays without buffer objects."

Is this right ? I am currently using a 3.2 forward compatible context and vertex arrays inside without problems... I am using the last NVIDIA drivers for Linux (195.17)

EDIT: Ok, checked the spec, this must be a driver bug, as the spec says:

"An INVALID_OPERATION error is generated if any of the *Pointer commands specifying the location and organization of vertex array data are called while zero is bound to the ARRAY_BUFFER buffer object binding point (see section 2.9.6), and the pointer argument is not NULL."

Unbinding mapped buffers

"While a buffer is mapped, you cannot do anything to it. Do not call any OpenGL function that would cause OpenGL to write to or read from that buffer. Doing so can have unfortunate consequences. Most important of all, do not unbind the buffer while it is mapped. It's OK to do these things before you map the buffer, but not while it is mapped."

I'm not sure that's totally accurate, as it implies that only one buffer can be mapped at a time. The final example given in the vertex_buffer_object spec [1] demonstrates that multiple buffers can be mapped through a bind/map/bind/map sequence of calls, effectively unbinding the first buffer while leaving it mapped. If unbinding a mapped buffer was unsafe, the spec wouldn't have such an example. --JThoenen 03:51, 29 September 2009 (UTC)

Fixed. Alfonse 22:48, 29 September 2009 (UTC)

Buffer Object Usage

"STREAM is pretty easy to understand: the buffer object's contents will be updated after almost every use. [...] What is unclear is when DYNAMIC becomes STREAM or STATIC."

This does not agree with the 2.1 specification:

The data store contents will be modified once and used at most a few times."

According to the latter, STREAM usage is designed for some sort of streamed data which is downloaded, used, and disposed of right away. There is no confusion between the three usage modes: STREAM is for one-off buffers, STATIC is for immutable, and DYNAMIC is for constantly changing data.

"They (hints) are all based on what the user will be doing with the buffer. That is, whether the user will be directly reading or writing the buffer's data."

This does not follow from the specs:

"usage can be broken down into two parts: first, the frequency of access (modification and usage), and second, the nature of that access."

From this I would conclude that a transform feedback buffer should be DYNAMIC_COPY for instance.

SnakE 19:09, 19 May 2010 (UTC)