の次のOpenGL仕様をARB_map_buffer_range
見つけました。
この拡張機能を使用して非ブロッキングマップ呼び出しを実行できるかどうか疑問に思っていますか?
現在、私のアプリケーションでは、FBOにレンダリングし、ホストPBOバッファーにマップしています。
glMapBuffer(target_, GL_READ_ONLY);
ただし、これに伴う問題は、データの転送中にレンダリングスレッドがブロックされることです。
レンダリングをパイプライン化することでこの問題を減らすことができますが、私のアプリケーションではレイテンシーが大きな問題です。
私の質問は、map_buffer_rangeをMAP_UNSYNCHRONIZED_BITとともに使用して、別のスレッドでマップ操作が終了するのを待つか、レンダリングスレッドが次のフレームをレンダリングする間、同じスレッドでマップ操作を延期できるかどうかです。
例えば
thread 1:
map();
render_next_frame();
thread 2:
wait_for_map
また
thread 1:
map();
while(!is_map_ready())
do_some_rendering_for_next_frame();
私が確信していないのは、マップ操作の準備ができたことをどのように知るかです。仕様には、「正しい操作を保証するための他の同期手法」のみが記載されています。
何か案は?