我有一个简单的应用程序。它有两个线程,每个线程都有自己的呈现上下文,但是它们共享一个VBO(这是有效的,我已经对其进行了测试)。
现在我想要的是:一个线程正在从VBO的上半部分渲染一些数据,第二个线程正在更新VBO的第二部分。
当我不更新VBO时,它工作正常。
但是更新时我遇到了一些奇怪的问题。当我glMapBuffer
用来更新VBO(在第二个线程中)时,在大多数情况下,在第一个线程中,它什么都不呈现-整个屏幕清晰(glClear
调用后)。看起来它无法触摸来自VBO的数据(这是可以理解的,因为整个缓冲区已映射,因此可以某种方式锁定)。
我尝试使用glMapBufferRange
,它使用GL_MAP_UNSYNCHRONIZED_BIT
。这意味着,“不要等待并根据需要使用VBO,我(程序)将自己同步它”。另外,当我映射一系列VBO并从另一部分渲染数据时,它不应该等待,但是遇到的问题与相同glMapBuffer
。
谁能帮我解决这个问题或解释为什么会发生吗?