30 glGenVertexArrays(1, &vao_id_);
31 glBindVertexArray(vao_id_);
34 glGenBuffers(1, &buffer.vbo_id);
35 glBindBuffer(GL_ARRAY_BUFFER, buffer.vbo_id);
36 glBufferData(GL_ARRAY_BUFFER, buffer.buffer_size,
nullptr, GL_DYNAMIC_DRAW);
39 glGenBuffers(1, &buffer_strict.vbo_id);
40 glBindBuffer(GL_ARRAY_BUFFER, buffer_strict.vbo_id);
41 glBufferData(GL_ARRAY_BUFFER, buffer_strict.buffer_size,
nullptr, GL_DYNAMIC_DRAW);
43 glBindBuffer(GL_ARRAY_BUFFER, 0);
74 glBindBuffer(GL_ARRAY_BUFFER,
vbo_id());
76 bool recreate_buffer =
false;
80 recreate_buffer =
true;
87 recreate_buffer =
true;
94 if (!recreate_buffer && ((bytes_needed + pre_padding) <= available_bytes)) {
99 glBufferData(GL_ARRAY_BUFFER,
buffer_size(),
nullptr, GL_DYNAMIC_DRAW);
106 glGetBufferParameteriv(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, &bufsize);
111 GLbitfield access = GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT;
113 access |= GL_MAP_FLUSH_EXPLICIT_BIT;
115 void *data = glMapBufferRange(GL_ARRAY_BUFFER,
buffer_offset(), bytes_needed, access);
118 bytes_mapped_ = bytes_needed;
StateManager * state_manager