let ctx = canvas.getContext('webgl')
if (!ctx) {
wx.showToast({
title: "无法初始化WebGL,你的浏览器、操作系统或硬件等可能不支持WebGL。",
icon: 'success',
duration: 2000
})
}
export default class Main3d {
constructor() {
this.restart()
}
restart() {
ctx.viewport(0, 0, ctx.canvas.width, ctx.canvas.height);
ctx.clearColor(0.0, 0.0, 0.0, 1.0);
ctx.clear(ctx.COLOR_BUFFER_BIT);
this.draw1Point()
}
draw1Point() {
var VSHADER_SOURCE =
"void main() {" +
"gl_Position = vec4(0.0, 0.0, 0.0, 1.0); " +
"gl_PointSize = 10.0; " +
"} ";
var FSHADER_SOURCE =
"void main() {" +
"gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);" +
"}";
var vertShader = ctx.createShader(ctx.VERTEX_SHADER);
ctx.shaderSource(vertShader, VSHADER_SOURCE);
ctx.compileShader(vertShader);
var fragShader = ctx.createShader(ctx.FRAGMENT_SHADER);
ctx.shaderSource(fragShader, FSHADER_SOURCE);
ctx.compileShader(fragShader);
var shaderProgram = ctx.createProgram();
ctx.attachShader(shaderProgram, vertShader);
ctx.attachShader(shaderProgram, fragShader);
ctx.linkProgram(shaderProgram);
ctx.useProgram(shaderProgram);
ctx.drawArrays(ctx.POINTS, 0, 1);
}
}
参考下此贴回复: https://developers.weixin.qq.com/community/develop/doc/000a2a62450c20e50aba8a15a56400
///。。。略,我使用loop的方式 是不行的
.......
ctx.linkProgram(shaderProgram);
ctx.useProgram(shaderProgram);
this.bindLoop = this.loop.bind(this)
this.loop()
}
loop(){
//绘制一个点
ctx.drawArrays(ctx.POINTS, 0, 1);
window.requestAnimationFrame(this.bindLoop);
}
对比一下,帖子楼主的代码和回答的代码~