文章目录
- 前言
- 正文
- 立即模式
- 显示列表
- VBO
- 顶点数组
- 总结
前言
opengl在cpu端进行深度图渲染,尝试想保证并发性能,并减少进程内存占用,中间踩了一些坑
主要是这块文档太少,还好有大模型帮忙解决,在此记录一下
正文
首先要明确,opengl属于server-client 模型,client发送请求,server处理,返回渲染结果
https://www.cnblogs.com/kingloongwl/p/5203338.html
opengl有四种绘制方式,下面会分开讨论
立即模式
效率比较低,因为要一个一个顶点处理,每个顶点一次函数调用 + 参数校验,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