gpt4 book ai didi

opengl - OpenGL 3.x 有什么不同?

转载 作者:行者123 更新时间:2023-12-02 12:09:44 25 4
gpt4 key购买 nike

我最近一直在寻找一本 OpenGL 书籍,并注意到 OpenGL 编程指南 (2010) 已被弃用。 OpenGL 3.x 与 2.x 有什么不同?

最佳答案

编辑:重大变化,以及一些更好的论点,这些论点长期以来一直困扰着许多人,包括我自己。也更加切题且简短。

在 OpenGL 3.0 之前,无法选择特定的 OpenGL 版本。您始终可以获得驱动程序和图形适配器功能支持的最高版本。这意味着新的核心功能必须与以前版本的旧功能兼容,否则旧应用程序在更高版本的 OpenGL 上运行时会崩溃。无法对先前版本进行更改的副作用是 OpenGL 慢慢开始遭受功能蔓延的困扰。添加功能而不是增强已有功能。如果您查看 OpenGL 2.1,那么不同绘制调用的绝对数量就是一个很好的例子。

OpenGL 3.0 中引入的新上下文创建调用最终允许您为您的上下文选择特定的 OpenGL 版本,也可以选择是否要使用已弃用的功能。 这意味着 OpenGL 最终可以修改旧的核心功能,这意味着不仅仅是“仅删除功能”,我看到有些人用它来反驳这些更改。它还意味着更改函数的语义而不删除它们。一个示例是使 glGen.. 函数成为生成对象名称的必需函数,并使着色器和顶点数组对象成为必需的。 (后者在 OpenGL 3.3 中已弃用,并未强制执行)。

有了这个可能,14 年的缓慢和糟糕的设计决策终于可以得到纠正。 1996 年 OpenGL 1.1 推出时有意义的东西在 2010 年不一定有意义。在当今硬件上不是最佳的旧函数被删除,并且删除了一些函数以使 API 更通用。一个例子是删除 gl..Pointer 调用,例如 glVertexPointer,转而使用 glVertexAttribPointer。 OpenGL 3.x 最终不会将着色器数据标记为“这个”和“那个”;你决定。还对现有功能进行了修改,因此它们在语义上与以前的版本有所不同。通过删除默认着色器程序 0 来强制着色器,该程序用于表示“禁用着色器/使用固定功能”。由于当绑定(bind)无效着色器程序时,像 glDrawElements 这样的绘制调用会返回 GL_INVALID_OPERATION,因此您实际上被迫首先创建一个着色器。

但是一切都不可能在一夜之间改变,因此 OpenGL 3.x 引入了弃用模型。功能在至少一个版本中已被弃用,然后在后续版本中被删除。删除的功能已移至名为 GL_ARB_compatibility 的 OpenGL 扩展中。您可以通过创建兼容性配置文件(而不是核心配置文件)来打开此功能。这是新上下文创建调用中的一个标志,OpenGL 3.1 及更高版本(3.0 中不包括)接受该标志。可以通过创建向前兼容的上下文来强制关闭已弃用的功能。同样,这是一个上下文创建标志。

所以总而言之,OpenGL 3.x是第一步,能够选择特定的OpenGL版本,并打破与之前版本的兼容性,以增强API;既体现了可用性,又体现了我们所处时代的硬件。

关于opengl - OpenGL 3.x 有什么不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3492729/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com