Dalam program WebGL yang saya tulis di ES6, saya memiliki kelas bernama Tekstur.
Pada awalnya, ia menggambar tekstur sebagai 1 piksel merah. Setelah gambar dimuat, saya ingin mengganti piksel merah dengan gambar.
Saya agak buntu karena saya tidak yakin pendekatan apa yang terbaik untuk ini karena saat ini terjadi kesalahan dan tidak berfungsi:
TypeError Tidak Tertangkap: Gagal menjalankan 'texImage2D' di 'WebGLRenderingContext': Tidak ditemukan fungsi yang cocok dengan tanda tangan yang diberikan.
Tebakan terbaik saya adalah ini terjadi karena JavaScript tidak sinkron, jadi setelah gambar dimuat, gl hilang, atau mungkin saya salah tentang hal ini.
Bantuan untuk memahami hal ini dan/atau solusinya akan sangat dihargai.
export default class Texture {
constructor(gl, src) {
// create texture then bind it
this.texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, this.texture);
// texture settings for the texture
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
// create it as a red pixel first so it can be quickly drawn then replaced with the actual image
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, new Uint8Array([255, 0, 0, 255]));
// active the texture
gl.activeTexture(gl.TEXTURE0);
// load the image
this.img = new Image();
this.img.src = src;
// replace the red pixel with the texture once it is loaded
this.img.onload = function() {
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this.img);
}
}
}
Saya sudah mencoba ini:
this.img.onload = function(gl) {
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, this.img);
}
Tapi itu menimbulkan kesalahan ini:
TypeError Tidak Tertangkap: t.texImage2D bukan fungsi