@ -57,30 +57,21 @@ std::tuple<u8*, GLintptr, bool> OGLStreamBuffer::Map(GLsizeiptr size, GLintptr a
bool invalidate = false ;
if ( buffer_pos + size > buffer_size ) {
MICROPROFILE_SCOPE ( OpenGL_StreamBuffer ) ;
glInvalidateBufferData ( gl_buffer . handle ) ;
buffer_pos = 0 ;
invalidate = true ;
glUnmapNamedBuffer ( gl_buffer . handle ) ;
}
if ( invalidate ) {
static const GLbitfield flags = GL_MAP_WRITE_BIT | GL_MAP_PERSISTENT_BIT |
GL_MAP_INVALIDATE_BUFFER_BIT | GL_MAP_FLUSH_EXPLICIT_BIT ;
MICROPROFILE_SCOPE ( OpenGL_StreamBuffer ) ;
mapped_ptr = static_cast < u8 * > (
glMapNamedBufferRange ( gl_buffer . handle , buffer_pos , buffer_size - buffer_pos , flags ) ) ;
mapped_offset = buffer_pos ;
}
return std : : make_tuple ( mapped_ptr + buffer_pos - mapped_offset , buffer_pos , invalidate ) ;
return std : : make_tuple ( mapped_ptr + buffer_pos , buffer_pos , invalidate ) ;
}
void OGLStreamBuffer : : Unmap ( GLsizeiptr size ) {
ASSERT ( size < = mapped_size ) ;
if ( size > 0 ) {
glFlushMappedNamedBufferRange ( gl_buffer . handle , buffer_pos - mapped_offset , size ) ;
glFlushMappedNamedBufferRange ( gl_buffer . handle , buffer_pos , size ) ;
}
buffer_pos + = size ;