gpt4 book ai didi

opengl - 定义 GL_GLEXT_PROTOTYPES 与获取函数指针

转载 作者:行者123 更新时间:2023-12-04 11:26:09 27 4
gpt4 key购买 nike

我正在编写一个依赖于 OpenGL 2.0 或更高版本的程序。查看 GL 2.0 的规范,我看到 ARB_shader_objects 中定义的扩展已得到提升,我想这意味着 GL 2.0 及更高版本不再需要 ARB 前缀,并且任何支持 > GL2.0 的实现都将把它作为一部分核心实现。

话虽如此,当我在 Linux 上编译我的程序时 gcc 给出警告:函数的隐式声明。获取这些函数的一种方法是在程序本身中声明它们,然后通过 *GetProcAddress 函数获取函数指针。

另一种方法是在包含 glext.h 之前定义 GL_GLEXT_PROTOTYPES,这避免了获取每个函数的函数指针的问题,这些函数现在默认存在于 GL2.0 或更高版本中。有人可以建议这是否是推荐的正确方法吗?底线是我的程序需要 OpenGL 2.0 或更高版本,我不想支持低于 GL2.0 的任何东西。

以防万一有人建议使用glee 或glew,我不想使用/有选择使用glee 或glew 库来实现相同的目的。

最佳答案

这里有两个问题。
GL_ARB_shader_objects确实在 GL2.0 中被提升为核心,但核心版本的 API 略有变化,所以它不仅仅是没有 ARB 前缀的相同函数名称,例如有glCreateShader()而不是 glCreateShaderObjectARB() ,以及两个函数 glGetShaderInfoLog()glGetProgramInfoLog()更换 glGetInfoLogARB()以及其他一些类似的细微差别。

第二个问题是假设 GL 库导出所有
核心功能。在 Linux 上通常是这样(不仅对于核心功能,而且基本上对于所有内容),但没有标准保证。 OpenGL ABI for Linux只需要:

3.4. The libraries must export all OpenGL 1.2, GLU 1.3, GLX 1.3, and ARB_multitexture entry points statically.



proposals for an update但我最近没有听说过。

Windows 仅导出 OpenGL 1.1 核心,因为 opengl32.dll 是操作系统的一部分,而 ICD 位于单独的 dll 中。您必须查询函数指针以获得几乎所有内容。

因此,最可移植的方式绝对是查询内容,无论您是手动执行还是使用诸如glew 之类的库。

关于opengl - 定义 GL_GLEXT_PROTOTYPES 与获取函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17524794/

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