Skip to main content
GameDev.net gamedev.net
🔒 Locked

VBO - drawing part of buffer

Started by _OskaR Apr 27, 2010 at 7:07 AM 3 replies 3.2k views
Original Post
_OskaR
_OskaR
I want to draw only part of (indexed) VBO. So:
glDrawRangeElements(GL_TRIANGLE_STRIP, 5600,5600+448,448, GL_UNSIGNED_INT,0);
glDrawRangeElements(GL_TRIANGLE_STRIP, 0,448,448, GL_UNSIGNED_INT,0);
But in both situations I see same part of buffer. I can't start for example from 56th index. I heart about glPrimitiveRestartIndex but I'm not sure how to use it.
Jansic
Jansic
Both of these functions start at the same offset (zero) and render 448 elements. The index ranges are optimisations for the active array ranges covered by the indices, not offsets into the index array. Try putting your index offset into the indices pointer param.

Jans.
HuntsMan
HuntsMan
What is on your index buffer? You should use the last parameter as an offset into the IBO, and move it appropiately to match the 56th index.
_OskaR
_OskaR
Sth works but it's strange. First image for:
glDrawElements(GL_TRIANGLE_STRIP,56, GL_UNSIGNED_INT,0);


Two different VBO's, in both situations - squares (5x5 vertices) - parts of bigger 129x129 VBOs. No problems.

2nd:
glDrawElements(GL_TRIANGLE_STRIP,112, GL_UNSIGNED_INT,0);


Also good - 2 squares per VBO.

Now I want to show only 2nd square:
unsigned int offset = 56;glDrawElements(GL_TRIANGLE_STRIP,56, GL_UNSIGNED_INT,((GLvoid *) offset));

Result:


That's strange but I checked also:
unsigned int offset = 56*4;glDrawElements(GL_TRIANGLE_STRIP,56, GL_UNSIGNED_INT,((GLvoid *) offset));

Result:

Looks like the offset value is only 25% of value which I need. I can draw all parts of VBO but I must multiply offset by 4. I don't understand why.
Lord_Evil
Lord_Evil
IIRC the offset is given in bytes. Since you specify your indices to be unsigned integers (4 bytes) you'd have to multiply your integer offset by 4 to get the byte offset.
If I was helpful, feel free to rate me up ;)If I wasn't and you feel to rate me down, please let me know why!

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.