Как правильно использовать glDiscardFramebufferEXT

Этот вопрос относится к OpenGL ES 2.0 Extension EXT_discard_framebuffer .

Мне непонятно, какие случаи оправдывают использование этого расширения. Если я вызываю glDiscardFramebufferEXT (), и он помещает указанные прикрепляемые изображения в неопределенное состояние, это означает, что:
– Мне больше не нужен контент, так как он уже использовался с glReadPixels ()
– Меня больше не интересует контент, так как он уже использовался с glCopyTexSubImage ()
– Я не должен был делать рендер в первую очередь.

Ясно, что только первые два случая имеют смысл или существуют другие случаи, в которых полезно использовать glDiscardFramebufferEXT ()? Если да, то каковы эти случаи?

GlDiscardFramebufferEXT – это подсказка о производительности для водителя. Мобильные графические процессоры используют отложенную рендеринг на основе плитки. В этом контексте установка любого из ваших фреймбуфферов, которые должны быть отброшены, сохраняет работу gpu и память, поскольку нет необходимости записывать ее обратно в единую память.

Обычно вы отбрасываете:

  • Буфер глубины, поскольку он не отображается на экране. Он просто используется во время рендеринга на gpu.
  • Буфер msaa, поскольку он разрешен для меньшего буфера для представления на экран.

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

Основная ситуация, когда я видел DiscardFramebuffer, – это когда у вас есть многодисковый рендеринг-буфер, который вы только что разрешили текстуре, используя BlitFramebuffer или ResolveMultisampleFramebufferAPPLE (на iOS), и в этом случае вы больше не заботитесь о содержимом исходного буфера.

Intereting Posts