我试图将片段着色器的结果输出到两个不同的输出(帧缓冲对象)。
就着色器而言,我了解到我可以将不同的目标指定为:
layout (location = x) out vec4 color;
layout (location = y) out vec4 miscData;
现在的问题是:如何指定C ++这些位置?所以我的两个FBO匹配着色器的输出索引?我在Nicol Bolas的顶点着色器中有一个例子。书,但没有读到片段着色器部分 - 所以我不知道他是否涵盖了这个主题。
正如另一个琐事问题:我已经阅读了纹理索引here(TEXTURE0,TEXTURE1等等),即使在最极端的图形应用程序中也不会超出这个范围。怎么会 ?是因为你通常不会在片段着色器中同时使用超过48个纹理吗?我必须错过一些非常明显的东西,因为很明显,现代游戏使用的是数千种不同的纹理。
最后,纹理索引(TEXTURE0,TEXTURE1,...)是否与布局位置有关?
答案 0 :(得分:1)
你的Framebuffer中应该有多个Color附件然后设置绘制缓冲区,如下所示:
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texID0, 0);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, texID1, 0);
GLuint drawBuffers[] = {GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1};
glDrawBuffers(2, drawBuffers);