2017-04-06 33 views
0

GPU에서 히스토그램을 계산할 수있는 프로그램을 개발 중입니다. OpenGL을 사용하여 코드를 작성합니다. 1 단계에서, I는 배열 (arr_image) 내지 화소 (RGB)의 값을로드하여 정점 버퍼 (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); 

그리고 I 화상의 히스토그램을 계산할 수 일하고.

하지만 지금은 텍스처 (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

감사합니다. 효과가 있습니다. –