IRIS GL 和 OpenGL 差异

本附录列出了 OpenGL 和 IRIS GL 之间的差异。 为每个差异提供一个术语,后跟说明。

术语 说明
累积包装 当组件值超过 1.0 或低于 1.0 时,不定义 OpenGL 累积缓冲区操作。
抗锯齿线 OpenGL 支持抗锯齿行。 IRIS GL 没有。
弧形 OpenGL 在其实用工具库中支持弧线。
属性列表 IRIS GL pushattributes 推送的属性不同于由 OpenGL glPushAttrib 推送的任何属性集。 但是,由于可以读回所有 OpenGL 状态,因此可以使用 OpenGL 实现任何所需的推送/弹出语义。
自动纹理缩放 OpenGL 纹理接口不支持自动将图像缩放到二维的幂。 但是,GLU 支持图像缩放。
bbox OpenGL 不支持显示列表的条件执行。
callfunc OpenGL 不支持从显示列表回调。 请注意,当客户端和服务器位于不同平台上时,IRIS GL 也不支持此功能。
circle OpenGL 支持带 GLU 的圆圈。 在 OpenGL 中,圆和弧 (磁盘和部分磁盘) 都有孔。 此外,还可以更改 OpenGL 中基元的细分,其表面法线可用于照明。
clear 选项 OpenGL 实际上清除缓冲区。 它不应用当前指定的像素操作,例如混合和逻辑操作,无论其模式如何。 若要使用此类功能清除,必须呈现窗口大小的多边形。
闭合线 OpenGL 呈现所有单宽度别名线,使粗线不共享像素。 这意味着不绘制独立线条的最后一个像素。
color/normal 标志 OpenGL 照明已显式启用或禁用。 启用后,无论颜色和法线的指定顺序如何,它都有效。 不能在 OpenGL glBegin 和 glEnd 命令之间启用或禁用照明。 若要禁用 glBegin 和 glEnd 之间的照明,请指定零环境、漫射和反射材料反射率,然后将材料发射设置为所需的颜色。
凹多边形 核心 OpenGL API 不处理凹面多边形,但 GLU 支持将凹凸、非自相交的轮廓分解为三角形。 这些三角形可以立即绘制或返回。
当前计算的颜色 OpenGL 没有等效于当前计算的颜色。 如果使用 OpenGL 作为照明引擎,则可以使用反馈来获取照明计算生成的颜色。
当前图形位置 OpenGL 不维护当前图形位置。 OpenGL 中不包括依赖于当前图形位置的 IRIS GL 命令(例如相对线和多边形)。
曲线 OpenGL 不支持 IRIS GL 曲线。 建议使用 NURBS 曲线。
defs/binds OpenGL 没有材料、光或纹理对象的概念;仅材料、光线和纹理属性。 但是,可以使用显示列表创建其自己的对象。
depthcue OpenGL 不提供对深度提示的直接支持,但它的迷雾支持是一种更通用的功能,你可以轻松地使用它来模拟 IRIS GL depthcue 函数。
显示列表编辑 不能仅编辑和销毁 OpenGL 显示列表。 但是,由于可以指定显示列表名称,因此可以在层次结构中重新定义各个显示列表。 OpenGL 显示列表设计用于数据缓存,而不是数据库管理。 它们保证存储在客户端/服务器环境中的服务器上,因此在执行期间不受网络带宽限制。 OpenGL 显示列表可以在 glBegin 和 glEnd 命令之间调用,因此显示列表层次结构可以变得足够精细,实际上可以对其进行编辑。
错误检查 OpenGL 比 IRIS GL 更仔细地检查错误。 例如,glBegin 和 glEnd 之间未接受的所有 OpenGL 函数都检测为错误,并且没有其他效果。
错误返回值 当返回值的 OpenGL 命令检测到错误时,它始终返回零。 如果检测到错误,通过传递的指针返回数据的 OpenGL 命令不会更改数组内容。
错误副作用 当 OpenGL 命令导致错误时,其唯一的副作用是将错误标志更新为适当的值。 不会进行其他状态更改。 (异常是OUT_OF_MEMORY错误,这是致命的。)
反馈 OpenGL 中的反馈已标准化,因此不会因计算机而变化。
字体和字符串 OpenGL 要求将字符字形作为单独的显示列表进行操作。 它提供一个显示列表调用函数,该函数接受显示列表名称的列表,每个名称表示为 1、2 或 4 个字节。 glCallLists 函数在调用前为每个显示列表名称添加单独指定的偏移量,从而允许将显示列表名称的列表视为字符串。 此机制提供 IRIS GL 字体的所有功能,以及更多功能。 例如,可以轻松操作由三角形组成的字符。
frontbuffer IRIS GL 具有用于在单一缓冲区模式下呈现到前缓冲区的复杂规则。 OpenGL 以简单的方式处理到前缓冲区的呈现。
空心多边形 可以使用 OpenGL 模具容量来呈现空心多边形。 OpenGL 不支持用于创建空心多边形的其他方法。
索引固定 在可能的情况下,OpenGL 将颜色和模具索引视为位字段而不是数字。 因此,索引被屏蔽,而不是固定到帧缓冲区的受支持范围。
整数颜色 红色、绿色、蓝色或 alpha) (带符号整数颜色分量以线性方式映射到浮点,使最负整数映射到 1.0,最正整数映射到 1.0。 在 OpenGL 替换当前颜色之前指定颜色时,会发生此映射。 无符号整数颜色分量以线性方式映射到浮点,使 0 映射到 0.0,最大整数映射到 1.0。 在 OpenGL 替换当前颜色之前指定颜色时,会发生此映射。
整数法线 整数法线分量与有符号颜色分量映射一样。 最负整数映射到 1.0,最正整数映射到 1.0。 像素片段。 由 glDrawPixels 或 glCopyPixel 绘制的像素始终光栅化并转换为片段。 生成的片段经过纹理化、雾化、深度缓冲、混合等,就像它们是从几何点生成的一样。 源像素未提供的片段数据将从当前光栅位置进行扩充。 例如,RGBA 像素采用光栅位置 Z 和纹理坐标。 深度像素采用光栅位置颜色和纹理坐标。
invariance OpenGL 保证 IRIS GL 不具有某种一致性。 例如,OpenGL 保证发送到同一系统的相同代码序列(仅在指定的混合函数中不同)将生成相同的像素片段。 (如果启用混合,然后禁用混合,则片段会有所不同。)
照明公式 OpenGL 照明公式与 IRIS GL 公式略有不同。 OpenGL 支持每个光源的单独衰减,而不是所有光源(如 IRIS GL)的单一衰减。 OpenGL 调整公式,使环境、漫射和反射照明贡献全部衰减。 此外,OpenGL 还允许你为光源的环境、漫射和反射强度以及材料的环境、漫射和反射反射指定单独的颜色。 所有 OpenGL 浅色和材料颜色都包括 alpha。 将反射指数设置为零不会破坏 OpenGL 中的反射照明。
mapw OpenGL 实用工具支持对象坐标和窗口坐标之间的映射。
矩阵模式 如果 IRIS GL 正交、正射 2、透视和窗口函数在特定矩阵上运行,则所有 OpenGL 矩阵操作都适用于当前矩阵。 除 glLoadIdentity 和 glLoadMatrix 之外的所有 OpenGL 矩阵操作都乘以当前矩阵,而不是 (替换它,就像 IRIS GL) 中的正交矩阵、正射 2、透视和窗口一样。
mipmaps, 自动生成 OpenGL 纹理接口不支持自动生成 mipmap 图像。 但是,GLU 支持为一维和二维纹理自动生成 mipmap 图像。
move/draw/pmove/pdraw/pclos OpenGL 仅支持开始/结束样式图形,因为它不保留当前图形位置。 但是,对于所有与顶点相关的命令,OpenGL 都接受旧移动/绘制命令的标量参数规范。
mprojection 模式 在投影矩阵模式下,IRIS GL 不会通过模型视图矩阵转换几何图形。 无论矩阵模式如何,OpenGL 始终通过模型视图和投影矩阵进行转换。
多缓冲区绘图 OpenGL 单独呈现到每个颜色缓冲区,而不是像 IRIS GL 那样,根据一个颜色缓冲区的内容计算单个新的颜色值并将其写入所有启用的颜色缓冲区。
Nurbs OpenGL 支持 NURBS,其中包含核心功能 (计算器) 和 GLU 支持。 支持所有 IRIS GL NURBS 功能。
旧多边形模式 别名 OpenGL 多边形始终是点采样。 不支持 IRIS GL 的多边形兼容模式,其中多边形外围外的像素包含在其光栅化中。 如果代码使用此多边形模式,则它可能适用于矩形。 旧的多边形模式矩形显示一个像素更宽和更高。
打包的颜色格式 OpenGL 接受颜色作为 8 位组件,但这些组件被视为字节数组,而不是打包到较大单词中的字节。 通过鼓励数组索引而不是移动,OpenGL 可促进尾号固定编程。 正如 IRIS GL 接受几何和像素渲染的打包颜色一样,OpenGL 接受用于几何和像素渲染的颜色分量数组。
补丁 OpenGL 不支持 IRIS GL 修补程序。
每位颜色写掩码 颜色分量 OpenGL 写入掩码启用或禁用对整个分量 (红色、绿色、蓝色或 alpha) 的更改,而不是单个组件的位。 但请注意,颜色索引和模具索引都支持每位写入掩码。
每位深度写入掩码 深度组件的 OpenGL 写入掩码启用或禁用对整个组件的更改,而不是对深度组件的各个位的更改。
pick OpenGL 实用工具库支持生成选取矩阵。
像素坐标 在 OpenGL 和 IRIS GL 中,窗口坐标系的原点位于其左下角。 OpenGL 将原点置于此像素的左下角,而 IRIS GL 则将其置于左下角像素的中心。
像素缩放 OpenGL 负缩放因子反映当前图形位置。 IRIS GL 不定义负缩放因子的操作,而是提供RIGHT_TO_LEFT和TOP_TO_BOTTOM反射 pixmodes。 这些反射模式会就地反射,而不是当前光栅位置。 OpenGL 不定义反射模式。
pixmode OpenGL 像素传输对单个颜色分量进行操作,而不是像 IRIS GL 那样对四个 8 位组件的打包组进行操作。 虽然 OpenGL 提供比 IRIS GL 更多的像素功能,但它不支持打包的颜色构造,并且它不允许在像素复制操作期间) (红色到绿色、红色到蓝色等方式重新分配颜色分量。
polf/poly 除了显示列表外,OpenGL 不提供对顶点列表的直接支持。 但是,可以使用 OpenGL API 轻松实现 polf 和 poly 等函数。
多边形引发顶点 平面着色的 IRIS GL 多边形采用指定的最后一个顶点的颜色,而 OpenGL 多边形采用指定的第一个顶点的颜色。
多边形 stipple 使用 IRIS GL 时,多边形样式相对于屏幕。 使用 OpenGL 时,它是相对于窗口的。
多边形顶点计数 使用 OpenGL 的 glBegin 和 glEnd 之间的顶点数没有限制,即使对于 glBegin (POLYGON ) 也是如此。 使用 IRIS GL 时,多边形限制为不超过 255 个顶点。
readdisplay 读取窗口边界外的像素是窗口系统功能,而不是呈现功能。 使用 Windows 函数替换 IRIS GL readdisplay 命令。
relative move/draw/pmove/pdraw/pclos OpenGL 不维护当前图形位置,因此不支持相对顶点操作。
RGBA logicop () OpenGL 不支持对 RGBA 缓冲区执行逻辑操作。
sbox () sbox 是一个 IRIS GL 矩形基元,仅在不旋转的情况下进行转换时才定义良好。 它的呈现速度比标准矩形更快。 虽然 OpenGL 不支持此类基元,但当矩阵和其他模式处于简化计算的状态时,可以对其进行优化以非常快速地呈现矩形。
标量参数 在 glBegin 和 glEnd 之间接受的所有 OpenGL 命令都有接受标量参数的入口点。 例如,glColor4f (红色、绿色、蓝色、alpha ) 。
剪刀 OpenGL glScissor 函数不跟踪视区。 IRIS GL 视区命令会自动更新 scrmask。
scrbox () OpenGL 不支持边界框计算。
scrsubdivide () OpenGL 不支持屏幕细分。
单矩阵模式 OpenGL 始终维护两个矩阵:ModelView 和 Projection。 尽管出于性能原因,OpenGL 实现可以将这些合并到单个矩阵中,但它必须始终向程序员呈现双矩阵模型。
子像素模式 所有 OpenGL 呈现都是子像素定位subpixel 模式始终处于打开状态。
swaptmesh () OpenGL 不支持 swaptmesh 功能。 但是,它确实提供两种类型的三角形网格:一种对应于 IRIS GL 的默认“条带”行为,另一种对应于在使用 IRIS GL 时在第三个顶点和所有后续顶点之前调用 swaptmesh。
vector 参数 glBegin 和 glEnd 之间接受的所有 OpenGL 命令都有接受矢量参数的入口点。 例如,glColor4fv 。
窗口管理 OpenGL 不包含窗口系统命令。 它始终支持作为窗口或操作系统的扩展,其中包括设备和窗口控件的功能。 每个扩展都提供一个特定于系统的机制,用于创建、销毁和操作 OpenGL 呈现上下文。 例如,X 窗口系统的 OpenGL 扩展 (GLX) 包含用于此目的的大约 10 个命令。 IRIS GL 命令(如 gconfig 和 drawmode)不是由 OpenGL 实现的。
窗口偏移量 IRIS GL 返回屏幕(而不是窗口)坐标中的视口和字符位置。 OpenGL 始终使用窗口坐标。
z 渲染 OpenGL 不支持将颜色呈现到深度缓冲区。 它确实允许使用其他颜色缓冲区,这些缓冲区可以使用其他窗口配置中用于深度缓冲区的相同内存来实现。 但这些额外的颜色缓冲区不能在任何单个配置中与深度缓冲区共享内存。