Asociación de atributos y objetos de búfer
Cada atributo del programa de sombreado de vértices apunta a un objeto de búfer de vértice. Después de crear los objetos de búfer de vértices, los programadores deben asociarlos con los atributos del programa de sombreado de vértices. Cada atributo apunta a un solo objeto de búfer de vértice del que extraen los valores de datos, y luego estos atributos se pasan al programa de sombreado.
Para asociar los objetos de búfer de vértices con los atributos del programa de sombreado de vértices, debe seguir los pasos que se indican a continuación:
- Obtener la ubicación del atributo
- Apunta el atributo a un objeto de búfer de vértice
- Habilita el atributo
Obtener la ubicación del atributo
WebGL proporciona un método llamado getAttribLocation()que devuelve la ubicación del atributo. Su sintaxis es la siguiente:
ulong getAttribLocation(Object program, string name)
Este método acepta el objeto de programa de sombreado de vértices y los valores de atributo del programa de sombreado de vértices.
El siguiente fragmento de código muestra cómo utilizar este método.
var coordinatesVar = gl.getAttribLocation(shader_program, "coordinates");
Aquí, shader_program es el objeto del programa de sombreado y coordinates es el atributo del programa de sombreado de vértices.
Apunta el atributo a un VBO
Para asignar el objeto de búfer a la variable de atributo, WebGL proporciona un método llamado vertexAttribPointer(). Aquí está la sintaxis de este método:
void vertexAttribPointer(location, int size, enum type, bool normalized, long stride, long offset)
Este método acepta seis parámetros y se analizan a continuación.
Location- Especifica la ubicación de almacenamiento de una variable de atributo. En esta opción, debe pasar el valor devuelto por elgetAttribLocation() método.
Size - Especifica el número de componentes por vértice en el objeto de búfer.
Type - Especifica el tipo de datos.
Normalized- Este es un valor booleano. Si es verdadero, los datos no flotantes se normalizan a [0, 1]; de lo contrario, se normaliza a [-1, 1].
Stride - Especifica el número de bytes entre diferentes elementos de datos de vértice, o cero para el paso predeterminado.
Offset- Especifica el desplazamiento (en bytes) en un objeto de búfer para indicar desde qué byte se almacenan los datos del vértice. Si los datos se almacenan desde el principio, el desplazamiento es 0.
El siguiente fragmento muestra cómo utilizar vertexAttribPointer() en un programa -
gl.vertexAttribPointer(coordinatesVar, 3, gl.FLOAT, false, 0, 0);
Habilitar el atributo
Active el atributo de sombreador de vértices para acceder al objeto de búfer en un sombreador de vértices. Para esta operación, WebGL proporcionaenableVertexAttribArray()método. Este método acepta la ubicación del atributo como parámetro. A continuación se explica cómo utilizar este método en un programa:
gl.enableVertexAttribArray(coordinatesVar);