glActiveTexture or glActiveTextureARB?

Viewed 236

When I should load one or another in my own loader code? On Xorg + Mesa-based systems there is no guarantee of zero pointer returned if feature is not supported in current context, which results in catastrophic function calls, Khronos recommends to look up extension name with result of glGetString(GL_EXTENSIONS).

Different sources associate both of those with "ARB_multitexture"

1 Answers

The way OpenGL code typically works with a loader is that it has some baseline version of OpenGL functionality. If the implementation cannot provide even that version of GL, then the program simply cannot execute and shuts down. If it has some optional features that it can work with, then it uses extensions to test if those are available.

So you would load core OpenGL functions up to and including that version, but you would then rely on extensions for everything else.

Since glActiveTexture comes from OpenGL 1.2, if your minimum GL version is 2.1, then you would use glActiveTexture and not care about the extension version of the function. If the minimum version is 1.1, you could use glActiveTextureARB and ignore the core version even if the implementation supports it.

The problem you may eventually face is that some core functionality doesn't have an exact extension equivalent, or an extension equivalent at all. For example, the ARB extensions that provide access to GLSL via ARB_shader_objects and the rest. These APIs are very different from the core GL 2.0 functions. Not just by the ARB suffix, but even by the type of the shader objects. You can't transparently write code that works with both.

Related