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