带有长参数的 JOGL glReadPixel

JOGL glReadPixel with long paramater

我在使用 JOGL Java 中使用 OpenGL 做一些事情,我遇到了一些让我感到惊讶的事情。

有两个指向同一个 C 实现的 glReadPixel 函数。

第一个是:

glReadPixels(int x, int y, int width, int height, int format, int type, Buffer pixels)

与 C 绑定相比,我了解它的工作原理,但第二个:

glReadPixels(int x, int y, int width, int height, int format, int type, long pixels_buffer_offset)

如何将 void* 转换为 long ?我们真的得到了 long 内的像素吗?

第二个绑定我真的不懂。我做了一些谷歌搜索,我发现每个人都在使用第一个 ...

如果您想将结果读入 PBO(像素缓冲区对象),将使用第二个绑定。在这种情况下,最后一个参数是缓冲区的偏移量。如果缓冲区绑定到 GL_PIXEL_PACK_BUFFERglReadPixels() 的最后一个参数指定相对于此缓冲区开头的偏移量。

这与 glVertexAttribPointer() 非常相似,其中最后一个参数在 C/C++ 绑定中重载,但 Java 需要两个绑定,因为它更安全。在这种情况下,如果存在 GL_ARRAY_BUFFER 绑定,则最后一个参数是相对于 VBO 开头的偏移量,否则它是指向数据的指针。