具有长参数的JOGL glReadPixel

时间:2015-05-26 14:47:44

标签: java opengl jogl

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

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

第一个是:

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?我们真的在很长时间内获得像素吗?

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

1 个答案:

答案 0 :(得分:1)

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

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