0

我在OpenGL中遇到过很多这样的 GPU 编程。他们是如何工作的。来自超链接(OpenGL 注册表)的工作示例会有所帮助。怎么能写出这样的扩展?

4

5 回答 5

2

他们是如何工作的。

通过阅读扩展规范,了解新函数/枚举器/GLSL 添加的功能,OpenGL 扩展“起作用”。然后使用适当的OpenGL 加载库来检查扩展是否可用。如果是,您可以在该 OpenGL 实现的程序中使用这些函数/枚举器/GLSL 添加。

如果它是一个与 GLSL 交互的扩展,那么你必须做更多的工作。您的着色器必须编写为需要扩展(因此如果扩展不可用,将无法编译)。它必须明确说明它使用了哪些扩展。

来自超链接(OpenGL 注册表)的工作示例会有所帮助。

不,有很多OpenGL 加载库可以加载可用的扩展并提供枚举器等。使用其中之一。

怎么能写出这样的扩展?

你没有。至少,不是一个工作的。

OpenGL 只不过是一个规范,一个可以阅读的 PDF 文件。当人们希望人们在他们的硬件上使用 OpenGL 时,他们会编写 OpenGL 的实现

OpenGL 扩展很像 OpenGL 本身。无非是一套文件。一个实现可能会公开一些扩展集,但它们是否公开取决于该实现的编写者。不是它的用户

您可以使用可用的格式编写 OpenGL 扩展。但这只是另一个文件。但是可能性非常好,没有人会实施它。因此,它只是互联网上的一个文本文件。

于 2012-09-11T21:58:15.953 回答
1

他们是如何工作的。

您在现代操作系统上找到的 OpenGL 库仅涵盖了一个非常基本的 OpenGL 版本。通常介于 OpenGL-1.1 到 OpenGL-1.5 之间。OpenGL 驱动程序想要向用户应用程序公开的任何现代特性都是通过扩展机制提供的。

扩展机制是 GPU 驱动程序公开比标准系统 OpenGL 接口库提供的更新或更高级的功能的一种方法。

(由于 Nicol Bolas 的评论而更新):重要的是要理解,扩展和扩展机制之间是有区别的。扩展机制是{glX,wgl,…}GetProcAddress最初与最早的 OpenGL 版本一起引入的用于公开扩展的函数(这些函数不是 OpenGL 的一部分,但操作系统支持设置 OpenGL 上下文所需的基础设施)。后来他们升级到功能齐全的 API 访问,但名称卡住了(例如库 GLEW,即 GL Extension Wrangler,被命名为加载扩展,但它加载常规但更高版本的 OpenGL 版本的功能,这本身不是扩展,以及)。

扩展是不属于给定 OpenGL 规范的一部分,但在所述 OpenGL 规范的实现中可用的功能。更高的 OpenGL 版本可能会在规范中包含扩展。但是,更高版本的 OpenGL 对基于功能的扩展进行某些更改也是很常见的。

GL_TEXTURE_3D 或 GL_TEXTURE_CUBE_MAP 之类的纹理类型已成为后续 OpenGL 版本的一部分而没有被更改的一个很好的例子。

来自超链接(OpenGL 注册表)的工作示例会有所帮助。

你的意思是如何使用这样的扩展?

怎么能写出这样的扩展?

我认为你在这里混淆了一些东西:编写这样的扩展不是 OpenGL 用户的任务。OpenGL 扩展不是向给定 OpenGL 实现添加新功能的方法。

恰恰相反。一个 OpenGL 实现已经可以比系统库和/或它所基于的 OpenGL 规范中包含的功能更多,通过扩展提供其高级功能。

如果您想编写自己的扩展,那么因为您是一名 OpenGL 驱动程序开发人员,您的任务是为用户提供最新一代 GPU 的超级新功能。

于 2012-09-11T21:45:53.177 回答
1

OpenGL 扩展

OpenGL 扩展是 OpenGL 实现提供 OpenGL 核心不提供的新功能或扩展功能的一种手段。不应将使用扩展视为应避免的事情;它应该被接受为 OpenGL 用户的标准做法。

一些扩展公开了只有一个特定硬件供应商公开的功能,但许多扩展由多个实现实现。有一种机制可以确定可以从特定实现中获得哪些扩展。

于 2012-09-11T20:31:40.627 回答
1

除非您正在制作自己的 GPU 硬件或编写软件 OpenGL 实现,否则您不会编写自己的 OpenGL 扩展。扩展其实只是硬件厂商随意实现的一个规范。

于 2012-09-11T20:46:10.683 回答
0

OpenGL 扩展基本上是指示某个 GPU 能够做什么的标志。这些知识可能使您可以利用该功能,尽管根据您的问题,我现在暂时忽略它们,因为它们仅在您想做特定的事情时才有用。另请注意,依赖某个扩展可能会排除大部分 GPU,否则这些 GPU 可能会毫无问题地运行您的应用程序。

于 2012-09-11T21:08:54.253 回答