首页 > 代码库 > OpenGL中Buffer的传输和更新
OpenGL中Buffer的传输和更新
Graphics API的特点就是从名字上很难看出背后做了什么,所以会用和做到Best Pratice中间要经历很多曲折。昨天看了一下OpenGL中传输和更新Buffer的方法,发现了一些之前没有留意到的东西。
在创建了Buffer对象之后,可以通过glBufferData/glBufferSubData将数据从CPU Memory传输到GPU Memory,首先,数据会被memcpy到一块page-locked memory中,这一内存区域可以直接被GPU访问,至此,glBufferData将直接返回,后面数据从page-locked memory到GPU Mempry的DMA数据传输将异步执行。
更好的更新数据的方式是使用glMapBuffer/glUnMapBuffer,glMapBuffer将直接在page-locked memory中分配空间,返回指针,通过直接写page-locked memory,避免了一次memcpy。并且一些扩展支持将地址对齐,这样就可以在其内存空间上执行SSE指令。
不知道是否有不准确的地方,暂先记录下来,有时间测试一下。
OpenGL中Buffer的传输和更新
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。