OpenGL的对象和对象模型

  1. 同步对象(Sync Objects)
  2. 查询对象 Query Objects
  3. OpenGL共享对象和多上下文 Shared Objects and Multiple Contexts
  4. 缓冲区对象(Buffer Objects)
  5. 着色器对象(Shader Objects)
  6. 程序对象(Program Objects)
  7. 程序管线对象(Program Pipeline Objects)
  8. 统一变量(Uniform Variables)
  9. 顶点数组对象和绘图命令 Vertex Specification and Drawing Commands

在OpenGL规范中,定义了多种不同类型的对象,应用程序可以通过相应的命令创建、修改、查询和销毁这些对象实例,其数量通常仅受可用图形内存限制。每个对象实例与特定的上下文绑定,并共同决定了诸如着色器、缓冲区数据、纹理图像、帧缓冲区内容以及同步栅栏和计时查询等状态信息,这些状态信息在GL绘图操作中起到关键作用。

  • 管理以及删除对象

    大多数对象类型遵循一个通用的对象管理模型。通常通过以"Gen"开头的命令生成未使用的名称。生成的名称并不立即对应一个实际的对象实例;对象是在通过绑定上下文中的生成名称时才被创建。例如,当调用BindBuffer并将GenBuffers返回的缓冲区对象名称传递给它时,就会为该缓冲区分配资源并创建一个关联的缓冲区对象。此外,还存在一些函数可以直接创建并返回初始化完毕的对象名称。

    对象删除是通过调用特定于该对象类型的删除命令实现的,例如DeleteBuffers用于删除缓冲对象。一旦对象被删除,其名称会再次标记为未使用以便重新生成。若尝试删除不存在或已标记为未使用的对象名称,则会被静默忽略。(如果对象在被当前GL上下文使用时被删除,它的名称会立即变为未使用状态,并且某些类型的对象会自动从当前上下文的绑定点解除绑定。然而,底层对象只有在其不再被任何上下文使用时才会真正被删除。)

多个上下文之间可以共享部分服务器状态,这需要通过窗口系统绑定API来实现。除特定对象类型外,所有上下文的状态都是各自独立的。

各个对象的具体功能如下:

  • 缓冲区对象(Buffer Objects):存储客户端数据到服务器内存中,用于分配、初始化、读取和写入固定大小的内存区域,并在一定条件下允许客户端和服务器同时访问。

  • 着色器对象(Shader Objects):包含着色器程序源代码或二进制代码,这些代码将在OpenGL定义的不同可编程阶段(如顶点或片段着色器)中执行。

  • 程序对象(Program Objects):通过链接多个着色器对象形成,包含了所有定义可执行着色器程序所需的信息。

  • 程序管线对象(Program Pipeline Objects):为每个可编程阶段提供单独的程序对象绑定点,允许独立程序处理各个阶段,从而增加组合不同着色器的灵活性。

  • 纹理对象(Texture Objects):包含一系列基于图像元素集合构建的纹理图像,并带有采样参数和纹理采样方式的状态,可在着色器中进行纹理采样操作。

  • 采样器对象(Sampler Objects):封装了控制着色器访问纹理时采样方式的那部分纹理对象状态,与纹理对象结合使用可以复用同一采样器状态于多个不同的纹理上。

  • 渲染缓冲区对象(Renderbuffer Objects):包含单个格式化的图像,该图像可用于离屏渲染。

  • 帧缓冲区对象(Framebuffer Objects):封装了帧缓冲区状态,包括颜色、深度和模板缓冲区,这些缓冲区由渲染缓冲区对象或纹理对象附着而成。

  • 顶点数组对象(Vertex Array Objects):代表一组顶点属性集,这些属性作为缓冲区对象数据存储中的数组输入至顶点着色器。

  • 变换反馈对象(Transform Feedback Objects):用于在变换反馈模式激活时捕获经过变换的图元顶点属性,它们包含状态信息以及捕获属性所引用的缓冲区对象。

  • 查询对象(Query Objects): 用于返回关于一系列GL命令执行过程的信息。

  • 同步对象(Sync Objects):在OpenGL中扮演着同步原语的角色,它们是对事件完成状态的一种表示,可以被测试或等待其完成。

值得注意的是,不是所有对象都是可共享的。例如,帧缓冲区对象和顶点数组对象等容器对象包含对其他对象的引用,但它们本身不支持共享。而像缓冲区对象、纹理对象和采样器对象则可以跨上下文共享。

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值