У меня есть два потока:
1) первый создает данные для отображения (с CUDA) и загружает их в текстуру OpenGL с помощью:
cudaGraphicsMapResources(TEX)
// Copy data to TEX
cudaGraphicsUnmapResources(TEX)
2) второй использует данные и др aws текстурированный прямоугольник
glBindTexture(TEX)
// glBegin() ... glEnd()
glBindTexture(0)
Безопасно ли это делать без какой-либо блокировки?
cudaGraphicsMapResources()
документация говорит, что это будет на одном убедитесь, что он синхронизирован, но, с другой стороны, любые вызовы OpenGL при отображении ресурса приводят к неопределенному поведению.
Цитирование Документация по совместимости графики CUDA :
This function provides the synchronization guarantee that any graphics calls issued before cudaGraphicsMapResources() will complete before any subsequent CUDA work issued in stream begins.
- Итак, в момент вызова cudaGraphicsMapResources () будет ожидать всех ожидающих операций OpenGL? Но будут ли они заблокированы, пока cudaGraphicsUnmapResources ()?
The graphics API from which resources were registered should not access any resources while they are mapped by CUDA.
- Поэтому, если я позвоню, попробуйте нарисовать промежуточную карту / unmap я в беде?