1

我有一个程序可以在 320x240 流运行时检测球,但是如果我流更大的分辨率,它会变得太慢。我假设如果我可以使用 GPU 来计算每个像素(以及它们的相邻帧和相邻像素),它会更快。任何人都知道我是否可以使用 AGAL 从 GPU 取回数据?

在排序中,我有下面的循环,通过帧的每个像素,我想在 GPU 上计算最多,以获得更好的性能。

for(var i:int=cv.length-1; i>1;i--){
                if( (110*255) < (cv[i] & 0x0000FF00) && (cv[i] & 0x0000FF00) < (150*255)){ //i zöld
                    if(  (cv[i+2] & 0x0000FF00) > (150*255) ) { //i+2 világos
                        if(floodhere(cv, i+2)){ //méret nagy
                            prevDiff[i]=0xffffffff; //fehér
                            close.push(i);
                        }
                        else prevDiff[i]=0xffff0000 //méret kicsi -> piros
                    } else {
                        prevDiff[i]=0xff000055 //kék
                    }
                } else {
                    prevDiff[i]=0xff000000 //fekete
                }
            }
4

3 回答 3

2

您可以使用 AGAL 在 GPU 上进行快速计算,但请注意限制。它大致是这样的:
您需要将数据作为纹理(an*m 矩阵)上传,一个数据点是一个 3x8 位值。将任何类型的大数据上传到 GPU 都很慢,因此您不应该在每一帧都这样做。将纹理恢复到 Actionscript 也很慢。
您可以将数据上传到 GPU 到其全局变量内存(但数量有限)

GPU 将在该矩阵的每个元素上并行运行您的 AGAL 程序,并且输出也将是一个 n*m 矩阵。
每个程序实例都可以访问三件事:它的坐标、全局变量和上传的矩阵。您的程序的输出将被写入到相同位置的输出矩阵。如果您编写多个程序,可以快速访问此输出矩阵,但将其恢复到正常内存(用于操作脚本操作)很慢。

与 Actionscript 相比,AGAL 程序非常有限:
- 最大。256 条指令。
- 没有循环、函数、类。您只有数学运算符和条件(“if-else”)。
- 无法写入全局内存

于 2013-05-17T00:00:50.037 回答
1

您也许可以使用 PixelBender。它还可以在单​​独的线程中工作,并利用多核 CPU,因此比 actionscript 快得多。

有关示例,请参见http://www.flashmagazine.com/tutorials/detail/using_pixel_bender_to_calculate_information/

于 2013-01-02T03:40:22.067 回答
0

没有办法取回数据。你只能恢复颜色。此外,要在动作脚本中获取像素颜色,您应该将数据从纹理复制到位图数据,这非常慢。

于 2013-01-01T12:32:28.903 回答