29 glGenVertexArrays(1, &vao_id_);
30 glBindVertexArray(vao_id_);
33 glGenBuffers(1, &buffer.vbo_id);
34 glBindBuffer(GL_ARRAY_BUFFER, buffer.vbo_id);
35 glBufferData(GL_ARRAY_BUFFER, buffer.buffer_size,
nullptr, GL_DYNAMIC_DRAW);
38 glGenBuffers(1, &buffer_strict.vbo_id);
39 glBindBuffer(GL_ARRAY_BUFFER, buffer_strict.vbo_id);
40 glBufferData(GL_ARRAY_BUFFER, buffer_strict.buffer_size,
nullptr, GL_DYNAMIC_DRAW);
42 glBindBuffer(GL_ARRAY_BUFFER, 0);
52 glDeleteVertexArrays(1, &vao_id_);
54 glDeleteBuffers(1, &buffer.vbo_id);
55 glDeleteBuffers(1, &buffer_strict.vbo_id);
73 glBindBuffer(GL_ARRAY_BUFFER,
vbo_id());
75 bool recreate_buffer =
false;
79 recreate_buffer =
true;
85 recreate_buffer =
true;
92 if (!recreate_buffer && ((bytes_needed + pre_padding) <= available_bytes)) {
97 glBufferData(GL_ARRAY_BUFFER,
buffer_size(),
nullptr, GL_DYNAMIC_DRAW);
104 glGetBufferParameteriv(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, &bufsize);
109 GLbitfield access = GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT;
111 access |= GL_MAP_FLUSH_EXPLICIT_BIT;
113 void *
data = glMapBufferRange(GL_ARRAY_BUFFER,
buffer_offset(), bytes_needed, access);
116 bytes_mapped_ = bytes_needed;
124 uint buffer_bytes_used = bytes_mapped_;
132 glFlushMappedBufferRange(GL_ARRAY_BUFFER, 0, buffer_bytes_used);
134 glUnmapBuffer(GL_ARRAY_BUFFER);
void GPU_shader_bind(GPUShader *shader)
StateManager * state_manager
virtual void apply_state()=0
#define GL_CHECK_RESOURCES(info)
void update_bindings(const GLuint vao, const GPUBatch *batch, const ShaderInterface *interface, int base_instance)
void object_label(GLenum type, GLuint object, const char *name)
static GLenum to_gl(const GPUAttachmentType type)