Я делаю потоковое видео, используя opengl с текстурой. Чтобы повысить эффективность, я попробовал метод PBO.Opengl PBO не улучшает скорость рисования
Однако я обнаружил, что, когда я использовал ОПО
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, pboIds[pboturn]);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, cols, rows, GL_RGBA, GL_UNSIGNED_BYTE, 0);
и когда я не использую ОПО, просто позвонив:
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, cols, rows, GL_RGBA, GL_UNSIGNED_BYTE, mydata);
Хотя оба рисуют образ, но ПБО один не предлагает повышения эффективности ... Является ли это тем, что я использую интегрированное видеоустройство серии Intel HD4000, но не отдельную видеокарту (это на самом деле поверхностный профессионал)?
И glTexSubImage2D берет меня около 10 + ms для загрузки изображения 1920 x 1080 rgb. Это нормально? Я развиваюсь под Qt, есть ли какой-либо способ улучшить производительность?
UPDATE: У меня есть тестовая программа на графической карте AMD. И время, затраченное на падение, упало ниже 1 мс ... Могу ли я сказать, что это предел графического устройства Intel?
UPDATE2:
Вот загрузка поколения буфера и данные часть:
glGenBuffers(1, pboIds);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pboIds[0]);
glBufferData(GL_PIXEL_UNPACK_BUFFER, cols*rows*4, data, GL_STREAM_DRAW);
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
Для тестирования, я только отправить данные один раз во время инициализации, так что больше нет загрузки данных к PBO также не отображает буфер в тестовом коде.
Возможно, вы можете добавить еще какой-либо код карты/unmap? – balajeerc
Привет, для моего тестового случая я загружаю только одно изображение через функцию glBufferData и неоднократно показываю это единственное изображение ... Так что это не проблема кода карты/unmap – Nyaruko
@Nyaruko: ну, если вы это сделаете это в цикле без дополнительных мер предосторожности или явного сиротства, это также может быть проблемой кода map/unmap. Из того, что вы показали до сих пор, это то, что неясно, что происходит, и что именно вы измеряете. – derhass