What does GL_COLOR_ATTACHMENT do?

青春壹個敷衍的年華 提交于 2020-01-13 03:14:49

问题


I'm learning about framebuffers right now and I just don't understand what the Color attachment does. I understand framebuffers.

What is the point of the second parameter in:

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, textureColorBuffer, 0);

Why doesn't anything draw to my frame buffer when I change it to COLOR_ATTACHMENT1?

How could I draw to the frame buffer by setting the texture to Color attachment 1? Why would using multiple color attachments be useful? Is it similar to the glActiveTexture(GL_TEXTUREi) concept of drawing multiple textures at once?

I'm just trying to understand more open gl. Thanks.


回答1:


Yes, a framebuffer can have multiple color attachments, and the second parameter to glFramebufferTexture2D() controls which of them you're setting. The maximum number of supported color attachments can be queried with:

GLint maxAtt = 0;
glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &maxAtt);

The minimum number supported by all implementations is 8.

To select which buffer(s) you want to render to, you use glDrawBuffer() or glDrawBuffers(). The only difference between these two calls is that the first one allows you to specify only one buffer, while the second one supports multiple buffers.

In the example you tried, you can render to GL_COLOR_ATTACHMENT1 by using either:

glDrawBuffer(GL_COLOR_ATTACHMENT1);

or:

GLenum bufs[1] = {GL_COLOR_ATTACHMENT1};
glDrawBuffers(1, bufs);

The default is GL_COLOR_ATTACHMENT0, which explains why you had success rendering to attachment 0 without ever using this call. The list of draw buffers is part of the FBO state.

To produce output for multiple color buffers, you define multiple outputs in the fragment shader.

One popular use for multiple color buffers (often referred to by the acronym MRT = Multiple Render Targets) is deferred shading, where the interpolated vertex attributes used for the shading calculation are stored in a number of buffers in the initial rendering pass. The actual shading calculation is then performed only for the visible pixels in a second pass, using the attribute values from the buffers produced in the first pass. See for example http://ogldev.atspace.co.uk/www/tutorial35/tutorial35.html for a more complete explanation of how this works.



来源:https://stackoverflow.com/questions/34972716/what-does-gl-color-attachment-do

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!