Hello.
For some reason if I call glBufferStorage only once when everything works just fine.
I want to recreate a buffer by calling glBufferStorage second time(and more) if its size is not enough but this second call generates GL_INVALID_OPERATION error.
After that glMapBufferRange return nullptr and that's it.
Has anyone had similar problem before?
This is how I create/recreate buffer:
const auto vertex_buffer_size = CYCLES * sizeof(Vertex) * VERTICES_PER_QUAD * m_total_text_length;
GLint current_vertices_size;
glGetBufferParameteriv(GL_ARRAY_BUFFER, GL_BUFFER_SIZE, ¤t_vertices_size);
if (vertex_buffer_size > current_vertices_size)
{
if (m_syncs[m_buffer_id] != 0)
{
glClientWaitSync(m_syncs[m_buffer_id], GL_SYNC_FLUSH_COMMANDS_BIT, -1);
glDeleteSync(m_syncs[m_buffer_id]);
}
glUnmapBuffer(GL_ARRAY_BUFFER);
GLuint error = glGetError();
glBufferStorage(GL_ARRAY_BUFFER, vertex_buffer_size, 0, GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT);
GLuint error2 = glGetError();
m_vertices = static_cast<Vertex*>(glMapBufferRange(GL_ARRAY_BUFFER, 0, vertex_buffer_size, GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT | GL_MAP_COHERENT_BIT));
m_buffer_id = 0;
for (auto& sync : m_syncs)
{
glDeleteSync(sync);
sync = 0;
}
}