IOSでCPU-GPUハイブリッドJPEGエンコーダを構築しようとしています。私のCPUテストでは、GPUを使用してDCTや量子化のステップを実行することが理にかなっていると考えています(アプリケーションのボトルネックである膨大な数のJPEGを圧縮する)。変換フィードバックでは、これをGPGPUコンピューティングで素晴らしい結果を得るために使用したので、これは実行可能でなければなりません。トリッキーな部分は、データ(unsigned int8のRGBA)を効率的に取得する方法です。前述のようにOpenGL ES 3.0で整数/バイトテクスチャデータを「そのまま」取得する
、私はGPGPUコンピューティングを行うためのOpenGL ES 3.0を使用するために使用されるので、私は唯一の
によってglTexImage2D(GL_TEXTURE_2D,0,GL_RGBA32F,WIDTH,HEIGHT,0,GL_RGBA,GL_GLOAT,data);
とシェーダに配信することにより、設定されている浮動小数点テクスチャ、と経験を持っています
texelFetch()
しかし、私の入力データは、符号なしバイト(またはuint8)の配列として格納されるため、毎回64個ずつ順次取得する必要があります。私は、符号なしバイトのテクスチャとして、またはより効率的に、符号なし整数のテクスチャとしてフェッチし、ビットシフトでそれらを切り離すことができると思います。
私の質問は、どのように実際にそれらのいずれかを行うのですか?具体的には、glTexImage2D()のinternalFormatを,の形式とのタイプに設定する方法はありますか?私はたくさんの組み合わせを試しましたが、それらのすべてがシェーダで0だけを提供します(そして、データソースがゼロではないことを二重チェックしました)。
通常のRGBAでは、すでに1ピクセルあたり4バイトです。 glTexImage2D()は、それぞれのvec4コンポーネントがこのバイトの1つを表すため、バイトごとにフェッチするために使用できます。値は正規化されているため、バイトを表す整数値を得るには255を掛ける必要があります。したがって、glTexImage2D()への16(64/4)コールを行うことによって64バイトを得ることができます。または私はここに何かを逃していますか? –
申し訳ありませんが、glTexImage2D()ではありません。シェーダでテクセルをフェッチすることを意味します。 –
はい、私の計画はBでした。私がこの問題を抱えている問題は、符号なしバイトとして格納されているテクスチャを取得する方法(またはそのためにglTexImage2Dを設定する方法)がわからないことです。可能であればplan-Aに飛び込み、1バイトの代わりに整数(4バイト)を「ピクセル」として取り出し、64/4/4 = 4にフェッチする回数を減らしたいと思います。 –