質問
ハードウェアベースのYUVからRGBカラースペースへの変換をフラグメントシェーダーを使用せずに行えるように、YUVカラースペースでテクスチャを作成する方法を知っている人はいますか?私はNVidia 9400を使用していますが、トリックを行うように見える明白なGL拡張が表示されません。フラグメントシェーダーの使用方法の例を見つけましたが、現在取り組んでいるプロジェクトはOpenGL 1.1のみをサポートしており、2.0に変換して必要なすべての回帰テストを実行する時間はありません。これもLinuxを対象としています。他のプラットフォームでは、MESA拡張機能を使用していますが、Nvidiaカードでは機能しません。
解決
拡張機能を使用しても問題ありませんが、OpenGL 2.0を全面的に使用することを心配しているので、旧式の ARB_fragment_program 拡張機能を備えたシンプルなフラグメントシェーダーの提供を検討してください。
または、DevIL、ImageMagick、またはFreeImageなどのライブラリを使用して変換を実行することもできます。
他のヒント
言及したMESA拡張機能はYCrCb向けですか? nvidiaカードが公開していない場合は、そのテクスチャ形式のサポートを公開していません(カードがサポートしていると言うのは 方法です)。
唯一のオプションは、テクスチャフィルタリングブロックの外側で色変換を行うことです。 (テクスチャデータをGLに送信する前、またはテクスチャフィルタリングブロックから値を取得した後)
適切な拡張機能(dot3テクスチャコンバイナー拡張機能)があれば、GL1.1で線形変換を行うことができるため、GLは引き続き役立ちます。とはいえ、万能薬とはほど遠い。
その価値は、 BINKの実装はCPUで変換を行っているようです、MMXを使用します(ただし、行間で読み取ります)。 OpenGLに読み込む前にSSEで変換して、おそらく同じことをするでしょう。 CPUは、すべてのフレームでこれを実行するのに十分な速さです。