opengl - glActiveTexture 还是 glActiveTextureARB?

标签 opengl

我什么时候应该在我自己的加载器代码中加载一个或另一个?在基于 Xorg + Mesa 的系统上,如果当前上下文中不支持该功能,则不能保证返回零指针,这会导致灾难性的函数调用,Khronos 建议使用 glGetString(GL_EXTENSIONS) 的结果查找扩展名称。

不同的来源将这两者与“ARB_multitexture”相关联

最佳答案

OpenGL 代码通常与加载程序配合使用的方式是它具有一些 OpenGL 功能的基线版本。如果实现甚至无法提供该版本的 GL,则程序根本无法执行并关闭。如果它有一些可以使用的可选功能,那么它会使用扩展来测试这些功能是否可用。

因此,您将加载核心 OpenGL 函数(包括该版本),但随后您将依赖于其他所有内容的扩展。

由于glActiveTexture来自OpenGL 1.2,如果您的最低GL版本是2.1,那么您将使用glActiveTexture而不关心函数的扩展版本。如果最低版本是 1.1,您可以使用 glActiveTextureARB 并忽略核心版本,即使实现支持它也是如此。

您最终可能面临的问题是,某些核心功能没有确切的等效扩展,或者根本没有等效的扩展。例如,通过 ARB_shader_objects 等提供对 GLSL 访问的 ARB 扩展。这些 API 与核心 GL 2.0 函数非常不同。不仅取决于 ARB 后缀,甚至还取决于着色器对象的类型。您无法透明地编写同时适用于两者的代码。

关于opengl - glActiveTexture 还是 glActiveTextureARB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66047217/

相关文章:

c - 为什么需要 typedef GLXContext?

c++ - OpenGL 缩放三角形网格到单位立方体

c++ - OpenGL:顶点索引缓冲区的问题

opengl - Xamarin Android 播放器 : OpenGL server is unreachable

opengl - 为什么对动态对象使用顶点缓冲区对象?

java - LWJGL OpenGL - 从 3d 点到屏幕中心的线

java - 获取三角形中任意点的位置

OpenGL 帧率

opengl - 理解 glPushMatrix() 和 glPopMatrix()

java - 从.smd模型导入3D骨骼动画