博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Opengl es2.0 学习笔记(十)VBO、IBO和FBO
阅读量:5173 次
发布时间:2019-06-13

本文共 2026 字,大约阅读时间需要 6 分钟。

VBO:顶点缓冲,也就是说把顶点的存储在 显卡中开辟内存,提高传递的效率。也可以说叫顶点坐标的 缓冲区。

//创建vboglGenBuffers(1,&_vbo);//绑定vboglBindBuffer(GL_ARRAY_BUFFER,_vbo);//copy数据到显存//// GL_STREAM_DRAW		不经常变化//GL_STATIC_DRAW		常量//GL_DYNAMIC_DRAW        经常变化glBufferData(GL_ARRAY_BUFFER,sizeof(vertexs),vertexs,GL_STATIC_DRAW);//修改部分数据//glBufferSubData() //绑定完之后 恢复状态glBindBuffer(GL_ARRAY_BUFFER,0);

使用:

//使用绑定的vboglBindBuffer(GL_ARRAY_BUFFER,_vbo);//绘制过程//关闭vbo glBindBuffer(GL_ARRAY_BUFFER,0);

IBO:索引缓冲,按照索引进行连接,提高效率。按照索引去

画 图形。

创建

glGenBuffers(1,&_indexbo);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,_indexbo);glBufferData(GL_ELEMENT_ARRAY_BUFFER,sizeof(indexBuf),indexBuf,GL_STATIC_DRAW);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);

使用

//开启 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,_indexbo);//绘制 使用 glDrawElements进行索引绘制//关闭glBindBuffer(GL_ELEMENT_ARRAY_BUFFER,0);

FBO:帧缓存,将我们需要绘制的物体,会知道纹理上,最后在把纹理绘制一遍。这也叫离屏渲染。

FBO创建/开始使用/结束使用

virtual void beginFBO(unsigned FBOID,unsigned textureId){	glBindFramebuffer(GL_FRAMEBUFFER,FBOID);	//把数据渲染到纹理 的0级上	glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,textureId,0);}virtual void endFBO(unsigned FBOID,unsigned textureId){	glBindFramebuffer(GL_FRAMEBUFFER,0);}virtual std::pair(unsigned,unsigned)  createFBO(int width ,int height) {		std::pair(unsigned,unsigned) buf;	//unsigned FBOID;	//unsigned RBOID;	//生产1个帧buffer	glGenFramebuffers(1,&buf.first);	//绑定framebuffer	glBindFramebuffer(GL_FRAMEBUFFER,buf.first);			//产生render buffer	glGenRenderbuffers(1,&buf.second);	//绑定render buffer	glBindFramebuffer(GL_RENDERBUFFER,buf.second);	//指明缓冲区存储内容	glRenderbufferStorage(GL_RENDERBUFFER,GL_DEPTH_COMPONENT16,width,height);	//关闭render buffer	glBindFramebuffer(GL_RENDERBUFFER,0);		//关联	glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER,buf.second);	//关闭frame buffer	glBindFramebuffer(GL_FRAMEBUFFER,0);	return buf; }

使用的伪代码

createFBO(); onrender {	 beginFBO();	 {		 //所有的绘制都 绘制到了纹理上		 	 }	 endFBO();	 shader.bgein();	 //画FBO纹理	 shader.end(); }

转载于:https://www.cnblogs.com/hiwoshixiaoyu/p/10034903.html

你可能感兴趣的文章
set&map
查看>>
集合类总结
查看>>
4.AE中的缩放,书签
查看>>
1.开发准备
查看>>
centos su命令
查看>>
CLR:基元类型、引用类型和值类型
查看>>
dubbo序列化hibernate.LazyInitializationException could not initialize proxy - no Session懒加载异常的解决...
查看>>
jQuery中的事件绑定的几种方式
查看>>
泥塑课
查看>>
setImageBitmap和setImageResource
查看>>
springMVC4 注解配置实例
查看>>
单片机编程
查看>>
Filter in Servlet
查看>>
Linux--SquashFS
查看>>
Application Pool Identities
查看>>
2017-3-24 开通博客园
查看>>
【MySQL性能优化】MySQL常见SQL错误用法
查看>>
Vue2全家桶之一:vue-cli(vue脚手架)超详细教程
查看>>
Struts 2 常用技术
查看>>
树形DP
查看>>