Загрузка текстур OpenGL с использованием PBO?

Я разрабатываю приложение OpenGL с использованием OpenGL2.1 и хочу загружать текстуры через потоки.

Что я сделал до сих пор:

  1. Создайте второй контекст и поделитесь между ними
  2. Загрузить данные текстуры в потоке

Все работает нормально, за исключением того, что я замечаю небольшую "задержку" при загрузке текстуры! Я знаю, что это потому, что драйвер должен синхронизировать два контекста. Проблема в том, что я хочу, чтобы он транслировал текстуру. Я не хочу позже обновлять текстуру. Я просто хочу загрузить текстуры в фоновом режиме при отображении «почти плавной» анимации загрузки без остановки всего приложения.

Это то, что я искал и обнаружил, что PBO могут использоваться для передачи данных DMA пиксельных данных. Можно ли использовать PBO для загрузки текстур? Если да, то как?


person TheMasterMaind    schedule 06.08.2014    source источник


Ответы (1)


Вам не нужен второй контекст для асинхронной загрузки данных текстуры. Просто убедитесь, что вы не используете буфер сразу после запуска загрузки, иначе он остановится, ожидая завершения копирования.

Вот пример этого процесса: http://www.songho.ca/opengl/gl_pbo.html#unpack

А вот еще немного информации о том, что такое PBO и как их следует использовать: http://www.opengl.org/wiki/Pixel_Buffer_Object

person Flawe    schedule 06.08.2014
comment
Спасибо за Ваш ответ! Я уже прочитал много статей о ОПО, но я не могу заставить его работать. Я имею в виду, какие шаги мне нужно сделать, чтобы заархивировать свою цель? - person TheMasterMaind; 06.08.2014
comment
Посмотрите первую опубликованную мной ссылку, там есть исходный код, который вы можете посмотреть. - person Flawe; 06.08.2014
comment
Да, я проверил вашу первую ссылку, поэтому, когда я правильно ее понял, я должен сделать следующее: - Создать текстуру (дескриптор) и привязать ее - Создать pbo (дескриптор) и связать его - Инициализировать pbo с размером изображения, но без любые данные - Сопоставьте pbo и загрузите данные текстуры - Сделайте фиктивный вызов glTexImage2D, чтобы позволить pbo передать свои данные объекту текстуры. Это правильно, или я что-то пропустил / сделал что-то не так? - person TheMasterMaind; 06.08.2014
comment
Хорошо, я проверю свой подход завтра и опубликую здесь, если он сработает - person TheMasterMaind; 07.08.2014
comment
Хорошо, теперь все исправлено! -закрыто- - person TheMasterMaind; 08.08.2014