const rawgl = document.querySelector("canvas").getContext("webgl");
const gl = wrapContext(rawgl);
gl.viewport(0, 0, gl.canvas.width, gl.canvas.height);
gl.enable(gl.SCISSOR_TEST);
gl.scissor(40, 50, 200, 60);
gl.clearColor(0,1,1,1);
gl.clear(gl.COLOR_BUFFER_BIT);
gl.scissor(60, 40, 70, 90);
gl.clearColor(1,0,1,1);
gl.clear(gl.COLOR_BUFFER_BIT);
function wrapContext(gl) {
const wrapper = {};
for (let name in gl) {
var prop = gl[name];
if (typeof(prop) === 'function') {
wrapper[name] = wrapFunction(gl, name, prop);
} else {
wrapProperty(wrapper, gl, name);
}
}
return wrapper;
}
function wrapFunction(gl, name, origFn) {
// return a function that logs the call and then calls the original func
return function(...args) {
log(`gl.${name}(${[...args].join(", ")});`);
origFn.apply(gl, arguments);
};
}
function wrapProperty(wrapper, gl, name) {
// make a getter because these values are dynamic
Object.defineProperty(wrapper, name, {
enumerable: true,
get: function() {
return gl[name];
},
});
}
function log(...args) {
const elem = document.createElement("pre");
elem.textContent = [...args].join(" ");
document.body.appendChild(elem);
}
canvas { border: 1px solid black; }
pre { margin: 0; }
<canvas></canvas>
どのようにストリームキャプチャを試しましたか?それは与えられた[例のリンク](http://www.laplace2be.com/lab/PixelParticles/)で私のためにうまくいきます。これをコンソールにコピーします: 'let s = mycanvas.captureStream()、r = new MediaRecorder(s) chunks = []; r.ondataavailable = e => chunks.push(e.data); r.onstop = e => { window.open(URL.createObjectURL(new Blob(chunks))); }; r.start(); setTimeout(_ => r.stop()、3000); ' – Kaiido
@Kaiidoはあなたのコメントに感謝します。私はそれを行いましたが、このブロブは実際に私の場合は実際に最適な解決策ではないwebmビデオです。サイズは大きくなります。これを答えに加えてください。 – ProllyGeek