Использование только рендербуфера (без фреймбуфера) для рисования закадрового содержимого?

Должен ли я генерировать и привязывать буфер кадра для каждого создаваемого буфера рендеринга? Или есть возможность создать только рендербуфер (и сопоставить его с текстурой или как-то отправить в садеры)?

Я просто хочу выполнить рендеринг в одноканальный буфер, чтобы создать маску для последующего использования. Я думаю, что настройка полного фреймбуфера была бы накладной для этой задачи.

Спасибо.


person Geri Borbás    schedule 14.04.2012    source источник


Ответы (2)


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

Фреймбуферы — это наборы изображений. Вы не можете выполнить рендеринг в буфер рендеринга или текстуру; вы выполняете рендеринг в буфер кадра, к которому должны быть прикреплены буферы рендеринга и/или текстуры.

Вы можете выполнить рендеринг в фреймбуфер по умолчанию или в объект фреймбуфера. Изображения в фреймбуфере по умолчанию не могут использоваться в качестве текстур. Поэтому, если вы хотите выполнить рендеринг в текстуру, вы должны использовать объект фреймбуфера. Вот как работает OpenGL.

«Настройка полного фреймбуфера» может потребовать накладных расходов, но вам придется это сделать, если вы хотите выполнить рендеринг в текстуру.

person Nicol Bolas    schedule 14.04.2012
comment
Спасибо. Теперь я вижу, что нет рендербуферов без FBO. - person Geri Borbás; 14.04.2012

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

Изменить: взгляните на следующие вызовы в документации opengl:

glClearStencil
glClear(GL_STENCIL_BUFFER_BIT)
glEnable(GL_STENCIL_TEST)
glDisable(GL_STENCIL_TEST)
glStencilFunc
glStencilOp

http://www.opengl.org/sdk/docs/man/xhtml/glStencilFunc.xml
http://www.opengl.org/sdk/docs/man/xhtml/glStencilOp.xml
http://developer.nvidia.com/system/files/akamai/gamedev/docs/stencil.pdf?download=1

person CuriousGeorge    schedule 14.04.2012
comment
Вау. Звук именно то, что мне нужно. Могу ли я выполнить рендеринг напрямую в буфер трафарета? Просто привязать его как буфер рендеринга перед рендерингом (и отключить фреймбуфер)? - person Geri Borbás; 14.04.2012
comment
в основном, как вы могли бы использовать это, отключите буфер цвета, включите буфер трафарета, затем нарисуйте некоторые фигуры. Эти фигуры будут нарисованы в буфере трафарета. После того, как вы закончите рисовать маску, вы должны снова включить цветовой буфер и нарисовать свою сцену. Ваш рисунок будет замаскирован в зависимости от содержимого буфера трафарета и настроек, которые вы использовали в glStencilFunc(). glStencilFunc() и glStencilOp() — это две самые важные функции, описанные выше, поскольку они определяют, как будет обновляться буфер трафарета и как это повлияет на ваш рендеринг. - person CuriousGeorge; 14.04.2012
comment
Ах видите. Рисовать маску с включенным трафаретом, рисовать содержимое с отключенным трафаретом. stencilFunc чем-то похож на blendFunc? Чтобы установить исходные/целевые множители? - person Geri Borbás; 14.04.2012