【发布时间】:2015-04-01 17:45:43
【问题描述】:
我有以下代码:
IntBuffer DrawBuffers = Utils.createIntBuffer(2);
int bfs[] = {GL30.GL_COLOR_ATTACHMENT0, GL30.GL_COLOR_ATTACHMENT1};
for(int i = 0; i < 2; i++)
DrawBuffers.put(bfs[i]);
DrawBuffers.flip();
GL20.glDrawBuffers(DrawBuffers);
如果我翻转IntBuffer,那么int Status = GL30.glCheckFramebufferStatus(GL30.GL_FRAMEBUFFER); 不等于GL_FRAMEBUFFER_COMPLETE,如果我不翻转它,那么我的状态是正确的,但是我得到的是黑色纹理而不是所需的纹理,我现在一遍又一遍地查看我的代码 2 天,我最好的选择是这部分代码有某种错误,其余部分似乎还可以。
在glDrawBuffers(IntBuffer) 中使用之前是否应该翻转IntBuffer ?
【问题讨论】:
-
翻转缓冲区时会得到什么状态?
-
如果我不得不猜测的话,可能是
GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER。 -
我得到:int Status = 36059,如何获得 GL_FRAMEBUFFER_STATUS 形式的 gl 状态?
-
36059 是 0x8CD8,即
GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT。老实说这很奇怪,因为这个错误并没有进入最终的 FBO 规范。无论如何,当您查找错误代码时,请始终查找十六进制的错误编号。 -
是否在任何文件中指定了错误,以便我的应用可以打印 gl 错误而不是数字?我猜他们是。
标签: java opengl lwjgl framebuffer fbo