是否可以将纹理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目标并将其用作顶点数据的源。

+0

感谢重新提供。它正在工作。 –