エラーが発生します[.WebGLRenderingContext]RENDER WARNING: texture bound to texture unit 0 is not renderable. It maybe non-power-of-2 and have incompatible texture filtering or is not 'texture complete'
dartiumでWebアプリを実行するとき。コードの完全な書き直しを含め、この問題のトラブルシューティングを2日間試みましたが、問題を特定できません。
ただし、問題はこのコードにあると思います。
void main() {
...
var texture = gl.createTexture();
var image = new ImageElement();
image.onLoad.listen((e) {
gl.bindTexture(webGL.TEXTURE_2D, texture);
gl.texImage2DImage(webGL.TEXTURE_2D, 0, webGL.RGBA, webGL.RGBA,
webGL.UNSIGNED_BYTE, image);
gl.texParameteri(webGL.TEXTURE_2D, webGL.TEXTURE_MAG_FILTER, webGL.NEAREST);
gl.texParameteri(webGL.TEXTURE_2D, webGL.TEXTURE_MIN_FILTER, webGL.NEAREST);
gl.bindTexture(webGL.TEXTURE_2D, null);
});
image.src = "tex.png";
...
}
tex.pngは32x32です
問題が何であるかについてのアイデアはありますか?
私の質問のコードの直後に、テクスチャをバインドしてサンプラーのユニフォームを送りました。イメージがロードされる前に実行されたため、これは間違っていました。これを修正するために、テクスチャをバインドして要素を描画する呼び出しをonload関数に入れます。
image.onLoad.listen((e) {
gl.bindTexture(webGL.TEXTURE_2D, texture);
gl.texImage2DImage(webGL.TEXTURE_2D, 0, webGL.RGBA, webGL.RGBA,
webGL.UNSIGNED_BYTE, image);
gl.texParameteri(webGL.TEXTURE_2D, webGL.TEXTURE_MAG_FILTER, webGL.NEAREST);
gl.texParameteri(webGL.TEXTURE_2D, webGL.TEXTURE_MIN_FILTER, webGL.NEAREST);
gl.bindTexture(webGL.TEXTURE_2D, null);
gl.activeTexture(webGL.TEXTURE0);
gl.bindTexture(webGL.TEXTURE_2D, texture);
gl.uniform1i(gl.getUniformLocation(shader.program, "uSampler"), 0);
gl.drawElements(webGL.TRIANGLES, 6, webGL.UNSIGNED_SHORT, 0);
});
画像が読み込まれたことを確認します。
以前は、onloadコールバックを割り当ててから、次の一連のコマンド(テクスチャのバインドを含む)を実行していましたが、コンピューターは非常に高速であるため、既にテクスチャをバインドし、画像の読み込みが完了する前に描画しようとしました。