带有长参数的 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_BUFFER
,glReadPixels()
的最后一个参数指定相对于此缓冲区开头的偏移量。
这与 glVertexAttribPointer()
非常相似,其中最后一个参数在 C/C++ 绑定中重载,但 Java 需要两个绑定,因为它更安全。在这种情况下,如果存在 GL_ARRAY_BUFFER
绑定,则最后一个参数是相对于 VBO 开头的偏移量,否则它是指向数据的指针。
我在使用 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_BUFFER
,glReadPixels()
的最后一个参数指定相对于此缓冲区开头的偏移量。
这与 glVertexAttribPointer()
非常相似,其中最后一个参数在 C/C++ 绑定中重载,但 Java 需要两个绑定,因为它更安全。在这种情况下,如果存在 GL_ARRAY_BUFFER
绑定,则最后一个参数是相对于 VBO 开头的偏移量,否则它是指向数据的指针。