Configurando vários destinos de renderização do OpenGL

Eu já vi muito material sobre esse assunto, mas existem algumas diferenças entre os exemplos que encontrei e estou tendo dificuldades para obter uma sólida compreensão do processo correto. Espero que alguém possa me dizer se estou no caminho certo. Também devo mencionar que estou fazendo isso no OS X Snow Leopard e na versão mais recente do Xcode 3.

Por uma questão de exemplo, digamos que eu queira escrever em dois destinos, um para normal e outro para cores. Para fazer isso, crio um framebuffer e vinculo duas texturas, além de uma textura de profundidade:

glGenFramebuffersEXT(1, &mFBO);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, mFBO);

glGenTextures(1, &mTexColor);
glBindTexture(GL_TEXTURE_2D, mTexColor);
//<texture params>
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, mTexColor, 0);

glGenTextures(1, &mTexNormal);
glBindTexture(GL_TEXTURE_2D, mTexNormal);
//<Texture params>
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, mTexNormal, 0);

glGenTextures(1, &mTexDepth);
glBindTexture(GL_TEXTURE_2D, mTexDepth);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24, w, h, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, mTexDepth, 0);

glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0)

Antes da renderização, vincularia o framebuffer novamente e, em seguida, faria:

GLenum buffers[] = { GL_COLOR_ATTACHMENT0_EXT, GL_COLOR_ATTACHMENT1_EXT };
glDrawBuffers(2, buffers);

Isso significaria que mais chamadas de sorteio atrairiam para o meu buffer de quadro. (Eu acho que?

Eu então colocava meus shaders e desenhava a cena. No meu shader de vértice, eu processava normais / posições / cores, como de costume, e passava os dados para o shader de fragmento. O fragmento faria então algo como:

gl_FragData[0] = OutputColor;
gl_FragData[1] = OutputNormal;

Neste ponto, eu deveria ter duas texturas; um com cores de todos os objetos renderizados e outro com normais. Tudo isso está correto? Agora eu devo poder usar essas texturas como qualquer outra, digamos, renderizá-las em um quad de tela cheia, certo?

questionAnswers(1)

yourAnswerToTheQuestion