2017-04-06 44 views
0

我正在開發一個程序,它可以計算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)。可能嗎?

回答

2

我不知道,如果你的總的做法是真的最好的一段路要走,但我會只解決您的具體問題在這裏:

在OpenGL緩衝對象可以綁定到每一個緩衝目標。要將像素數據從紋理複製到緩衝區對象中,您可以將緩衝區綁定到GL_PIXEL_PACK_BUFFER,這意味着將其用作Pixel Buffer Object (PBO)。當綁定PBO時,從GL讀取像素數據的任何操作都會將數據寫入PBO。所以你可以發出glGetTexImage的呼叫。與VBO一樣,這些調用的pixels指針現在不是作爲客戶端內存地址,而是PBO的偏移量。

然後,您可以將此緩衝區綁定到GL_ARRAY_BUFFER目標並將其用作頂點數據的源。

+0

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

相關問題