OpenGL - Rendering from part of an index and vertex array depending on an element count
Posted
by
user1423893
on Game Development
See other posts from Game Development
or by user1423893
Published on 2012-09-01T14:31:40Z
Indexed on
2012/09/01
15:49 UTC
Read the original article
Hit count: 253
I'm currently drawing my shapes as lines by using a VAO and then assigning the dynamic vertices and indices each frame.
// Bind VAO
glBindVertexArray(m_vao);
// Update the vertex buffer with the new data (Copy data into the vertex buffer object)
glBufferData(GL_ARRAY_BUFFER, numVertices * sizeof(VertexPosition), m_vertices.data(), GL_DYNAMIC_DRAW);
// Update the index buffer with the new data (Copy data into the index buffer object)
glBufferData(GL_ELEMENT_ARRAY_BUFFER, numIndices * sizeof(unsigned short), indices.data(), GL_DYNAMIC_DRAW);
glDrawElements(GL_LINES, numIndices, GL_UNSIGNED_SHORT, BUFFER_OFFSET(0));
// Unbind VAO
glBindVertexArray(0);
What I would like to do is draw the lines using only part of the data stored in the index and vertex buffer objects.
The vertex buffer has its vertices set from an array of defined maximum size:
std::array<VertexPosition, maxVertices> m_vertices;
The index buffer has its elements set from an array of defined maximum size:
std::array<unsigned short, maxIndices> indices = { 0 };
A running total is kept of the number of vertices and indices needed for each draw call
numVertices
numIndices
Can I not specify that the buffer data contain the entire array and only read from part of it when drawing?
For example using the vertex buffer object
glBufferData(GL_ARRAY_BUFFER, numVertices * sizeof(VertexPosition), m_vertices.data(), GL_DYNAMIC_DRAW);
m_vertices.data()
= Entire array is stored
numVertices * sizeof(VertexPosition)
= Amount of data to read from the entire array
Is this not the correct way to approach this? I do not wish to use std::vector if possible.
© Game Development or respective owner