2012-11-19 3 views
2

Я разрабатываю средство просмотра видеопоследовательностей. Я использую подход на основе развертки с использованием параллельных вычислений (выборки) для каждой строки. Каждая строка, которую я получаю, разделяется в буфере отдельных выборок (Каналы), а именно R, G, B, A.Комбинат 4 отдельный компонент R G B A в одной текстуре

Представьте себе проблему как: Я хочу объединить все мои каналы в одну текстуру. Я подумал о том, чтобы сделать это самостоятельно, выделив временный буфер, в котором я могу загрузить компонент severals, и предоставить его openGL с glTexSubImage2D (...), но решение очень дорого ... особенно для изображения потоковое!

Тогда я подумал о мульти-текстурировании: словом, сделайте отдельную текстуру (GL_LUMINANCE?) Для каждого канала, а затем объедините ее с шейдером GLSL. Я думаю, что это может сработать, к сожалению, у меня нет опыта в мульти-текстурировании. Может ли кто-нибудь дать мне ссылку на полный учебник для мульти-текстурирования, пожалуйста?

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

В любом случае, вот последний вопрос: возможно ли создать одну текстуру из 4 отдельных компонентов (буферов)? Или, точнее: Как нарисовать 4 комбинированных буфера, эффективно, в контексте видеопоследовательностей?

ответ

2

Мультитекстурирование - это действительно путь. Самое главное это позволяет вам иметь разные форматы для каждого канала, что позволяет использовать такие вещи, как подвыборка 4: 2: 2 или аналогичная.

FBO рисуют цели, а не источники изображений, поэтому не совсем правильная вещь для вас.

Основная идея мультитекстурирования, что существует целый ряд так называемых текстурных блоков, где OpenGL вызов glActiveTexture выбирает блок следующих вызовов glBindTexture будут работать. Это требует бухгалтерии, которая текстура привязывается где, но это не очень сложно.

В фрагментном шейдере вы можете использовать исходные образцы из текстуры с помощью так называемой сэмплеровской формы. Форма сэмплера связана с блоком текстуры. Важным недостатком является то, что glActiveTexture принимает в качестве параметра GL_TEXTURE0 + n, тогда как номер устройства, переданный в пробоотборник с использованием glUniformi, равен n.

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

+0

Спасибо за ваш ответ дантенволф, я чувствую себя более уверенным в пути. Ps: Знаете ли вы какой-либо учебник по мультисэмплированию в дополнение к фрагментарным шейдерам? Во всяком случае, хорошо провести день – Lex