OpenGL缓冲区对象

 OpenGL 缓冲区对象

    今天学习了一下缓冲区对象.....
   OpenGL是按照客户机-服务器模式设计的,在OpenGL需要数据的时候,都必须把数据从客户机内传输到服务器。
   缓冲区对象,允许应用程序现实的指定把哪些数据存储在图形服务器。
  1.创建缓冲区对象
    glGenBuffers():OpenGL分配n个当前未使用的名称(非 0),表示缓冲区对象。
    原型 : void glGenBuffers(GLsizei n,GLuint *buffers);
    
    GLboolean glIsBuffer(GLuint buffer):判断一个标识符是否是当前使用的缓冲区对象的标识符。
  2.激活缓冲区对象
    激活缓冲区对象,首先需要对他进行绑定。绑定缓冲区对象表示选择未来的操作将影响到哪个缓冲区    对象。
    glBindBuffer(GLenum target ,GLuint buffer): 指定了当前的活动缓冲区对象 。
  3.用数据分配和初始化缓冲区对象
     一旦绑定了一个缓冲区对象,就需要保留空间以存储数据。
    void glBufferData(GLenum target,GLsizeiptr size,const GLvoid * data,GLenum usage );
    功能是分配size个存储单位的OpenGL服务器内存,用于存储顶点数据或索引。以前有与当前缓冲区对象相关联的数据将删除。
    glBufferData()首先在OpenGL拂去其中分配内存以存储数据。如果成功分配,data!=NULL,size个单位就会从客户机内存复制到这个对象中。如果data=NULL,为数据保留适当的空间,但不会初始化。
    在缓冲区对象中可以进行三种操作:绘图 读取 复制。
  4.更新缓冲区对象的数据值
    方法一:假设已经在用用程序的一个缓冲区中准备了相同类型的数据,glBufferSubData()将用我们提供的数据替换被绑定的缓冲区对象的一些数据子集。
            void glBufferSubData(GLenum target,GLuint offset,GLsizei size,const GLvoid *data); 用data 指向的数据更新 与target 相关联的当前绑定缓冲区对象中从offset开始的size个字节数据。
             
    方法二:允许灵活的选择需要更新的数据。
            GLvoid *glMapBuffer(GLenum target,GLuenum access):返回一个指向缓冲区对象的指针,可以在这个缓冲区对象中写入新值及更新之后,再调用GLboolean glUnMapBuffer(GLenum target)表示已经完成了对数据的更新,取消对这个缓冲区的映射。如果只需要更新所需范围内的数据值,也可调用GLvoid *glMapBuffwerRange(GLenum target,GLintptr offset,GLsizeiptr length,GLbitfield access)
   5.在缓冲区对象之间复制数据
     void glCopyBufferSubData(readbuffer,writebuffer,resdoffset,writeoffset,size);
     把数据从与readbuffer相关联的缓冲区对象复制到绑定到writebuffer的缓冲区对象。
   6. 清除缓冲区对象
      glDeleteBuffer(GLsizei n,const GLuint *buffers):删除n个缓冲区对象。被删除的当前缓冲区对象的所有绑定都重置为零。如果一个缓冲区对象是在绑定时删除的,这个对象的所有绑定都重置为默认的缓冲区对象。
   7.使用缓冲区对象来存储顶点数组数据
      需要以下步骤:
       (1)生成缓冲区对象标识符;
       (2)绑定缓冲区对象,确定是存储顶点数据还是索引;
       (3)请求数据的存储空间,并对数据元素进行初始化;
       (4)指定相对于缓冲区起始位置的偏移量;
       (5)绑定适当的缓冲区对象,用于渲染;
       (6)使用适当的顶点数组渲染函数进行渲染,比如glDrawArrays()
      如果想初始化多个缓冲区对象,就需要为每个缓冲区对象重复以上。顶点数组数据的所有格式都适用于缓冲区对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值