Webgl 从ImageElement加载获得未来

Webgl 从ImageElement加载获得未来,webgl,dart,dart-async,Webgl,Dart,Dart Async,这是来自 我的WebGL/Dart程序需要在初始化时创建大量opengl数据。它都是异步加载的,并在加载数据时使用futures来处理数据,并知道何时加载了所有必需的数据 但我在加载纹理时遇到了问题。我有这个密码- ImageElement img=新的ImageElement(); img.onLoad.listen((e){ baseTexture=gl.createTexture(); gl.bindTexture(纹理2D,基本纹理); gl.texImage2DImage(纹理2D,0

这是来自

我的WebGL/Dart程序需要在初始化时创建大量opengl数据。它都是异步加载的,并在加载数据时使用futures来处理数据,并知道何时加载了所有必需的数据

但我在加载纹理时遇到了问题。我有这个密码-

ImageElement img=新的ImageElement();
img.onLoad.listen((e){
baseTexture=gl.createTexture();
gl.bindTexture(纹理2D,基本纹理);
gl.texImage2DImage(纹理2D,0,RGBA,RGBA,无符号字节,img);
gl.texParameteri(纹理2D,纹理最小过滤器,线性);
gl.texParameteri(纹理2D,纹理MAG滤波器,线性);
});
img.src=“base.png”;
这个很好用。它加载图像,并在图像到达时从中生成纹理。 然而,我需要我的主程序知道我的所有纹理何时到达。基于上一个问题,我应该为每个人使用未来,并使用未来。等待,等待他们都准备好

然而,如上所述加载图像并不使用未来,它使用了StreamSubscription,因此我无法从该函数中获得可等待的未来

我怎样才能得到一个未来的对象,让我知道我的纹理何时被创建? 我可以创建自己的未来对象并在回调中“发送”它吗?如果我能做到这一点,从文档中我一点也不清楚我是如何做到的。

你确实可以“发出信号”说未来是手动完成的

Future costlyQuery(){
var completer=new completer();
database.query(“从巨表中选择*”,(结果){
//完成时
完成者。完成(结果);
});
//这基本上是立即返回的,
//在查询完成之前
返回completer.future;
}
未来将在
completer.complete(结果)时完成被执行


从这里:

您可以使用Stream类的属性
Future first

“完成者”课,我错过了。我试图直接创造一个未来。非常感谢。
ImageElement img = new ImageElement();
Future future = img.onLoad.first.then((e) {
   ...
});
img.src = "base.png";