var vs = `
attribute vec4 position;
varying vec2 v_texcoord;
uniform mat4 u_matrix;
void main() {
gl_Position = u_matrix * position;
v_texcoord = position.xy * .5 + .5;
}
`;
var fs = `
precision mediump float;
varying vec2 v_texcoord;
uniform sampler2D u_tex;
void main() {
gl_FragColor = texture2D(u_tex, v_texcoord);
}
`;
var gl = document.querySelector("canvas").getContext("webgl", {
premultipliedAlpha: false,
});
var m4 = twgl.m4;
var programInfo = twgl.createProgramInfo(gl, [vs, fs]);
var bufferInfo = twgl.primitives.createXYQuadBufferInfo(gl);
var tex = twgl.createTexture(gl, {
src: "https://i.imgur.com/iFom4eT.png",
crossOrigin: "",
}, render);
function render() {
gl.enable(gl.BLEND);
gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);
gl.useProgram(programInfo.program);
twgl.setBuffersAndAttributes(gl, programInfo, bufferInfo);
twgl.setUniforms(programInfo, {
u_tex: tex,
u_matrix: m4.identity(),
});
twgl.drawBufferInfo(gl, bufferInfo);
twgl.setUniforms(programInfo, {
u_tex: tex,
u_matrix: m4.scaling([0.5, 0.5, 1]),
});
twgl.drawBufferInfo(gl, bufferInfo);
}
canvas {
background-color: purple;
background-image: linear-gradient(45deg, rgba(255, 255, 255, 1) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 1) 50%, rgba(255, 255, 255, 1) 75%, transparent 75%, transparent);
background-size: 50px 50px;
}
<script src="https://twgljs.org/dist/4.x/twgl-full.min.js"></script>
<canvas></canvas>
{premultipliedAlpha: false}
正是我想要的!一个问题得到了多个答案! - jameshfisheralpha: false
时,帧速率会下降约35%,所以我只能通过将画布的background-color: #000
设置为避免这种情况并获得结果。(Chrome 90) - Reahreic