码迷,mamicode.com
首页 > 其他好文 > 详细

OpenGL中Buffer的传输和更新

时间:2014-08-29 01:23:46      阅读:507      评论:0      收藏:0      [点我收藏+]

标签:使用   数据   时间   c   测试   对象   方法   r   指针   

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的传输和更新

标签:使用   数据   时间   c   测试   对象   方法   r   指针   

原文地址:http://www.cnblogs.com/3dimensions/p/3943929.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!