Dữ liệu trong WebGL
Các chương trình shader có quyền truy cập vào ba kiểu kho dữ liệu, mỗi kiểu có một trường hợp sử dụng cụ thể. Mỗi kiểu biến có thể truy cập được bởi một hoặc cả hai loại chương trình shader (tùy theo kiểu kho dữ liệu) và có thể bởi mã JavaScript của trang, tùy vào kiểu biến cụ thể.
Các kiểu dữ liệu GLSL
Xem Data Types trong tài liệu GLSL.
Các biến GLSL
Có ba kiểu "biến" hoặc kho dữ liệu sẵn có trong GLSL, mỗi kiểu có mục đích và trường hợp sử dụng riêng: attributes, varyings và uniforms.
Attributes
Attributes là các biến GLSL chỉ có sẵn cho vertex shader (dưới dạng biến) và mã JavaScript. Attributes thường được dùng để lưu thông tin màu sắc, tọa độ texture và bất kỳ dữ liệu nào khác đã tính toán hoặc truy xuất cần được chia sẻ giữa mã JavaScript và vertex shader.
// init colors
const vertexColors = [
vec4(0.0, 0.0, 0.0, 1.0), // black
vec4(1.0, 0.0, 0.0, 1.0), // red
vec4(1.0, 1.0, 0.0, 1.0), // yellow
vec4(0.0, 1.0, 0.0, 1.0), // green
vec4(0.0, 0.0, 0.0, 1.0), // black
vec4(1.0, 0.0, 0.0, 1.0), // red
vec4(1.0, 1.0, 0.0, 1.0), // yellow
vec4(0.0, 1.0, 0.0, 1.0), // green
];
const cBuffer = gl.createBuffer();
// continued
// create buffer to store colors and reference it to "vColor" which is in GLSL
gl.bindBuffer(gl.ARRAY_BUFFER, cBuffer);
gl.bufferData(gl.ARRAY_BUFFER, flatten(vertexColors), gl.STATIC_DRAW);
const vColor = gl.getAttribLocation(program, "vColor");
gl.vertexAttribPointer(vColor, 4, gl.FLOAT, false, 0, 0);
gl.enableVertexAttribArray(vColor);
attribute vec4 vColor;
void main()
{
fColor = vColor;
}
Varyings
Varyings là các biến được khai báo bởi vertex shader và dùng để truyền dữ liệu từ vertex shader sang fragment shader. Cách này thường được dùng để chia sẻ vector pháp tuyến của một đỉnh sau khi nó đã được vertex shader tính toán.
<<how to use>>
Uniforms
Uniforms được thiết lập bởi mã JavaScript và có sẵn cho cả vertex shader lẫn fragment shader. Chúng được dùng để cung cấp các giá trị sẽ giống nhau cho mọi thứ được vẽ trong khung hình, chẳng hạn như vị trí và cường độ chiếu sáng, thông tin biến đổi toàn cục và phối cảnh, v.v.
<<add details>>
Buffers
<<add information>>
Textures
<<add information>>