Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to render Framebuffer Objects on multi-sampled textures?

I currently have a rendering engine using multiple passes in which various parts of the image are rendered on textures, and then combined using shaders. It works, and now I would like to activate multi-sampling.

I read here ( http://www.opengl.org/wiki/Framebuffer_Object_Examples#MSAA ) that, with OpenGL, you can't attach a GL_TEXTURE2D_MULTISAMPLE to a framebuffer object.

It seems one way to use multi-sampling and still have access to the result as texture is to use a multi-sampled render buffer, and then copy the result into a multisample texture.

My question is: what would be the best way to go forward?

  • Is it possible to render in a render buffer and use the output in my shader, without copying into a texture?
  • Should I indeed copy the content of the buffer into a texture, and then use it?
  • Is there another, better, solution?

Thanks.

like image 755
PierreBdR Avatar asked Feb 16 '12 18:02

PierreBdR


1 Answers

I read here ( http://www.opengl.org/wiki/Framebuffer_Object_Examples#MSAA ) that, with OpenGL, you can't attach a GL_TEXTURE2D_MULTISAMPLE to a framebuffer object.

Read it again. It says nothing about GL_TEXTURE_2D_MULTISAMPLE textures. Actually, I take that back: don't read that page again. If you want good FBO info, read the page on Framebuffer Objects that explains 3.x behavior. The page you linked to is old.

Back in the EXT days, all you had were multisampled renderbuffers, because multisample textures didn't exist. You could create multisampled buffers, but you couldn't texture with them. You could only blit them.

In 3.3 OpenGL, you can create multisampled textures. And you can attach them just like any other texture to an FBO.

like image 61
Nicol Bolas Avatar answered Nov 06 '22 20:11

Nicol Bolas