OpenGL преобразование цветового пространства - PullRequest
3 голосов
/ 27 октября 2009

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

Ответы [ 2 ]

1 голос
/ 27 октября 2009

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

Кроме того, вы можете использовать такую ​​библиотеку, как DevIL, ImageMagick или FreeImage, чтобы выполнить преобразование для вас.

0 голосов
/ 11 ноября 2009

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

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

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

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

...