現在、GL シェーディング言語を使用して GPU を使用してテクスチャを生成するプログラムを作成しています。しかし、テクスチャに格納されたデータを取得して配列に書き込むことができるかどうか疑問に思っています。
1 に答える
glGetTexImage*()がある場合、これは大したことではありません。
glGetTexImage*() が利用できない場合は、FBO (サポートされている場合) にアタッチされているレンダー バッファーまたはバック バッファーにテクスチャ クワッドをレンダリングし、glReadPixels() を使用していずれかのレンダー ターゲットから読み戻す必要があります。レンダー ターゲットのサイズが不十分な場合は、複数のタイルをレンダリングして個別に取得する必要があります。
いずれかのアプローチを実装する場合は、ピクセルが実際に書き込まれる方法と場所を決定する他の状態に注意してください。
GL_PACK_ALIGNMENT
(画像の行揃え; 1、2、4、または 8 バイト) 要求された画像サイズに適切なメモリ割り当てが必要です。たとえば、24 ビット DIB (.bmp) は 4 バイトの行揃えを使用します。1 ピクセルあたり 3 バイトの場合、最後にパディングが必要です(image.width * 3) % 4 != 0
。追加のパディング バイトの合計量は次のとおりです。readSize.y * ((alignment - readSize.x % alignment) % alignment)
.GL_PIXEL_PACK_BUFFER
、ピクセル転送のターゲット バッファ バインディング (この場合は使用されず、明示的に 0 に設定される場合があります)。