Il modo più semplice per risolvere il problema che è quello di fare una texture 1x1 al momento della creazione.
var tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE,
new Uint8Array([255, 0, 0, 255])); // red
Quindi, quando l'immagine viene caricata, è possibile sostituire la trama da 1x1 pixel con l'immagine. Nessun flag necessario e la tua scena verrà renderizzata con il colore che hai scelto fino al caricamento dell'immagine.
var img = new Image();
img.src = "http://someplace/someimage.jpg";
img.onload = function() {
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, img);
// then either generate mips if the image uses power-of-2 dimensions or
// set the filtering correctly for non-power-of-2 images.
setupTextureFilteringAndMips(img.width, img.height);
}
Solo per il gusto di salvare la gente la fatica di correre nel prossimo problema che stanno molto probabilmente andando a correre in, WebGL richiede MIPS o Richiede filtraggio che non necessita di MIPS. Per di più richiede trame con dimensioni che hanno una potenza di 2 (cioè 1, 2, 4, 8, ..., 256, 512, ecc.) Per usare i mips. Quindi, quando si carica un'immagine, è molto probabile che si voglia impostare il filtro per gestirlo correttamente.
Grazie per avermelo chiesto, ho vissuto per un po 'con questi messaggi di console nei miei esperimenti. :-) –