Fix readable buffers;

Unsynchronized/invalidated mapping doesn't work if the read bit is set.
This commit is contained in:
bjorn 2019-11-14 12:42:52 -08:00
parent 23c36597fc
commit bd169a4a4d
1 changed files with 4 additions and 2 deletions

View File

@ -1813,7 +1813,8 @@ void* lovrBufferMap(Buffer* buffer, size_t offset) {
if (!GLAD_GL_ARB_buffer_storage && !buffer->mapped) {
buffer->mapped = true;
lovrGpuBindBuffer(buffer->type, buffer->id);
GLbitfield flags = GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_UNSYNCHRONIZED_BIT | (buffer->readable ? GL_MAP_READ_BIT : 0);
GLbitfield flags = GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT;
flags |= buffer->readable ? GL_MAP_READ_BIT : GL_MAP_UNSYNCHRONIZED_BIT;
buffer->data = glMapBufferRange(convertBufferType(buffer->type), 0, buffer->size, flags);
}
#endif
@ -1862,7 +1863,8 @@ void lovrBufferDiscard(Buffer* buffer) {
buffer->mapped = false;
}
GLbitfield flags = GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT | GL_MAP_UNSYNCHRONIZED_BIT | GL_MAP_INVALIDATE_BUFFER_BIT | (buffer->readable ? GL_MAP_READ_BIT : 0);
GLbitfield flags = GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT;
flags |= buffer->readable ? GL_MAP_READ_BIT : (GL_MAP_UNSYNCHRONIZED_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);
flags |= GLAD_GL_ARB_buffer_storage ? GL_MAP_PERSISTENT_BIT : 0;
buffer->data = glMapBufferRange(glType, 0, buffer->size, flags);