OpenGL - Могу ли я использовать текстуру после запроса ее данных в PBO?

Я рендеринг в текстуру через FBO. Я хочу скопировать данные текстуры в PBO, поэтому я использую glGetTexImage, я использую glMapBuffer на этом PBO, но только в следующем кадре (или позже), поэтому он не должен вызывать остановку.

Тем не менее, я могу использовать текстуру сразу после glGetTexImage звонить, не вызывая срыв? Можно ли привязать его к текстурному блоку и визуализировать из него? Могу ли я сделать это снова через FBO?

1 ответ

Решение

Однако можно ли использовать текстуру сразу после вызова glGetTexImage, не вызывая остановку?

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

Можно ли привязать его к текстурному блоку и визуализировать из него?

Да.

Могу ли я сделать это снова через FBO?

Да. Это, однако, может вызвать или не привести к остановке, в зависимости от того, как реализация внутренне отвечает требованиям согласованности данных. Т.е. перед изменением данных данные текстуры либо должны быть полностью переданы в PBO, либо, если реализация может обнаружить, что весь объект будет изменен (например, путем вызова вызова glClear, который соответствует вложению текстуры), он может просто осиротите внутреннюю структуру данных и начните с новой области памяти, избегая этой задержки.

Это один из тех угловых случаев, которые почти невозможно предсказать. Вы должны будете профилировать производительность и убедитесь сами. Самый надежный способ избежать остановок - использовать свежий текстурный объект.

Другие вопросы по тегам