
28. Asynchronous Buffer Transfers 401
const int buffer_number = frame_number++ % 3;
// Wait until buffer is free to use, in most cases this should not wait
// because we are using three buffers in chain , glClientWaitSync
// function can be used for check if the TIMEOUT is zero
GLenum result = glClientWaitSync(fences[ buffer_number], 0, TIMEOUT );
if ( result == GL_TIMEOUT_EXPIRED || result == GL_WAIT_FAILED)
{
// Something is wrong
}
glDeleteSync(fences [ buffer_number]);
glBindBuffer(GL_ARRAY_BUFFER , buffers [ buffer_number]);
void *ptr = glMapBufferRange(GL_ARRAY_BUFFER , offset , size, GL_MAP_WRITE_BIT | ←
GL_MAP_UNSYNCHRONIZED_BIT);
// Fill ptr with ...