我正在尝试优化在主线程中发出所有OpenGL ES调用的程序。主要性能问题似乎是通过glBufferData频繁缓冲上传,更具体地说,这个函数内部的memcpy与主线程同步完成(缓冲区非常大)。
我目前的计划是使用glMapBuffer将缓冲区映射到主线程中,然后将指针发送到执行memcpy的不同线程,一旦该线程完成,在主线程中再次调用glUnmapBuffer。之后,缓冲区用于渲染。
这种方法是否有效或在没有gl上下文的线程中使用glMapBuffer指针是否危险?或者有没有办法确保主线程上没有执行memcpy,一切都在管道线程上完成?
问候
答案 0 :(得分:0)
一旦映射了缓冲区,那么指针就是一个“普通”CPU指针,因此可以像任何其他CPU指针一样使用,包括跨线程访问。
在调用glUnmapBuffer()
之前,请确保完成所有写入并同步线程。