シングルチャンネル10ビット画像

OpenGLに10ビットイメージを読み込んで読み込む方法はありますか?それはGPU側で最適な効率である必要はありません。私はちょうどGPUにそれをシャッフルする前にすべての8ビットに変換する私のCPUをオフロードしたい。

私は、サポートされている唯一の10ビットのテクスチャ形式がRGB10であることに気付きました。これは私が探しているものではありません。

ベンダー固有の拡張は問題ありません。

0
私はこれが正しいことを知るには十分な経験はありません/動作するだろうが、16ビットのテクスチャを使用することはできませんでしたし、シェーダで10の最下位ビットのみを使用することはできませんでしたか?
追加された 著者 Andrew Rasmussen,

1 答え

私はCPUをGPUにシャッフルする前に、すべてのものを8ビットに変換するのをオフロードしたいだけです。

まあ、それは起こらないだろう。 GPU 決してはフォーマット変換を行いません(恐らくスイッツリングを除きますが、それは実際にDMAの一部です)。 CPUはフォーマット変換を行います。そのため、フォーマットの不一致を避けることが非常に重要です。

したがって、OpenGLに10ビットシングルチャンネルデータを記述する方法があったとしても、CPUを使用してGPUが実際に使用するフォーマット(つまり8ビット)にデコードすることができます。変換を行うコードはありません。ドライバコードになります。いずれにしても、CPUリソースを消費しています。

OpenGLには10ビットのシングルチャネルデータをアップロードする方法がないため、これはあなたのニーズには関係ありません。あなたはどのようにそれを保存しますか?ピクセルはバイト整列されません。

可能であれば、このような種類の変換をオフラインで行い、最も合理的な形式でデータを格納することをお勧めします。

0
追加された
rgb10、r12などのフォーマットはどのように扱われますか?ドライバは16ビットに変換しますか?
追加された 著者 ronag,
sry、私はR12ではなくALPHA12を意味しました。
追加された 著者 ronag,
@ロンガ:どういう意味ですか?私が知っている GL_R12 の形式はありません。 RGB10 は32ビットのサイズで動作します(2ビットが失われます)。ドライバ側の変換を防止したい場合は、GL_UNSIGNED_INT_10_10_10_2またはGL_UNSIGNED_INT_2_10_10_10_REVを使用してアップロードし、GL_RGBAをアップロード形式として使用します。データが10ビットの場合、16ビットに変換して GL_R16 内部形式を使用するのが最善の解決策です。
追加された 著者 Nicol Bolas,
@ronag:ドライバが内部的にそれを GL_ALPHA16 に変換しないと誰が言いますか?これは仕様書で完全に許可されています。
追加された 著者 Nicol Bolas,