SSE 4.1 ストリーミング ロードを使用した読み取り専用操作に対して、有効な以前に返されたポインターが指すデータをピクセル バッファー オブジェクトに保持するglUnmapBuffer
ことは可能ですか?GL_STREAM_DRAW
glMapBuffer
そうでない場合、これには技術的な理由がありますか? それとも、この「機能」が取り残されただけですか?
map と unmap の目的は、「これへのポインタが必要だ」ということです。そして「これへのポインターの使用を終了しました。」それが関数の機能です。
バッファーのマップを解除すると、ドライバーは次のことを自由に実行できるようになりました。
覚えておいてください: ポインターのマッピングは、そのバッファーへの実際のポインターを返す必要はありません。単純に、読み取り時にはデータがそのバッファーに格納されるポインターを返し、書き込み時には、書き込まれたバイトがマッピング解除時にバッファーに転送されます。
さらに、あなたが提案していることを行う唯一の理由は、バッファ内のデータを読みたいからです。バッファーをマップしたばかりなので (おそらく書き込み用で、そうでなければマップを解除していないはずです)、その中に何が入っているかがわかります。CPU アクセスが必要な場合は、データをローカルに保存する必要があります。そうすれば、より信頼性の高いアクセスが得られます。
また、別のピクセル転送を行う場合、そのポインターから読み取ることは、PBO のポイント全体が非同期転送であるため、OpenGL が同期を実行する必要があることを意味します。つまり、実行するときglReadPixels
など、OpenGL は、バッファをマップするか、glGetBufferSubData
.
しかし、バッファーが読み取り用にマップされている場合、OpenGL はいつそこから読み取るかを認識しません (ポインターから読み取るタイミングがわからないため)。そのため、OpenGL はその中のストレージを保証できません。要するに、未定義の動作です。その時点で、あなたは何でも得ることができました。
だから、あなたの言っていることは意味がありません。