我试图将场景的数据绘制到多个纹理。纹理以颜色形式保持漫反射,法线和位置。渲染场景时,只绘制其中一个纹理。 gl_FragData [0]最终在带有附件GL_COLOR_ATTACHMENT2的纹理中。如果我将gl_FragData [0]切换为漫反射,则正常。或者GL_COLOR_ATTACHMENT2纹理的位置是正确的,所以我知道着色器中的数据是正确的,但前两个纹理最终是空白的。
int fbo = glGenFramebuffer();
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
addTextureAttachment(GL_COLOR_ATTACHMENT0);
addTextureAttachment(GL_COLOR_ATTACHMENT1);
addTextureAttachment(GL_COLOR_ATTACHMENT2);
Material.unbindAllTextures();
public void addTextureAttachment(int attachment) {
int id = glGenTextures();
glBindTexture(GL_TEXTURE_2D, id);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, (ByteBuffer)null);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glFramebufferTexture2D(GL_FRAMEBUFFER, attachment, GL_TEXTURE_2D, id, 0);
textures.add(new Texture(id, width, height));
}
我在渲染之前调用它
public void bindAsRenderTarget() {
glBindTexture(GL_TEXTURE_2D, 0);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glViewport(0, 0, width, height);
glDrawBuffers(GL_COLOR_ATTACHMENT0);
glDrawBuffers(GL_COLOR_ATTACHMENT1);
glDrawBuffers(GL_COLOR_ATTACHMENT2);
}
答案 0 :(得分:0)
我已经解决了这个问题。当我调用glDrawBuffers 3次时,我只需要调用一个不同的glDrawBuffers,它接受包含int GL_COLOR_ATTACHMENT 0,1和2的ByteBuffer,如下所示:
ByteBuffer buffer = BufferUtils.createByteBuffer(3 * 4);
buffer.putInt(GL_COLOR_ATTACHMENT0);
buffer.putInt(GL_COLOR_ATTACHMENT1);
buffer.putInt(GL_COLOR_ATTACHMENT2);
buffer.flip();
glDrawBuffers(3, buffer);