Преобразование цветового пространства OpenGL

Кто-нибудь знает, как создать текстуру с цветовым пространством YUV, чтобы мы могли получить аппаратное преобразование цветового пространства YUV в RGB без использования фрагментного шейдера? Я использую NVidia 9400 и не вижу очевидного расширения GL, которое, кажется, помогает. Я нашел примеры использования фрагментного шейдера, но проект, над которым я сейчас работаю, поддерживает только OpenGL 1.1, и у меня нет времени конвертировать его в 2.0 и выполнять все необходимые регрессионные тесты. Это также нацелено на Linux. На других платформах я использовал расширение MESA, но оно не работает на карте Nvidia.


person Steven Behnke    schedule 27.10.2009    source источник


Ответы (2)


Поскольку вы согласны с использованием расширений, но опасаетесь использовать OpenGL 2.0 в полную силу, рассмотрите возможность предоставления простого фрагментного шейдера с расширением старой школы ARB_fragment_program.

В качестве альтернативы вы можете использовать библиотеку DevIL, ImageMagick или FreeImage, чтобы выполнить преобразование за вас.

person prideout    schedule 27.10.2009
comment
Использование такой библиотеки, как DevIL, означает выполнение преобразования на ЦП, чего он пытается избежать. - person Amok; 27.10.2009
comment
Я не могу использовать один из пакетов, потому что это данные фильма BINK, поэтому они встречаются в каждом кадре. Думаю, я мог бы заглянуть в ARB_fragment_program. - person Steven Behnke; 27.10.2009
comment
Извините, мои глаза пропустили аппаратную часть вопроса. - person prideout; 27.10.2009

упомянутое вами расширение MESA предназначено для YCrCb? Если ваша карта nvidia не предоставляет его, это означает, что они не предоставили поддержку для этого формата текстур (это способ сказать, что карта его поддерживает).

Ваш единственный вариант - выполнить преобразование цвета вне блока фильтрации текстуры. (перед отправкой данных текстуры в GL или после получения значений из блока фильтрации текстуры)

GL все еще может помочь, так как выполнение линейного преобразования возможно в GL1.1, при условии, что у вас есть правильные расширения (расширение объединителя текстур dot3). Тем не менее, это далеко не панацея.

Как бы то ни было, реализация BINK выглядит так, как будто она выполняет преобразование с помощью ЦП, используя MMX (хотя это читается между строк). Я бы, вероятно, сделал то же самое, конвертируя с помощью SSE перед загрузкой в ​​​​OpenGL. Процессор достаточно быстр, чтобы делать это в каждом кадре.

person Bahbar    schedule 11.11.2009