PDA

View Full Version : Confused - GL_ACTIVE_PROGRAM/GL_CURRENT_PROGRAM



sqrt[-1]
08-26-2011, 08:38 PM
GL_ACTIVE_PROGRAM vs GL_CURRENT_PROGRAM

I am a bit confused about these two enums - the 4.1 spec states that it is a simple token re-name, but reading the GL_ARB_separate_shader_objects spec:

"This extension introduces the active program specified by glActiveShaderProgram (similar to the active texture selector specified by glActiveTexture) to specify the selector used by glUniform* commands.
This active program is simply a selector and doesn't actually control any rendering operation."

But then states:
"The active program can be queried with glGetIntegerv with the GL_ACTIVE_PROGRAM token which is an alias for GL_CURRENT_PROGRAM."

The value in this extension is:
GL_ACTIVE_PROGRAM 0x8259

But in GL_EXT_separate_shader_objects
GL_ACTIVE_PROGRAM_EXT 0x8B8D (alias for CURRENT_PROGRAM)

So is it a case that we now have two token values that do the same thing?

Alfonse Reinheart
08-27-2011, 01:39 AM
So is it a case that we now have two token values that do the same thing?

No. GL_ACTIVE_PROGRAM_EXT is for the EXT extension. The GL_ACTIVE_PROGRAM is for the core feature. They are not interchangeable, nor do they refer to the same state.

sqrt[-1]
08-27-2011, 02:40 AM
My confusion is over GL_ACTIVE_PROGRAM(0x8259) vs GL_CURRENT_PROGRAM(0x8B8D) not
GL_ACTIVE_PROGRAM_EXT vs GL_ACTIVE_PROGRAM

I assume they refer to differnt state, but in section K.3 Changed Tokens of the OpenGL 4.2 spec:

New token names are introduced to be used in place of old, less general names.
However, the old token names continue to be supported, for backwards compatibility with code written for previous versions of OpenGL. The new names, and the
old names they replace, are shown in table K.1.

New Token Name Old Token Name
ACTIVE_PROGRAM CURRENT_PROGRAM
Table K.1: New token names and the old names they replace.

Is this a mistake?

Alfonse Reinheart
08-27-2011, 04:42 AM
It would certainly not be the first mistake surrounding ARB_separate_shader_objects.