glGetActiveAttrib: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (glGetActiveAttribARB wurde nach glGetActiveAttrib verschoben: in Kern gewandert)
(kein Unterschied)

Version vom 15. April 2006, 15:31 Uhr

glGetActiveAttrib (glGetActiveAttribARB)


Name

glGetActiveAttrib - Gibt Informationen über eine aktive Attributvariable des angegebenen Programmobjekts aus


Delphi-Spezifikation

procedure glGetActiveAttrib(program : GLuint;
                            index : GLuint;
                            maxLength : GLsizei;
                            length : PGLsizei;
                            size : PGLint;
                            type : PGLenum;
                            name : PGLchar)
procedure glGetActiveAttribARB(program : GLhandleARB;
                               index : GLuint;
                               maxLength : GLsizei;
                               length : PGLsizei;
                               size : PGLint;
                               type : PGLenum;
                               name : PGLcharARB)


Parameter

program Gibt das Programobjekt an, das abgefragt werden soll.
index Gibt den Index der Attributvariable an, die abgefragt werden soll.
maxLength Gibt maximale Anzahl an Zeichen an, die OpenGL in den String name schreiben darf.
length Liefert die Anzahl der Zeichen, die OpenGL in den String name geschrieben hat.
size Liefert die Größe der Attributvariable.
type Liefert die Datentypen der Attributvariable.
name Liefert einen (Null-terminierten) String, der den Namen der Attributvariable enthält.

Beschreibung

glGetActiveAttrib liefert Informationen über die aktive Attributvariable, die mit index angegeben wird. Der Vertexshader, der abgefragt werden soll, ist derjenige, der an das Programmobjekt per program angehängt wurde. Es ist ist nicht nötig, dass program schon erfolgreich gelinkt wurde, aber es sollte vorher schon Ziel bei einem Aufruf von glLinkProgram gewesen sein. Die Größe des Zeichenpuffers - angesteuert durch die Anwendung - wird mit maxLength angegeben, und der Pointer zu diesem Zeichenpuffer wird in name ausgegeben. Eine Attributvariable gilt als "aktiv" in einem Vertexshader, wenn es sicher ist, dass auf sie zugegriffen wird, sobald der Vertexshader ausgeführt wird.


Die Anzahl der aktiven Attribute kann man mit dem Aufruf von glGetProgram, glGetShader mit dem Token GL_OBJECT_ACTIVE_ATTRIBUTES abfragen. Der Wert 0 für index wählt das erste aktive Attribut und der Wert GL_OBJECT_ACTIVE_UNIFORMS - 1 wählt das letzte aktive Attribut. Die Länge des längsten Attributnamens kann man mit dem Aufruf von glGetProgram, glGetShader mit dem Wert GL_OBJECT_ACTIVE_ATTRIBUTES_MAX_LENGTH erfahren.


glGetActiveAttrib liefert den Namen der Attributvariable, die mit Index gesucht wurde. Der zurück geleiferte String ist Null-terminiert. Die aktuelle Anzahl der Zeichen, die in den Puffer geschrieben wurden, wird in length ausgegeben (Das Null-Terminierungszeichen wird nicht mitgezählt). Wenn die Länge des ausgegeben Strings uninteressant ist, kann man nil im length-Argument angeben.


Das Argument type liefert einen Pointer auf den Datentyp der Attributvariable. Die symbolischen Konstanten GL_FLOAT, GL_FLOAT_VEC2_ARB, GL_FLOAT_VEC3_ARB, GL_FLOAT_VEC4_ARB, GL_FLOAT_MAT2_ARB, GL_FLOAT_MAT3_ARB und GL_FLOAT_MAT4_ARB könnten ausgegeben werden.


Diese Funktion kann dazu verwendet werden, sowohl eingebaute Attributvariablen (die mit dem Präfix "gl_" beginnen) als auch selbst erzeugte Vertexattributvariablen, die mit glBindAttribLocation angebunden wurden, abzufragen. Die Funktion wird so viele Informationen über die Attributvariable liefern, wie es möglich ist. Wenn keine Informationen verfügbar sind, ist length gleich 0 und name ein leerer String. Dieser Fall könnte eintreten, wenn die Funktion nach einer fehlgeschlagenen Linkoperation aufgerufen wird.

Hinweise

Attributvariablen müssen nicht mit glBindAttribLocation an generische Attribut-Indexwerte gebunden werden, bevor glGetActiveAttribARB aufgerufen wird.


Fehlermeldungen

GL_INVALID_VALUE wird generiert, wenn program kein von OpenGL erzeugtes Handle ist.

GL_INVALID_OPERATION wird generiert, wenn program nicht vom Typ GL_PROGRAM_OBJECT ist.

GL_INVALID_VALUE wird generiert, wenn index größer oder gleich der aktuellen Anzahl der aktiven Attributvariablen ist.

GL_INVALID_OPERATION wird generiert wenn glGetActiveAttrib innerhalb eines glBegin-glEnd Blocks aufgerufen wird.


Siehe auch

glBindAttribLocation, glLinkProgram, glVertexAttrib, glVertexAttribPointer