我刚刚找到了以下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();
我不确定的是我如何知道映射操作何时准备就绪,规范仅提到“其他同步技术以确保正确操作”。
有任何想法吗?