我刚刚发现了以下OpenGL规范ARB_map_buffer_range.
我想知道是否可以使用此扩展程序进行非阻塞地图调用?
目前在我的应用程序中我渲染到FBO,然后我映射到主机PBO缓冲区.
glMapBuffer(target_, GL_READ_ONLY);
Run Code Online (Sandbox Code Playgroud)
但是,问题在于它在传输数据时会阻塞渲染线程.
我可以通过管道渲染来减少这个问题,但延迟是我的应用程序中的一个大问题.
我的问题是我是否可以将map_buffer_range与MAP_UNSYNCHRONIZED_BIT一起使用并等待映射操作在另一个线程上完成,或者在同一线程上推迟映射操作,同时渲染线程渲染下一帧.
例如
thread 1:
map();
render_next_frame();
thread 2:
wait_for_map
Run Code Online (Sandbox Code Playgroud)
要么
thread 1:
map();
while(!is_map_ready())
do_some_rendering_for_next_frame();
Run Code Online (Sandbox Code Playgroud)
我不确定的是我如何知道地图操作何时准备好,规范只提到"其他同步技术以确保正确操作".
有任何想法吗?