Если я правильно понимаю, когда я использую glGetTextureSubImage (), OpenGL должен синхронизироваться, прежде чем эта функция сможет вернуться.

Но если я привяжу буфер к GL_PIXEL_PACK_BUFFER, этот вызов функции будет асинхронным.

Синхронизирует ли OpenGL его, как только я пытаюсь получить доступ к данным? Есть другие правила?

0
Rhu Mage 4 Окт 2018 в 18:28

1 ответ

Лучший ответ

Синхронизирует ли OpenGL его, как только я пытаюсь получить доступ к данным?

Да; в этом весь смысл. При чтении в ваше хранилище реализация OpenGL должна предполагать, что вы сразу получите доступ к считанным данным пикселей. Он должен предполагать это, потому что он не может обнаружить , когда вы собираетесь читать это хранилище. В конце концов, OpenGL не владеет этим хранилищем.

Буферный объект - это хранилище, которым владеет . Если вы вызываете glGetBufferSubData или glMapBufferRange или что-то еще, OpenGL видит этот вызов. Следовательно, реализация OpenGL может синхронизироваться с операцией чтения в этот момент, а не во время выполнения чтения.

Конечно, с постоянным отображением OpenGL не может определить, когда вы читаете данные. Но если вы используете постоянное сопоставление, вы сообщаете OpenGL, что вы выполните необходимую синхронизацию, поэтому он не будет пытаться это сделать.

3
Nicol Bolas 4 Окт 2018 в 16:18