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: Diese Funktion ist in Web Workers verfügbar.

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

js
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 von getAttribLocation() 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 von WebGLRenderingContext.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.

js
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

Siehe auch