Я думаю, что после вызова glTexImage
вы можете безопасно удалить или повторно использовать буфер без ошибок, поскольку драйвер обрабатывает все для вас, включая отложенное уничтожение (это преимущество буферных объектов).Но это означает, что вызовы glMapBuffer
могут блокироваться до завершения предыдущей копии glTexImage
.Если вы хотите повторно использовать буфер и просто перезаписать весь его контент, обычной практикой является переопределение его с помощью glBufferData
перед вызовом glMapBuffer
.Таким образом, драйвер узнает, что вы больше не заботитесь о предыдущем контенте, и может выделить новый буфер, который вы можете использовать немедленно (память, содержащая предыдущее содержимое, освобождается драйвером, когда он больше не используется).Просто имейте в виду, что ваш буферный объект - это всего лишь дескриптор памяти, драйвер может управлять им и копировать по своему усмотрению.
РЕДАКТИРОВАТЬ: Это означает иначе (GPU-CPU)) вы можете удалить исходную текстуру после возврата glGetTexImage
, так как драйвер управляет всем за кадром.Решение об использовании буферных объектов или нет, не должно иметь никаких последствий для порядка и времени, в которое вы вызываете функции GL.Имейте в виду, что вызов glDelete...
не приводит к немедленному удалению объекта, он просто помещает эту команду в поток команд GL и даже в этом случае это зависит от драйвера, когда он действительно освобождает любую память.