Кто-нибудь знает, как создать текстуру с цветовым пространством YUV, чтобы мы могли получить аппаратное преобразование цветового пространства YUV в RGB без использования фрагментного шейдера? Я использую NVidia 9400 и не вижу очевидного расширения GL, которое, кажется, помогает. Я нашел примеры использования фрагментного шейдера, но проект, над которым я сейчас работаю, поддерживает только OpenGL 1.1, и у меня нет времени конвертировать его в 2.0 и выполнять все необходимые регрессионные тесты. Это также нацелено на Linux. На других платформах я использовал расширение MESA, но оно не работает на карте Nvidia.
Преобразование цветового пространства OpenGL
Ответы (2)
Поскольку вы согласны с использованием расширений, но опасаетесь использовать OpenGL 2.0 в полную силу, рассмотрите возможность предоставления простого фрагментного шейдера с расширением старой школы ARB_fragment_program.
В качестве альтернативы вы можете использовать библиотеку DevIL, ImageMagick или FreeImage, чтобы выполнить преобразование за вас.
упомянутое вами расширение MESA предназначено для YCrCb? Если ваша карта nvidia не предоставляет его, это означает, что они не предоставили поддержку для этого формата текстур (это способ сказать, что карта его поддерживает).
Ваш единственный вариант - выполнить преобразование цвета вне блока фильтрации текстуры. (перед отправкой данных текстуры в GL или после получения значений из блока фильтрации текстуры)
GL все еще может помочь, так как выполнение линейного преобразования возможно в GL1.1, при условии, что у вас есть правильные расширения (расширение объединителя текстур dot3). Тем не менее, это далеко не панацея.
Как бы то ни было, реализация BINK выглядит так, как будто она выполняет преобразование с помощью ЦП, используя MMX (хотя это читается между строк). Я бы, вероятно, сделал то же самое, конвертируя с помощью SSE перед загрузкой в OpenGL. Процессор достаточно быстр, чтобы делать это в каждом кадре.