Lots of OpenGL command takes enums. For example glEnable() can take GL_BLEND, GL_LINE_SMOOTH, GL_POLYGON_SMOOT, and many more.
But how does OpenGL process all this enum values?
A massive switch statement that checks for every possible values? or maybe more organized data structure like a map ?
3 replies to this topic
Ad:
#2 Moderators - Reputation: 13506
Posted 31 October 2012 - 08:31 PM
Yeah a switch is one way to do it, another is to manually construct your own jump table (which the compiler may do for you with a switch), e.g.
void a( int arg ) {}//called if enumValue == 0
void b( int arg ) {}//called if enumValue == 1
void c( int arg ) {}//called if enumValue == 2
typedef void(Fn)(int);
Fn* table[3] = { &a, &b, &c };
void CallByEnum( int enumValue, int arg )
{
assert( enumValue >= 0 && enumValue < 3 );
table[enumValue]( arg );
}
Edited by Hodgman, 31 October 2012 - 08:32 PM.
#3 Members - Reputation: 1084
Posted 01 November 2012 - 04:33 AM
Inside the driver, the code paths tend to be convoluted and so there really are a lot of "if (X) { callASetupFunction(); }" type structures. And, yes, that does mean there's a lot of testing needed to exercise all the sections -- and a lot of bugfixing about edge cases; "When I select X Y and Z, W doesn't work..."
#4 Members - Reputation: 3809
Posted 04 November 2012 - 11:17 AM
It depends on the driver; OpenGL itself is just a specification and has nothing to say about this.
It appears that the gentleman thought C++ was extremely difficult and he was overjoyed that the machine was absorbing it; he understood that good C++ is difficult but the best C++ is well-nigh unintelligible.






