6.索引与缓冲区对象


文档摘要

## 6. 索引与缓冲区对象 在之前的章节实例,引擎主循环每执行一次,都需要上传顶点数据到GPU。 这在实际项目中是不可行的,游戏同屏顶点数普遍超过10w,每一帧都上传10w顶点数据到GPU,想想都可怕。 针对性的优化有2点: 减少上传数据量 在GPU上缓存数据 OpenGL分别提供了对应的技术来实现上面的优化,就是顶点索引和缓冲区对象。 CS架构的问题 而当我们再次审视OpenGL这一CS架构设计时,会发现另外一个问题,每个OpenGL API调用都是阻塞的! CPU通知GPU执行一个API,需要等待GPU返回结果后,才能执行下一个API。 那么调用的OpenGL API越多,性能就越差。 每绘制一个物体,都需要调用数个OpenGL API,每一次绘制都在做着重复的事情。

6. 索引与缓冲区对象

在之前的章节实例,引擎主循环每执行一次,都需要上传顶点数据到GPU。
这在实际项目中是不可行的,游戏同屏顶点数普遍超过10w,每一帧都上传10w顶点数据到GPU,想想都可怕。

针对性的优化有2点:

  1. 减少上传数据量
  2. 在GPU上缓存数据

OpenGL分别提供了对应的技术来实现上面的优化,就是顶点索引和缓冲区对象。

CS架构的问题

而当我们再次审视OpenGL这一CS架构设计时,会发现另外一个问题,每个OpenGL API调用都是阻塞的!

CPU通知GPU执行一个API,需要等待GPU返回结果后,才能执行下一个API。

那么调用的OpenGL API越多,性能就越差。

每绘制一个物体,都需要调用数个OpenGL API,每一次绘制都在做着重复的事情。

那能不能将多个命令的结果存储在GPU上,然后仅提供一个API给CPU,只需要调用这一个API就可以实现在执行数个命令的效果?

针对这个问题,OpenGL提供了顶点数组对象这一解决方案。

这一章围绕着这几点进行开发实践。


发布者: 作者: 转发
评论区 (0)
U