cpu环境下opengl共享数据踩坑与解决
文章目录前言正文立即模式显示列表VBO顶点数组总结前言opengl在cpu端进行深度图渲染,尝试想保证并发性能,并减少进程内存占用,中间踩了一些坑主要是这块文档太少,还好有大模型帮忙解决,在此记录一下正文首先要明确,opengl属于server-client 模型,client发送请求,server处理,返回渲染结果https://www.cnblogs.com/kingloongwl/p/5203338.htmlopengl有四种绘制方式,下面会分开讨论立即模式效率比较低,因为要一个一个顶点处理,每个顶点一次函数调用 + 参数校验,OSMesa 内部要做很多状态检查,而且每个顶点数据都要从client端传输到server端。如果是每次渲染都要动态调整顶点位置和旋转,在纯cpu上用它还可以好处是没有并发问题,内存占用也很低,因为没有预先缓存数据显示列表会在server端缓存display list,主要是避免client端向server端传数据如果是gpu场景很有用,因为client在cpu,server在gpu,中间需要通过pcie传数据,顶点数据提前存进server端就剩下数据传输时间。但这块只适用于静态场景,动态场景每次变换顶点信息就不行。如果是cpu场景就一般,主要优势是提前把数据缓存了。同样只适用于静态场景。由于opengl并发时每个线程要有自己的context和buffer,有人会觉得display list是只读的是不是可以共享?不行虽然创建context时可以指定master context,使得所有子context的display list都指向同一份master context的displa