мультисэмплированная глубина / трафарет FBO и спецификации OpenGL

в спецификациях OpenGL 4.2 (раздел 3.3.1) четко указано, что:

Поскольку каждый образец включает в себя информацию о цвете, глубине и трафарете, функции цвета (включая операции с текстурой), глубины и трафарета работают аналогично режиму с одним образцом. К буферу кадра добавляется дополнительный буфер, называемый буфером мультидискретизации. В этом буфере хранятся значения отсчетов пикселей, включая значения цвета, глубины и трафарета. Образцы содержат отдельные значения цвета для каждого цвета фрагмента. Когда буфер кадра включает буфер мультидискретизации, он не включает буферы глубины или трафарета, даже если мультивыборочный буфер не хранит глубину или значения трафарета. Однако цветовые буферы сосуществуют с буфером мультисэмплов.

Однако, если мне нужен тест глубины / трафарета, я должен настроить рендербуфер с множественной выборкой depth_stencil.

Это идет вразрез со спецификациями или мне что-то не хватает?


person user815129    schedule 12.01.2012    source источник


Ответы (1)


Ну что ж, посмотрим. В разделе 4.4.4 говорится:

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

Среди множества правил, упомянутых «ниже»:

Значение RENDERBUFFER_SAMPLES одинаково для всех подключенных буферов рендеринга; значение TEXTURE_SAMPLES одинаково для всех прикрепленных текстов; и, если прикрепленные изображения представляют собой смесь буферов рендеринга и текстур, значение RENDERBUFFER_SAMPLES совпадает со значением TEXTURE_-SAMPLES.

Поэтому, если ваш буфер глубины / трафарета не подвергается мультидискретизации, в то время как ваш цветной буфер мультисэмплирован, тогда ваш FBO не будет полным. И вы не можете выполнить рендеринг для неполного объекта фреймбуфера.

Так что да, вам нужно не только убедиться, что они мультидискретизированы, они должны использовать одинаковое количество выборок.

person Nicol Bolas    schedule 12.01.2012
comment
да, конечно, я добавляю буфер рендеринга с множественной выборкой depth_stencil с теми же образцами draw_renderbuffer (конечно, иначе fbo не будет полным), но я задал вопрос о необходимости глубины / трафарета в первую очередь, когда в разделе 3.3.1 говорится, что такие буферы не должны присутствовать в мультисэмплированном fbo - person user815129; 13.01.2012
comment
@ user815129: И все же в Разделе 3.3.1 ничего не говорится о FBO с множественной выборкой. Речь идет конкретно о буфере кадра по умолчанию. - person Nicol Bolas; 13.01.2012
comment
да, я тоже так думаю, я только что написал, чтобы узнать, нужна ли ms fbo depth_stencil, согласно чьему-то опыту .. - person user815129; 13.01.2012
comment
@ user815129: Если вы хотите иметь данные о глубине или трафарете, вы это сделаете. Опять же, этот абзац говорит о фреймбуфере по умолчанию. - person Nicol Bolas; 13.01.2012