void glBindBuffer( GLenum target,GLuint buffer); 绑定顶点缓冲对象
参数:
- target 指定缓冲区对象绑定到的目标,该目标必须是下表中的缓冲区绑定目标之一
- buffer 指定缓冲区对象的名称。
缓冲区绑定目标 列表:
GL_ARRAY_BUFFER 顶点属性
GL_ATOMIC_COUNTER_BUFFER 原子计数器存储
GL_COPY_READ_BUFFER 缓冲区复制源
GL_COPY_WRITE_BUFFER 缓冲区复制目标
GL_DISPATCH_INDIRECT_BUFFER 间接计算调度命令
GL_DRAW_INDIRECT_BUFFER 间接命令参数
GL_ELEMENT_ARRAY_BUFFER 顶点阵列索引
GL_PIXEL_PACK_BUFFER 像素读取目标
GL_PIXEL_UNPACK_BUFFER 纹理数据源
GL_QUERY_BUFFER 查询结果缓冲区
GL_SHADER_STORAGE_BUFFER 着色器的读写存储
GL_TEXTURE_BUFFER 纹理数据缓冲区
GL_TRANSFORM_FEEDBACK_BUFFER 变换反馈缓冲区
GL_UNIFORM_BUFFER 统一块存储
glBindBuffer将缓冲区对象绑定到指定的缓冲区绑定点。调用glBindBuffer时,将目标设置为一个可接受的符号常量,并将缓冲区设置为缓冲区对象的名称,将该缓冲区对象名称绑定到目标。如果不存在名为buffer的缓冲区对象,则会使用该名称创建一个缓冲区对象。当缓冲区对象绑定到目标时,该目标的前一个绑定将自动断开
缓冲区对象名称是无符号整数。值零是保留的,但每个缓冲区对象目标没有默认缓冲区对象。相反,将缓冲区设置为零可以有效解除之前绑定的任何缓冲区对象的绑定,并恢复该缓冲区对象目标的客户端内存使用情况(如果该目标支持)。缓冲区对象名称和相应的缓冲区对象内容是当前GL渲染上下文的共享对象空间的本地对象;只有当两个渲染上下文通过适当的GL窗口界面函数显式启用上下文之间的共享时,它们才共享缓冲区对象名称。
当绑定非零缓冲区对象名称时,它绑定到的目标上的GL操作会影响绑定的缓冲区对象,而对其绑定的目标的查询会从绑定缓冲区对象返回状态。与初始状态一样,当缓冲区对象名称0被绑定时,试图修改或查询其绑定到的目标的状态会生成GL_INVALID_OPERATION错误。
当非零缓冲区对象绑定到GL_ARRAY_BUFFER 目标时,顶点数组指针参数被解释为缓冲区对象内以基本机器单位测量的偏移量。
当非零缓冲区对象绑定到GL_DRAW_INDIRECT_BUFFER 目标时,通过glDrawArraysIndirect和glDrawElementsIndirect发出的绘图参数来自该缓冲区对象数据存储中的指定偏移量。
当非零缓冲区对象绑定到GL_DISPATCH_INDIRECT_BUFFER 目标时,通过glDispatchComputeIndirect发出的计算调度参数来自该缓冲区对象数据存储中的指定偏移量。
当非零缓冲区对象绑定到GL_ELEMENT_ARRAY_BUFFER 目标时,glDrawElements, glDrawElementsInstanced, glDrawElementsBaseVertex, glDrawRangeElements, glDrawRangeElementsBaseVertex, glMultiDrawElements, 或者 glMultiDrawElementsBaseVertex的索引参数被解释为缓冲区对象内以基本机器单位测量的偏移量。
当非零缓冲区对象绑定到GL_PIXEL_PACK_BUFFER 目标时,以下命令会受到影响:glGetCompressedTexImage、glGetTexImage和glReadPixels。指针参数被解释为以基本机器单位测量的缓冲区对象内的偏移量。
当非零缓冲区对象绑定到GL_PIXEL_UNPACK_BUFFER 目标时,以下命令会受到影响:glCompressedTexImage1D、glCompressed TexImage_2D、glCompress TexImage 3D、glCompleted TexSubImage2D、GlCompressedTextSubImage2D、glcompressedTex SubImage3D、glTexImage1D、GlTexImages2D、GLTexImage-3D、glTextSubImage 2D、以及glTexSub Image3D。指针参数被解释为以基本机器单位测量的缓冲区对象内的偏移量。
提供缓冲区目标GL_COPY_READ_BUFFER和GL_COPY_WRITE_BUFFER,以允许在不干扰其他绑定状态的情况下使用glCopyBufferSubData。但是,glCopyBufferSubData可以与任何一对缓冲区绑定点一起使用。
GL_TRANSFORM_FEEDBACK_BUFFER缓冲区绑定点可以传递给glBindBuffer,但不会直接影响变换反馈状态。相反,必须通过调用glBindBufferBase或glBindBufferRange来使用索引的GL_TRANSFORM_FEEDBACK_BUFFER绑定。这将影响通用GL_TRANSFORM_FEEDBACK_BUFFER绑定。
同样,可以使用GL_UNIFORM_BUFFER、GL_ATOMIC_COUNTER_BUFFOR和GL_SHADER_STORAGE_BUFFAR缓冲区绑定点,但不会分别直接影响统一缓冲区、原子计数器缓冲区或着色器存储缓冲区状态。必须使用glBindBufferBase或glBindBufferRange将缓冲区绑定到索引的统一缓冲区、原子计数器缓冲区或着色器存储缓冲区绑定点。
GL_QUERY_BUFFER绑定点用于指定一个缓冲区对象,该对象通过调用glGetQueryObject系列命令来接收查询对象的结果。
使用glBindBuffer创建的缓冲区对象绑定将保持活动状态,直到将不同的缓冲区物件名称绑定到同一目标,或者直到使用glDeleteBuffers删除绑定的缓冲区物体。
一旦创建,命名缓冲区对象可以根据需要重新绑定到任何目标。然而,GL实现可能会根据缓冲区对象的初始绑定目标选择如何优化其存储。