我正在尝试将片段着色器的结果输出到两个不同的输出(帧缓冲区对象)。
就着色器而言,我了解到我可以将不同的目标指定为:
layout (location = x) out vec4 color;
layout (location = y) out vec4 miscData;
现在的问题是:如何在 C++ 端指定这些位置?以便我的两个 FBO 匹配着色器的输出索引?我在 Nicol Bolas 的书中有一个关于顶点着色器的示例,但对片段着色器部分的阅读不够深入 - 所以我不知道他是否涵盖了这个主题。
就像另一个琐事问题:我已经阅读了纹理索引 are at least 48 (TEXTURE0、TEXTURE1 等...)并且即使在最极端的图形应用程序中也不会超过此值。怎么会 ?是因为您通常不会在片段着色器中同时使用超过 48 个纹理吗?我一定遗漏了一些非常明显的东西,因为很明显,现代游戏使用的纹理即使不是成千上万,也是成百上千。
最后,纹理索引(TEXTURE0、TEXTURE1、...)与布局位置有什么关系吗?
最佳答案
您的帧缓冲区中应该有多个颜色附件,然后设置绘制缓冲区,如下所示:
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);
关于c++ - 如何设置 2 个不同的 FBO 作为片段着色器输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30291929/