Я читал что-то о PBO в OpenGL, и у меня возник вопрос относительно состояния гонки.
Возьмем следующий пример: у меня есть два PBO, и я хочу передать их пиксельные данные по очереди в объект текстуры. Поэтому, когда я запускаю асинхронную передачу пикселей для одного PBO, я сразу же могу делать что-то еще с ЦП, в то время как данные пикселей передаются в фоновом режиме. Теперь я делаю некоторые манипуляции с пикселями на втором PBO, и когда это будет сделано, я хочу передать пиксели из второго PBO в объект текстуры. Но что, если передача первого ПБО еще не сделана? Это похоже на первый пример: http://www.songho.ca/opengl/gl_pbo.html< /а>
index = (index + 1) % 2;
nextIndex = (index + 1) % 2;
glBindTexture(GL_TEXTURE_2D, textureId);
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pboIds[index]);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, WIDTH, HEIGHT, GL_BGRA, GL_UNSIGNED_BYTE, 0);
glTextSubImage2D() вернется немедленно, и я смогу начать работать со вторым PBO, в то время как данные первого PBO передаются на GPU. Что, если glTexSubImage() (теперь должны быть переданы пиксельные данные второго PBO) достигается до завершения первой передачи? Приведет ли это к остановке процессора?