Заполнение OpenGL и miplevels при потоковой передаче фрагментов текстуры

У меня есть текстурный атлас, только несколько его частей меняются, и это иногда случается, поэтому не каждый кадр

Моя стратегия PBO:

  • создать ПБО размером с атлас
  • используйте glMapBufferRange, чтобы указать область памяти внутри PBO, достаточно большую, чтобы вместить все пиксели изменяющихся плиток
  • использовать glUnmapBuffer
  • используйте glTexSubImage2D для каждой плитки (используя правильное смещение вместо указателя для текущей привязанной PBO)

Вопрос № 1)

Есть ли прямое отображение между PBO и объектом текстуры?
так что предположим, что это атлас

Текстурный атлас

Могу ли я с удовольствием загрузить следующие данные в PBO?

Массив пикселей

Вопрос № 2)

Предполагать

glPixelStorei(GL_UNPACK_ALIGNMENT, 4);

Как насчет выравнивания субизображений? Должен ли я считать, что каждое изображение выровнено по ATLAS (1), или я должен предположить, что каждое изображение выровнено по текстуре одинакового размера (2)?

выравнивание изображения

Предполагая 1:
На рисунке выше вы можете видеть красные вертикальные линии (столбцы по 4 байта), которые относятся к текстуре ATLAS, оранжевая область должна содержать байты заполнения, которые я должен добавить к подизображению перед каждым рядом пикселей.

При условии 2:
Заполнение не будет перед каждой строкой пикселей, но будет добавление после каждой строки пикселей (как в обычных текстурах с RGB8, а не степенью 2 в качестве размера)

Вопрос № 3)

Как мне обновить miplevels? Должен ли я создавать и обновлять все уровни miplevel вручную или есть эффективный способ позволить OpenGL самостоятельно обновлять уровни mipmap?

1

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]