WebGLRenderingContext: Methode enableVertexAttribArray()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Hinweis: Dieses Feature ist verfügbar in Web Workers.
Die WebGLRenderingContext
-Methode enableVertexAttribArray()
, die Teil der WebGL-API ist, aktiviert das generische Vertex-Attribut-Array an dem angegebenen Index in der Liste der Attribut-Arrays.
Hinweis: Sie können das Attribut-Array deaktivieren, indem Sie disableVertexAttribArray()
aufrufen.
In WebGL werden Werte, die einem bestimmten Vertex zugeordnet sind, in Attributen gespeichert. Diese sind nur im JavaScript-Code und im Vertex-Shader verfügbar. Attribute werden durch eine Indexnummer in der vom GPU verwalteten Liste der Attribute referenziert. Einige Vertex-Attribut-Indizes können je nach Plattform und/oder GPU vordefinierte Zwecke haben. Andere werden von der WebGL-Schicht zugewiesen, wenn Sie die Attribute erstellen.
Da Attribute jedoch nicht verwendet werden können, solange sie nicht aktiviert sind und standardmäßig deaktiviert sind, müssen Sie enableVertexAttribArray()
aufrufen, um einzelne Attribute zu aktivieren, damit sie verwendet werden können. Sobald dies geschehen ist, können andere Methoden verwendet werden, um auf das Attribut zuzugreifen, einschließlich vertexAttribPointer()
, vertexAttrib*()
und getVertexAttrib()
.
Syntax
enableVertexAttribArray(index)
Parameter
index
-
Ein
GLuint
, der die Indexnummer angibt, die das zu aktivierende Vertex-Attribut eindeutig identifiziert. Wenn Sie den Namen des Attributs kennen, aber nicht dessen Index, können Sie den Index durch Aufrufen vongetAttribLocation()
erhalten.
Rückgabewert
Keiner (undefined
).
Fehler
Um nach dem Aufruf von enableVertexAttribArray()
auf Fehler zu prüfen, rufen Sie getError()
auf.
WebGLRenderingContext.INVALID_VALUE
-
Der angegebene
index
ist ungültig; das heißt, er ist größer oder gleich der maximal zulässigen Anzahl von Einträgen in der Vertex-Attributliste des Kontexts, wie durch den Wert vonWebGLRenderingContext.MAX_VERTEX_ATTRIBS
angegeben.
Beispiele
Dieser Codeausschnitt, entnommen aus dem vollständigen Beispiel Ein einfaches 2D-WebGL-Animationsbeispiel, zeigt die Verwendung von enableVertexAttribArray()
, um das Attribut zu aktivieren, das durch die WebGL-Schicht verwendet wird, um einzelne Vertices aus dem Vertex-Puffer in die Vertex-Shader-Funktion zu übergeben.
gl.bindBuffer(gl.ARRAY_BUFFER, vertexBuffer);
aVertexPosition = gl.getAttribLocation(shaderProgram, "aVertexPosition");
gl.enableVertexAttribArray(aVertexPosition);
gl.vertexAttribPointer(
aVertexPosition,
vertexNumComponents,
gl.FLOAT,
false,
0,
0,
);
gl.drawArrays(gl.TRIANGLES, 0, vertexCount);
Hinweis: Dieser Codeausschnitt stammt aus der Funktion animateScene()
im "Ein einfaches 2D-WebGL-Animationsbeispiel." Sehen Sie sich diesen Artikel an, um das vollständige Beispiel zu sehen und die resultierende Animation in Aktion zu sehen.
Dieser Code legt den Puffer von Vertices fest, der verwendet wird, um die Dreiecke der Form zu zeichnen, indem bindBuffer()
aufgerufen wird. Dann wird der Index des Vertex-Positions-Attributs aus dem Shader-Programm durch Aufrufen von getAttribLocation()
erhalten.
Mit dem jetzt in aVertexPosition
verfügbaren Index des Vertex-Positions-Attributs rufen wir enableVertexAttribArray()
auf, um das Positionsattribut zu aktivieren, damit es vom Shader-Programm (insbesondere vom Vertex-Shader) verwendet werden kann.
Dann wird der Vertex-Puffer an das aVertexPosition
-Attribut gebunden, indem vertexAttribPointer()
aufgerufen wird. Dieser Schritt ist nicht offensichtlich, da diese Bindung fast ein Nebeneffekt ist. Aber als Ergebnis bezieht aVertexPosition
jetzt Daten aus dem Vertex-Puffer.
Mit der Assoziation zwischen dem Vertex-Puffer für unsere Form und dem aVertexPosition
-Attribut, das verwendet wird, um Vertices eins nach dem anderen in den Vertex-Shader zu liefern, sind wir bereit, die Form durch Aufrufen von drawArrays()
zu zeichnen.
Spezifikationen
Specification |
---|
WebGL Specification # 5.14.10 |
Browser-Kompatibilität
BCD tables only load in the browser