32 glGenVertexArrays(1, &vao_id_);
33 glBindVertexArray(vao_id_);
36 glGenBuffers(1, &buffer.vbo_id);
37 glBindBuffer(GL_ARRAY_BUFFER, buffer.vbo_id);
38 glBufferData(GL_ARRAY_BUFFER, buffer.buffer_size,
nullptr, GL_DYNAMIC_DRAW);
41 glGenBuffers(1, &buffer_strict.vbo_id);
42 glBindBuffer(GL_ARRAY_BUFFER, buffer_strict.vbo_id);
43 glBufferData(GL_ARRAY_BUFFER, buffer_strict.buffer_size,
nullptr, GL_DYNAMIC_DRAW);
45 glBindBuffer(GL_ARRAY_BUFFER, 0);
75 if (this->
shader->is_polyline) {
85 glBindBuffer(GL_ARRAY_BUFFER,
vbo_id());
87 bool recreate_buffer =
false;
91 recreate_buffer =
true;
98 recreate_buffer =
true;
102 if (this->
shader->is_polyline) {
110 if (!recreate_buffer && ((bytes_needed + pre_padding) <= available_bytes)) {
115 glBufferData(GL_ARRAY_BUFFER,
buffer_size(),
nullptr, GL_DYNAMIC_DRAW);
122 glGetBufferParameteriv(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, &bufsize);
127 GLbitfield access = GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT;
129 access |= GL_MAP_FLUSH_EXPLICIT_BIT;
131 void *
data = glMapBufferRange(GL_ARRAY_BUFFER,
buffer_offset(), bytes_needed, access);
134 bytes_mapped_ = bytes_needed;
142 uint buffer_bytes_used = bytes_mapped_;
150 glFlushMappedBufferRange(GL_ARRAY_BUFFER, 0, buffer_bytes_used);
152 glUnmapBuffer(GL_ARRAY_BUFFER);
157 else if (this->
shader->is_polyline) {
159 GLenum target = GL_SHADER_STORAGE_BUFFER;
StateManager * state_manager
uint16_t bound_ssbo_slots