2011-01-22 2 views
1

Я использую OpenTK и C#. Я рендеринга в renderbuffer, и мне нужно скопировать его содержимое (ColorAttachment0) в Texture2D, чтобы я мог выполнить некоторую пост-обработку на нем и нарисовать его на экране. Как мне это сделать? Я бы использовал текстуру вместо renderbuffer, но мне нужно Anti-alias framebuffer, и использование GL.RenderbufferStorageMultisample - единственный способ, которым я знаю, как это сделать.OpenGL copy ColorAttachment0 из Renderbuffer в Texture2D

ответ

3

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

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

+0

Хорошо, теперь я работаю с обычными фреймбумерами, но при использовании многозадачного фреймбуфера я получаю InvalidFramebufferOperationExt. Есть ли что-то дополнительное, что мне нужно настроить для мультисэмпл-фреймбуферов? Мой код: http://pastebin.com/N2ZjCVy5 – KobraX22

+0

@ Даниэль Вы уверены, что ваши фреймбуферы завершены? Похоже, что ваша текстура глубины не мультисэмплирована (она должна). Измените его на RB с таким же количеством образцов, что и цвет. –

+0

ЭТО РАБОТАЕТ! (используя мультисэмплер рендеринга для глубины и цвета) Спасибо, очень много :) – KobraX22