4

我曾经像你一样在 AS3 中编写地图,但后来我在膝盖上拿了一个 Pixel Bender。从那时起,我一直在使用 Pixel Bender 对数组进行并行计算。可以使用 Stage3D 吗?

使用 Pixel Bender 进行计算的示例:

http://wonderfl.net/c/eFp0/

我的目标是获取 的向量[x1, y1, x2, y,2 , . . ., xn, yn]并返回 的向量[f(x1), f(y1), f(x2), f(y2), . . . ,f(xn), f(yn)]。更像f(x1, y1).x , f(x1,y1).y。我相信你明白了一般的想法。

我们通常所说的地图。这是一个彻底的解释。

http://en.wikipedia.org/wiki/Map_%28higher-order_function%29

我注意到使用 Pixel Bender 可以将速度提高 10 倍。有没有办法用 Stage3D 做同样的事情。

4

1 回答 1

2

与 c++ 等其他语言不同,我不知道除了Program3D Shaders 和 Adob​​e Graphics Assembly Language之外还有一种将汇编指令引导到 GPU 的方法。

可以使用 Pixel Bender 3D 离线工具创建程序字节码。它也可以动态创建。AGALMiniAssembler 类是将 AGAL 汇编语言程序编译为 AGAL 字节码的实用程序类。该类不是运行时的一部分。当您上传着色器程序时,字节码会被编译成当前设备的原生着色器语言(例如,OpenGL 或 Direct3D)。运行时在上传时验证字节码。

每当调用 Context3D drawTriangles() 方法时,程序就会运行。顶点程序对要绘制的三角形列表中的每个顶点执行一次。片段程序对三角形表面上的每个像素执行一次。

没有接近您使用 Pixel Bender 获得的性能,应该注意的是,您可以利用 ActionScript Workers来并行化您的仿函数。

一个 Worker 对象代表一个worker,它是 Flash 运行时的一个虚拟实例。每个 Worker 实例控制并提供对单个 Worker 的生命周期和共享数据的访问。

这种同时执行多组代码指令的能力称为并发

随着 Adob​​e Premium 功能、Alchemy / FlasCC、XC API、Pixel Bender 和 ActionScript Next 的推出,对于快速发展的 Flash 平台来说,这是一个激动人心的时刻。

于 2012-10-26T02:49:31.457 回答