glDrawBuffers 应该翻转了 IntBuffer?
glDrawBuffers should have flipped IntBuffer?
我有以下代码:
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
,如果我不翻转它然后我得到正确的状态,但我得到一个黑色texture 而不是所需的纹理,我一遍又一遍地查看了我的代码 2 天了,我最好的选择是这部分代码在某种程度上是错误的,其余部分似乎没问题。
在 glDrawBuffers(IntBuffer)
中使用 IntBuffer
之前是否应该翻转它?
是的,所有缓冲区在传递给 LWJGL 之前都应该翻转。
底层 GL API 需要一个数组,用于使用 Java 缓冲区的函数。该数组的大小是 GL 的 C 语言绑定中的一个参数,但在 Java 中对您隐藏,因为 LWJGL 将其计算为当前位置和结束位置之间的差异。
除非你翻转java.nio.Buffer
,将“当前”位置设置为缓冲区的开头,否则当前位置将成为调用put (...)
后的结束位置。因此,LWJGL 将大小为 0 的数组传递给它位于其上的基于 C 的 OpenGL API。如果您使用大小 0 调用 glDrawBuffers (...)
,它会将所有内容设置为 GL_NONE
,这肯定会产生您所描述的行为。
我有以下代码:
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
,如果我不翻转它然后我得到正确的状态,但我得到一个黑色texture 而不是所需的纹理,我一遍又一遍地查看了我的代码 2 天了,我最好的选择是这部分代码在某种程度上是错误的,其余部分似乎没问题。
在 glDrawBuffers(IntBuffer)
中使用 IntBuffer
之前是否应该翻转它?
是的,所有缓冲区在传递给 LWJGL 之前都应该翻转。
底层 GL API 需要一个数组,用于使用 Java 缓冲区的函数。该数组的大小是 GL 的 C 语言绑定中的一个参数,但在 Java 中对您隐藏,因为 LWJGL 将其计算为当前位置和结束位置之间的差异。
除非你翻转java.nio.Buffer
,将“当前”位置设置为缓冲区的开头,否则当前位置将成为调用put (...)
后的结束位置。因此,LWJGL 将大小为 0 的数组传递给它位于其上的基于 C 的 OpenGL API。如果您使用大小 0 调用 glDrawBuffers (...)
,它会将所有内容设置为 GL_NONE
,这肯定会产生您所描述的行为。