# Unterschied glEnable und glEnablei



## Kr0e (3. Feb 2012)

Hallo,

ich bin ja zur Zeit in der Einarbeitung von OpenGL3.3 aufwärts. Ich fräs mich grad durch die Doku aber bin an einer Stelle hängen geblieben, wo ich mir nicht ganz sicher bin, wie es gemeint ist:

OpenGL 3.3 Reference Pages

Dort bei glEnable/glEnablei steht:

[...] Some of the GL's capabilities are indicated. glEnablei and glDisablei enable and disable indexed capabilities. [...]

Etwas weiter unten z.B:

GL_CLIP_DISTANCEi - If enabled, clip geometry against user-defined half space i.

So, in der Header File und so auch bei Jogl und LWJGL ist defniert:

GL_CLIP_DISTANCE0
GL_CLIP_DISTANCE1
GL_CLIP_DISTANCE2
GL_CLIP_DISTANCE3
etc. bis 7

Nun frage ich mich:

1. Wofür ist glEnablei da, wenn ja anscheinend indizierte Capabilities eh GL_CLIP_DISTANCEX aufsteigend definiert sind.

2. Ist glEnablei(GL_CLIP_DISTANCE0, 2) das Gleiche wie glEnable(GL_CLIP_DISTANCE2) ?? Das wäre nun meine Interpretation dieses Befehls.

Klar, man könnte jetzt fragen "Wieso ist das so wichtig ?", nun ich versuch einen Objektorientierten Wrapper für OpenGL zu schreiben, als Teil eines größeren Projekts, um einerseits unabhängig vom Binding zu sein und zum Anderen damit ich vertraut werde, mit allen verfügbaren Befehlen...

Anscheinend ist glEnablei auch erst seit Version 3 in OpenGL drin wodurch das Suchen bei Google kaum Erfolg hat außer die OpenGL Seite selber, wodurch ich aber wie gesagt nicht so recht schlau werde...

Gruß,
Chris


----------



## Guest2 (4. Feb 2012)

Moin,

hmm, sehr interessante Frage! 

Mir ist glEnablei bisher auch noch nie wirklich aufgefallen, geschweige den das ich es schon mal genutzt hätte (also höchst gefährliches Halbwissen meinerseits!).  

Die OpenGL 3.3 Spec erwähnt glEnablei aber nur im Zusammenhang mit blending (z.B. glEnablei(GL_BLEND, 0) für GL_DRAW_BUFFER0). In der GL 4.2 Spec kommt dann doch der (erweiterte) scissor test hinzu (z.B. glEnablei(GL_SCISSOR_TEST, 0)). Ein GL_BLENDi oder SCISSOR_TESTi gibt es aber nicht.

Ob sich die alten oder anderen Enums damit substituieren lassen, kann ich so mit Bestimmtheit leider auch nicht sagen, würde aber vermuten nein. Ein kurzer Test mit [c]GL30.glEnablei(GL30.GL_CLIP_DISTANCE0, 2);[/c] liefert hier zumindest ein glError mit Invalid enum (1280). Ein [c]GL11.glEnable(GL30.GL_CLIP_DISTANCE2);[/c] wird jedoch akzeptiert.

Viele Grüße,
Fancy


----------



## Marco13 (4. Feb 2012)

Ja, interessant... an dem Fehler, den ein glGetIntegerv_i wirft, wenn man es statt eines glGetInteger verwendet, hab' ich neulich drei Stunden gesessen :autsch:
Aber ... JETZT weiß ich zumindest, dass ich mich deswegen nicht schämen muss


----------



## Kr0e (4. Feb 2012)

Danke mal wieder!

Dein Test zeigts ja ganz klar. Naja gut, muss man wissen. Hatte iwie gehofft, dass es das selbe ist, das wäre mir design-technisch sehr entgegen gekommen. =(

Schönen Tag euch 

Chris


----------

