C ++ OpenGL Многопоточность с ресурсом буфера - PullRequest
2 голосов
/ 27 мая 2011

У меня есть программа OpenGL, которой необходимо периодически обновлять текстуры.Но в то же время я хочу, чтобы программа реагировала (в частности, продолжала выполнять код рисования / отображения) во время обновления этих текстур.

Но это кажется невозможным: если я заставлю thread1 сделать код рисования / отображения и thread2 для перемещения текстуры, то они будут конфликтовать с ресурсом GL_ARRAY_BUFFER_ARB, потому что thread2 должен сохранить этот ресурс для перемещения некоторых текстурВБО.И мне нужно GL_ARRAY_BUFFER_ARB, чтобы сделать код рисования / отображения для thread1, потому что он использует разные VBO.

Например, этот код

glBindBufferARB(GL_ARRAY_BUFFER_ARB, tVboId);
    glBufferDataARB(GL_ARRAY_BUFFER_ARB, numVertices*2*sizeof(GLfloat), texCoords, GL_DYNAMIC_DRAW_ARB);  
    glBindBufferARB(GL_ARRAY_BUFFER_ARB,0);

переместит некоторые текстуры, но это займет некоторое время.В течение этого времени предполагается, что код дисплея будет выполняться много раз, но вместо этого произойдет сбой, поскольку используется GL_ARRAY_BUFFER_ARB.

Я думал, что мог бы сделать что-то вроде GL_ARRAY_BUFFER_ARB2, но я думаю, что такого нет.

Ответы [ 2 ]

3 голосов
/ 27 мая 2011

Используйте PBO, которые позволяют выполнять асинхронные передачи, подробнее здесь .

0 голосов
/ 27 мая 2011
...