gpt4 book ai didi

java - glReadPixels() 无法填充 ByteBuffer

转载 作者:行者123 更新时间:2023-12-01 15:47:46 25 4
gpt4 key购买 nike

嗯,我正在尝试使用 LWJGL 为 OpenGL 中的窗口截取屏幕截图。代码如下:

ByteBuffer pixels = ByteBuffer.allocateDirect(800*600*4);
pixels.order(ByteOrder.nativeOrder());

while(!Display.isCloseRequested()) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
render();
Display.update();

// "Screenshot" block
if(Keyboard.isKeyDown(Keyboard.KEY_Q)) {
pixels.clear();
glReadPixels(0, 0, 800, 600, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
pixels.flip();

// pixels.position() and pixels.limit() tells us that there is nothing in the buffer
// ...
}
}

还有...

  • 我已经尝试过各种版本的代码,例如将“Screenshot” block 放在 Display.update() 之前。并使用 glReadBuffer(GL_BACK/GL_FRONT) 和 glDrawBuffer(GL_BACK/GL_FRONT) 的组合无济于事。

  • 我已禁用所有 OpenGL 状态和渲染,以便仅出现空白屏幕并尝试使用 glReadPixels。缓冲区中应该有一个空白屏幕,但缓冲区中什么也没有。

  • glGetError() 不会产生任何错误。

  • 我有一个类似的 C+ 版本,运行良好。

  • 我在 NVIDIA Corporation GeForce GTS 450/PCI/SSE2 上运行 Windows 7、OpenGL 4.10 和 LWJGL 版本 2.7.1。

那么,问题出在哪里呢?有任何想法吗?提前致谢。

最佳答案

pixels.position() and pixels.limit() tells us that there is nothing in the buffer

是吗?我认为更简单的方法是查看缓冲区的内容。

此外,Display.update 会交换缓冲区。交换后,后台缓冲区的内容未定义。因此,您应该在交换之前从前台缓冲区读取(这不是一个好主意)或读取后台缓冲区。

关于java - glReadPixels() 无法填充 ByteBuffer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6789655/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com