Нужно ли воссоздавать текстуру при использовании взаимодействия opengl / CUDA? - PullRequest
0 голосов
/ 26 июля 2011

Я хочу манипулировать текстурой, которую я использую в opengl, используя CUDA. Зная, что для этого мне нужно использовать PBO, мне интересно, придется ли мне воссоздавать текстуру каждый раз, когда я делаю изменения в PBO следующим образом:

// Select the appropriate buffer
glBindBuffer( GL_PIXEL_UNPACK_BUFFER, bufferID);
// Select the appropriate texture
glBindTexture( GL_TEXTURE_2D, textureID);
// Make a texture from the buffer
glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, Width, Height,GL_BGRA, GL_UNSIGNED_BYTE, NULL);

Копирует ли glTexSubImage2D и т.п. данные из PBO?

1 Ответ

1 голос
/ 26 июля 2011

Все операции передачи пикселей работают с буферными объектами. Поскольку glTexSubImage2D инициирует операцию переноса пикселей, ее можно использовать с буферными объектами.


Не существует долгосрочной связи между буферными объектами, используемыми для передачи пикселей и текстурами. Буферный объект используется так же, как указатель на клиентскую память для вызовов glTexSubImage2D. Он там для хранения данных, пока OpenGL форматирует и тянет их в текстуру. Как только это будет сделано, вы можете делать с ним все, что захотите.

Единственное отличие состоит в том, что, поскольку OpenGL управляет объектом буфера, загрузка из буфера может быть асинхронной. Хорошо, и вы получаете возможность играть в игры, такие как заполнение буферного объекта операциями с графическим процессором (будь то OpenGL, OpenCL или CUDA).

...