initial implementation of WebGL-based brush renderer
This commit is contained in:
parent
b4c3260f49
commit
bb55e23979
14 changed files with 385 additions and 247 deletions
45
static/webgl.js
Normal file
45
static/webgl.js
Normal file
|
@ -0,0 +1,45 @@
|
|||
function compileShader(gl, kind, source) {
|
||||
let shader = gl.createShader(kind);
|
||||
|
||||
gl.shaderSource(shader, source);
|
||||
gl.compileShader(shader);
|
||||
|
||||
if (!gl.getShaderParameter(shader, gl.COMPILE_STATUS)) {
|
||||
let error = new Error(`failed to compile shader: ${gl.getShaderInfoLog(shader)}`);
|
||||
gl.deleteShader(shader);
|
||||
throw error;
|
||||
} else {
|
||||
return shader;
|
||||
}
|
||||
}
|
||||
|
||||
export function compileProgram(gl, vertexSource, fragmentSource) {
|
||||
let vertexShader = compileShader(gl, gl.VERTEX_SHADER, vertexSource);
|
||||
let fragmentShader = compileShader(gl, gl.FRAGMENT_SHADER, fragmentSource);
|
||||
|
||||
let program = gl.createProgram();
|
||||
gl.attachShader(program, vertexShader);
|
||||
gl.attachShader(program, fragmentShader);
|
||||
gl.linkProgram(program);
|
||||
|
||||
gl.deleteShader(vertexShader);
|
||||
gl.deleteShader(fragmentShader);
|
||||
|
||||
if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
|
||||
let error = new Error(`failed to link program: ${gl.getProgramInfoLog(program)}`);
|
||||
gl.deleteProgram(program);
|
||||
throw error;
|
||||
} else {
|
||||
return program;
|
||||
}
|
||||
}
|
||||
|
||||
export function orthographicProjection(left, right, top, bottom, near, far) {
|
||||
// prettier-ignore
|
||||
return [
|
||||
2 / (right - left), 0, 0, -((right + left) / (right - left)),
|
||||
0, 2 / (top - bottom), 0, -((top + bottom) / (top - bottom)),
|
||||
0, 0, -2 / (far - near), -((far + near) / (far - near)),
|
||||
0, 0, 0, 1,
|
||||
];
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue