tsp
This commit is contained in:
46
projects/tsp/tsp-gl.js
Normal file
46
projects/tsp/tsp-gl.js
Normal file
@@ -0,0 +1,46 @@
|
||||
// tsp-gl.js
|
||||
import { updateLines } from "./utils.js";
|
||||
|
||||
export function draw(gl, points, program, lineProgram, positionBuffer, lineBuffer, pointOrder, aspectRatio) {
|
||||
gl.clear(gl.COLOR_BUFFER_BIT);
|
||||
|
||||
// Draw Circles
|
||||
updateCircleUniforms(gl, points, program, positionBuffer);
|
||||
|
||||
// Draw Lines
|
||||
const lineVertices = updateLines(points, pointOrder);
|
||||
drawLines(gl, lineProgram, lineBuffer, lineVertices);
|
||||
}
|
||||
|
||||
function updateCircleUniforms(gl, points, program, positionBuffer) {
|
||||
const centerArray = new Float32Array(points.length * 2);
|
||||
|
||||
points.forEach((point, i) => {
|
||||
centerArray[i * 2] = point.cx;
|
||||
centerArray[i * 2 + 1] = point.cy;
|
||||
});
|
||||
|
||||
gl.useProgram(program);
|
||||
|
||||
gl.uniform2fv(gl.getUniformLocation(program, "u_centers"), centerArray);
|
||||
|
||||
gl.bindBuffer(gl.ARRAY_BUFFER, positionBuffer);
|
||||
const positionAttribLoc = gl.getAttribLocation(program, "a_position");
|
||||
gl.enableVertexAttribArray(positionAttribLoc);
|
||||
gl.vertexAttribPointer(positionAttribLoc, 2, gl.FLOAT, false, 0, 0);
|
||||
|
||||
gl.drawArrays(gl.TRIANGLE_STRIP, 0, 3);
|
||||
}
|
||||
|
||||
function drawLines(gl, program, buffer, lineVertices) {
|
||||
gl.useProgram(program);
|
||||
|
||||
gl.bindBuffer(gl.ARRAY_BUFFER, buffer);
|
||||
gl.bufferData(gl.ARRAY_BUFFER, lineVertices, gl.DYNAMIC_DRAW);
|
||||
|
||||
const positionAttribLoc = gl.getAttribLocation(program, "a_position");
|
||||
gl.enableVertexAttribArray(positionAttribLoc);
|
||||
gl.vertexAttribPointer(positionAttribLoc, 2, gl.FLOAT, false, 0, 0);
|
||||
|
||||
gl.drawArrays(gl.LINES, 0, lineVertices.length / 2);
|
||||
}
|
||||
Reference in New Issue
Block a user