OpenGL: использование только одного кадрового буфера и переключение целевых текстур - PullRequest
1 голос
/ 22 июня 2011

Вместо использования нескольких объектов кадрового буфера, могу ли я также создать только один и достичь тех же результатов, переключая его целевую текстуру при необходимости?

  • Это плохая идея во всех случаях? Если да, то почему?

Я реализовал функцию render.SetTargetTexture() в API моей программы, и логически это не сработало бы, если бы за кадром использовалось больше кадровых буферов. Тогда мне придется полностью разоблачить фреймбуферы.

Ответы [ 2 ]

6 голосов
/ 22 июня 2011

Сам FBO - это просто логическая конструкция, поддерживаемая реализацией, и она будет потреблять лишь небольшую память, необходимую его параметрам.Основная цель FBO состоит в том, чтобы иметь объект, который поддерживает согласованное состояние.

Всякий раз, когда вы вносите изменения в структуру FBO, реализация должна проверять правильность и полноту.Спецификация OpenGL ничего не говорит о сложности этой операции, но можно с уверенностью предположить, что изменения в структуре FBO являются наиболее трудоемкой операцией (может быть, с большим отрывом).сам по себе не потребляет заслуживающей внимания памяти, только вложения занимают память, которые являются независимыми объектами, выделяя несколько FBO и подсчитывая их - это то, что я рекомендую.

0 голосов
/ 23 июля 2015

Переключение кадровых буферов обычно происходит быстрее по причинам, указанным людьми. По моему опыту, есть также проблемы при присоединении различных типов текстур к fbos (2D текстура к fbo, к которой ранее была прикреплена 1D текстура, поэтому первая текстура, прикрепленная к fbo, задала какое-то целевое состояние, которое не могло быть изменено позже). Решением, которое я использовал, было создание fbo для каждого типа цели. Эта ошибка произошла на устройствах NVidia Quadro, но не уверен, что это проблема с драйвером.

...