Мне нужно выделить довольно большой буфер (1 GB
) для PBO при запуске приложения, и сделать это так:
glBufferData(GL_PIXEL_UNPACK_BUFFER, new_size, 0, GL_STREAM_DRAW);
Мне нужно сопоставить буфер (с glMapBuffer
) вскоре после этого, чтобы начать запись данных в него.
Проблема в том, что если я позвоню glMapBuffer
сразу после glBufferData
, , это блокирует , потому что он должен ждать завершения выделения. Таким образом, я хотел бы иметь возможность запросить, может ли glMapBuffer
теперь вернуться немедленно или все еще заблокировать, чтобы мое приложение могло сделать что-то еще в это время.
Самое забавное, что объекты-ограждения, похоже, сразу же после вызова glBufferData
сигнализируются, поэтому они, кажется, не говорят мне ничего полезного.
Даже если я сделаю
glBufferData(GL_PIXEL_UNPACK_BUFFER, new_size, 0, GL_STREAM_DRAW);
glFinish();
glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY);
Звонит glMapBuffer
, а не glFinish
. То же самое и в glFlush
.
Как я узнаю, что буфер, для которого данные не были указаны, завершил выделение и готов к отображению?