glBindFramebuffer вызывает падение производительности в OpenGLES

Я делаю рендеринг в 3 FBO, поэтому у меня 3 прохода. при рендеринге в 3-й FBO, когда я вызываю glBindFramebuffer(), это приводит к тому, что мое приложение работает с более низким fps. Если я просто использую 3-й FBO для рендеринга во всех 3 проходах, я получаю одинаковую частоту кадров, но если я использую 1-й FBO для рендеринга во всех 3 проходах, я получаю более высокий fps. в чем может быть причина такого поведения?


person debonair    schedule 08.03.2016    source источник


Ответы (1)


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

В ES 3 вы можете сигнализировать об этом, используя glInvalidateFramebuffer; если ваш графический процессор и платформа поддерживают это, используйте EXT_discard_framebuffer в ES 2. .

Это предположение, конечно, предполагает, что когда вы визуализируете свой третий, а не первый объект, это подразумевает более частое изменение привязки.

Второе предположение: если ваши дополнительные буферы кадра предназначены для рендеринга в текстуру, а ваш первый — это то, что система сделала, чтобы связать вас с экраном, то, очевидно, существует потенциальная разница в производительности, потому что цель вывода может быть не того же формата.

person Tommy    schedule 17.03.2016