是否可以将纹理2D(GL_TEXTURE_2D)中的数据复制到数组缓冲区(GL_ARRAY_BUFFER)?
问题描述:
我正在开发一个程序,它可以计算GPU上的直方图。我正在使用OpenGL编写代码。在第一步骤中,我加载像素(RGB)的值到一个数组(arr_image
)并将其上传到顶点缓冲器(vbo
):是否可以将纹理2D(GL_TEXTURE_2D)中的数据复制到数组缓冲区(GL_ARRAY_BUFFER)?
GLuint vbo;
glGenBuffers(1, &vbo);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
GLuint num_input_data = width * height;
/* Upload data */
glBufferData(GL_ARRAY_BUFFER, num_input_data * sizeof(float) * 3, arr_image, GL_STATIC_DRAW);
,它的工作,我可以计算图像的直方图。
但是现在,我想从纹理(GL_TEXTURE_2D
)(作为我以前的步骤的结果)加载数据到数组缓冲区(GL_ARRAY_BUFFER)。可能吗?
答
我不知道,如果你的总的做法是真的最好的一段路要走,但我会只解决您的具体问题在这里:
在OpenGL缓冲对象可以绑定到每一个缓冲目标。要将像素数据从纹理复制到缓冲区对象中,您可以将缓冲区绑定到GL_PIXEL_PACK_BUFFER
,这意味着将其用作Pixel Buffer Object (PBO)。当绑定PBO时,从GL读取像素数据的任何操作都会将数据写入PBO。所以你可以发出glGetTexImage
的呼叫。与VBO一样,这些调用的pixels
指针现在不是作为客户端内存地址,而是PBO的偏移量。
然后,您可以将此缓冲区绑定到GL_ARRAY_BUFFER
目标并将其用作顶点数据的源。
感谢重新提供。它正在工作。 –