47 glGenVertexArrays(1, &vao_id_);
48 glBindVertexArray(vao_id_);
51 glGenBuffers(1, &buffer.vbo_id);
52 glBindBuffer(GL_ARRAY_BUFFER, buffer.vbo_id);
53 glBufferData(GL_ARRAY_BUFFER, buffer.buffer_size,
nullptr, GL_DYNAMIC_DRAW);
56 glGenBuffers(1, &buffer_strict.vbo_id);
57 glBindBuffer(GL_ARRAY_BUFFER, buffer_strict.vbo_id);
58 glBufferData(GL_ARRAY_BUFFER, buffer_strict.buffer_size,
nullptr, GL_DYNAMIC_DRAW);
60 glBindBuffer(GL_ARRAY_BUFFER, 0);
70 glDeleteVertexArrays(1, &vao_id_);
72 glDeleteBuffers(1, &buffer.vbo_id);
73 glDeleteBuffers(1, &buffer_strict.vbo_id);
91 glBindBuffer(GL_ARRAY_BUFFER,
vbo_id());
93 bool recreate_buffer =
false;
97 recreate_buffer =
true;
103 recreate_buffer =
true;
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);
void GPU_shader_bind(GPUShader *shader)
StateManager * state_manager
virtual void apply_state(void)=0
#define GL_CHECK_RESOURCES(info)
void update_bindings(const GLuint vao, const GPUBatch *batch, const ShaderInterface *interface, const int base_instance)
void object_label(GLenum type, GLuint object, const char *name)
static GLenum to_gl(const GPUAttachmentType type)