Да, вы можете создавать объекты в одном потоке, которые можно использовать в другом. Для этого вам понадобится новый контекст GL.
При этом есть две проблемы.
Во-первых, это зависит от того, что вы подразумеваете под «распределением ОПО». Вы никогда не должны размещать буферные объекты в середине кадра. Вы должны выделить все необходимые буферы заранее. Когда придет время их использовать, вы можете просто использовать то, что у вас есть.
Под «распределением» я имею в виду вызов glBufferData
для ранее выделенного буфера, используя другой размер или подсказку драйвера, чем использовался ранее. Или используя glGenBuffers
и glDeleteBuffers
любым способом. Ничто из этого не должно происходить в кадре.
Во-вторых, аннулирование буфера никогда не должно вызывать «скачков задержки». Под «аннулированием» я подразумеваю перераспределение буфера с glBufferData
, используя тот же размер и подсказку об использовании, или используя glMapBufferRange
с битом GL_INVALIDATE_BUFFER
. Вы должны посмотреть на эту страницу о том, как потоковые данные объекта буфера для деталей. Если у вас возникли проблемы, то вы, вероятно, используете аппаратное обеспечение NVIDIA и используете неверную подсказку объекта буфера (например, используйте STREAM).