OpenGL扩展有什么作用?

时间:2012-09-11 20:22:44

标签: opengl gpu-programming

我在OpenGL中遇到过很多关于GPU编程的问题。他们是如何工作的。超链接(OpenGL注册表)中的一个工作示例会有所帮助。如何编写这样的扩展?

5 个答案:

答案 0 :(得分:2)

  

他们是如何运作的。

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

如果它是与GLSL交互的扩展,那么你必须做更多的工作。必须编写着色器才能要求扩展(如果扩展名不可用,则无法编译)。它必须explicitly state使用哪些扩展名。

  

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

没有。有很多OpenGL loading libraries将加载可用的扩展并提供枚举器等。使用其中一个。

  

如何编写此类扩展?

你没有。至少,不是工作

OpenGL只不过是一个规范,一个可以阅读的PDF文件。 OpenGL的实现是人们在希望人们使用OpenGL和硬件时所写的内容。

OpenGL扩展很像OpenGL本身。只有set of documents。实现可以公开某些扩展集,但是它们是否成功取决于该实现的编写者。不是用户

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

答案 1 :(得分:1)

OpenGL extensions

  

OpenGL扩展是OpenGL实现提供的一种手段   OpenGL核心所没有的新功能或扩展功能   提供。使用扩展不应该被视为某种东西   避免;它应该被接受为OpenGL的标准实践   用户。

     

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

答案 2 :(得分:1)

除非您正在制作自己的GPU硬件或编写软件OpenGL实现,否则您将不会编写自己的OpenGL扩展。扩展实际上只是硬件供应商随意实施的规范。

答案 3 :(得分:1)

  

他们是如何运作的。

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

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

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

扩展是不属于给定OpenGL规范的功能,但在所述OpenGL规范的实现中可用。以后的OpenGL版本可能包含扩展名,因为它在规范中。但是,后来的OpenGL版本对基于功能的扩展进行某些更改也很常见。

扩展已经成为后来的OpenGL版本的一部分而不被改变的一个很好的例子是GL_TEXTURE_3D或GL_TEXTURE_CUBE_MAP等纹理类型。

  

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

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

  

如何编写此类扩展?

我认为你在这里感到困惑:编写这样的扩展程序不是OpenGL用户的任务。 OpenGL扩展不是向给定OpenGL实现添加新功能的方法。

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

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

答案 4 :(得分:0)

OpenGL扩展基本上是标志,表明某个GPU能够做什么。这些知识可能允许您利用该功能,虽然根据您的问题,我现在会忽略它们,因为它们仅在您想要执行某些特定操作时才有用。 另请注意,依赖某个扩展程序可能会排除大部分可能会毫无问题地运行您的应用程序的GPU。