0.2.0 • Published 6 years ago
@shed/gl v0.2.0
@shed/gl
:hammer: WebGL 的包装与抽象,用以简化 WebGL API 使用
安装
npm install @shed/gl或使用 yarn
yarn add @shed/gl用法
import { Context, Color } from '@shed/gl';
let canvas = document.getElementById('myCanvas');
let gl = canvas.getContext('webgl');
if (gl) {
    // 用 Context 包装原始的 WebGLRenderingContext 对象后
    // 就可以调用Context上的方法了
    let ctx = new Context(gl);
    // 随机背景色
    ctx.clearColor = Color.random();
    ctx.clear();
} else {
    console.log('no webgl support');
}API
Context
有待完善
Attributes and Uniforms
Uniforms 和 Attributes 都是输入到 Shader 中的数据。
- Uniforms 在所有顶点中都相同
- Attributes 通常在每个顶点中都不同
由于 Uniforms 在所有顶点上都相同,所以应该直接设置在Program上
program.uXXX(...)Attributes 则应该设置在 VertexBuffer 上,让其每个顶点都不同
Program
Vertex Shader
let vs = `
attribute vec3 aVertexPosition;
void main(void) {
    gl_Position = vec4(aVertexPosition, 1.0); 
    gl_PointSize = 4.0;
}`;Fragment Shader
let fs = `
precision highp float;
void main(void) {
    gl_FragColor = vec4(0.2,0.5,0.5, 1.0);
}`;创建一个 Program 并绑定到当前上下文
program = new Program(ctx, vs, fs).bind();有待完善
VertexBuffer
向显存中上传 Buffer 是非常慢的,所以最好是一次上传一个大的buffer,而不应该上传很多小 buffer。
多个buffer
buffer1 -> | x , y |
buffer2 -> | size |
buffer3 -> | r , g , b|不如一次上传
| x , y , size , r , g , b |这种叫做 Interleaved Buffer, 在 VertexBuffer 类中很容易实现上述优化
有待完善
IndexBuffer
有待完善
Texture
有待完善
Color
有待完善