OpenGL копирует ColorAttachment0 из Renderbuffer в Texture2D

Я использую OpenTK и С#. Я выполняю рендеринг в буфер рендеринга, и мне нужно скопировать его содержимое (ColorAttachment0) в Texture2D, чтобы я мог выполнить некоторую постобработку и нарисовать его на экране. Как мне это сделать? Я бы использовал текстуру вместо буфера рендеринга, но мне нужно сгладить буфер кадра, и использование GL.RenderbufferStorageMultisample — единственный известный мне способ.


person KobraX22    schedule 22.01.2011    source источник


Ответы (1)


Просто создайте еще один FBO и прикрепите к нему текстуру. Привяжите мультисэмплированный FBO к GL_READ_FRAMEBUFFER, а текстурный FBO к GL_DRAW_FRAMEBUFFER. Затем вызовите glBlitFramebuffer с правильными параметрами. Это скопирует и разрешит сэмплы для создания данных без мультисэмплинга и выведет их в текстуру.

Если вы хотите разрешить образцы напрямую, вы можете использовать расширение GL_ARB_texture_multisample.

person Dr. Snoopy    schedule 22.01.2011
comment
Хорошо, теперь это работает с обычными фреймбуферами, но я получаю InvalidFramebufferOperationExt при использовании мультисемплового фреймбуфера. Есть ли что-то еще, что мне нужно настроить для многовыборочных буферов кадра? Мой код: pastebin.com/N2ZjCVy5 - person KobraX22; 22.01.2011
comment
@Daniel Вы уверены, что ваши фреймбуферы заполнены? Похоже, ваша текстура глубины не мультисэмплирована (так и должно быть). Измените его на RB с тем же количеством образцов, что и цвет. - person Dr. Snoopy; 22.01.2011
comment
ОНО РАБОТАЕТ! (с использованием буфера рендеринга с несколькими образцами как для глубины, так и для цвета) Большое спасибо :) - person KobraX22; 23.01.2011