VBO, PBO及FBO.docx

  1. 1、本文档共14页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VBOVertex Buffer Object????为了加快显示速度,显卡增加了一个扩展,即VBO。它本质上是存储几何数据的缓存。它直接把顶点数据放置到显卡中的高速缓存,极大提高了绘制速度。?????这个扩展用到ARB_vertex_buffer_object,它可以直接像顶点数组那样使用。唯一不同的地方在于它需要将数据载入显卡的高效缓存,因此需要占用渲染时间。[参考文章1] 给出了一个使用VBO扩展的例子程序。[参考文章2]罗列了与VBO操作相关的函数[参考文章3]归纳出VBO扩展的用法流程,并总结出与纹理用法流程的相似性:?初始化阶段:1.?glGenBuffersARB(1, nVBOVertices); //生成一个句柄2.?glBindBufferARB(GL_ARRAY_BUFFER_ARB, nVBOVertices); //声明该句柄为一个vbo句柄,并选择之3.?glBufferDataARB(GL_ARRAY_BUFFER_ARB, sizeof(vertices), vertices,GL_STATIC_DRAW); //将顶点集上传至server端使用阶段:1.?glEnableClientState(GL_VERTEX_ARRAY); //开始使用vbo2.?glBindBufferARB(GL_ARRAY_BUFFER_ARB, nVBOVertices);??//选择当前使用的vbo3.?glVertexPointer(3, GL_FLOAT, 0, BUFFER_OFFSET(0));??//指定vbo顶点格式4.?glDrawArrays( GL_TRIANGLES, 0, g_pMesh-m_nVertexCount ); //画吧5.?glDisableClientState(GL_VERTEX_ARRAY); //停止使用vbo收尾阶段:1.?glDeleteBuffersARB(1,nVBOVertices); //删除句柄,同时删除server端顶点缓冲再来看看纹理缓冲是怎么使用的,其实差不多:初始化阶段:1.?glGenTextures(1, texID);//创建句柄2.?glBindTexture(GL_TEXTURE_2D, texID); //设置句柄类型3.?glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img-GetWidth(), img-GetHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, raw_rgba); //上传纹理缓冲使用阶段:1.?glEnable(GL_TEXTURE_2D); //开始使用纹理缓冲2.?glBindTexture(GL_TEXTURE_2D, texID); //选择当前使用的纹理缓冲3. 发送顶点和纹理坐标,画吧...省略4.?glDisable(GL_TEXTURE_2D); //停止使用纹理收尾阶段:1.?glDeleteTextures(1,texID);//删除句柄,,同时删除server端缓冲?参考文章:1. NEHE教程第45讲?/data/lessons/lesson.asp?lesson=45?2.?/excerpts/blog/item/dde4e0ceeeee8c0692457e54.html3.?OpenGL VBO顶点缓冲的使用?/w2001/archive/2008/05/10/49376.aspx4. Opengl Vertex Buffer Object?http://www.songho.ca/opengl/gl_vbo.htmlPBO Pixel Buffer ObjectPBO,即Pixel Buffer Object也是用于GPU的扩展(ARB_vertex_buffer_object)。这里的缓存当然就是GPU的缓存。PBO与VBO扩展类似,只不过它存储的是像素数据而不是顶点数据。PBO借用了VBO框架和所有API函数形式,并加了上两个target标志。这两个标识是:GL_PIXEL_PACK_BUFFER_ARB?将像素数据传给PBOGL_PIXEL_UNPACK_BUFFER_ARB?从PBO得到像素数据这里的“pack”还是“unpack”,可分别理解为“传给”和“得到”。它们也都可以统一理解为“拷贝”,也就是像素数据的“传递”。????比如说,glReadPixel就是数据从帧缓存(framebuffer)到内存(memory),可理解为“pack”;glDrawPixel是从内存到帧缓存,可理解为“unpack”;glGetTexImage是从纹理对象到内存,可理解为“pack”;glTexImage2d从内存(me

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档