是否可以将数据从 2D 纹理 (GL_TEXTURE_2D) 复制到数组缓冲区 (GL_ARRAY_BUFFER)?
Is it possible to copy data from a texture 2D (GL_TEXTURE_2D) to an array buffer (GL_ARRAY_BUFFER)?
我正在开发一个程序,可以在 GPU 上计算直方图。我正在使用 OpenGL 编写代码。第一步,我将像素 (RGB) 的值加载到数组 (arr_image
) 并将其上传到顶点缓冲区 (vbo
):
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). When a PBO is bound, any operation reading back pixel data from the GL will write the data into the PBO. So you can issue a glGetTexImage
调用。就像 VBO 一样,这些调用的 pixels
指针现在不被解释为客户端内存地址,而是 PBO 中的偏移量。
然后您可以将此缓冲区绑定到 GL_ARRAY_BUFFER
目标并将其用作顶点数据的来源。
我正在开发一个程序,可以在 GPU 上计算直方图。我正在使用 OpenGL 编写代码。第一步,我将像素 (RGB) 的值加载到数组 (arr_image
) 并将其上传到顶点缓冲区 (vbo
):
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). When a PBO is bound, any operation reading back pixel data from the GL will write the data into the PBO. So you can issue a glGetTexImage
调用。就像 VBO 一样,这些调用的 pixels
指针现在不被解释为客户端内存地址,而是 PBO 中的偏移量。
然后您可以将此缓冲区绑定到 GL_ARRAY_BUFFER
目标并将其用作顶点数据的来源。