root/as3/Astro/ShaderFilter/CalcShader/src/CalcShader.as

リビジョン 429, 3.4 kB (コミッタ: muta, コミット時期: 8 ヶ月 前)

--

  • svn:executable 属性の設定値: *
Line 
1 package
2 {
3     import flash.display.Bitmap;
4     import flash.display.BitmapData;
5     import flash.display.Shader;
6     import flash.display.Sprite;
7     import flash.filters.ShaderFilter;
8     import flash.geom.Point;
9     import flash.utils.ByteArray;
10     import net.unbland.debug.TimeMeasure;
11     import net.unbland.debug.Tracer;
12    
13     [SWF(width=1024, height=1024, backgroundColor=0xFFFFFF, frameRate=30)]
14     public class CalcShader extends Sprite
15     {
16         private static const SIZE:uint = 1024;
17        
18         [Embed(source="shaders/colorize.pbj", mimeType="application/octet-stream")]
19         private var shaderData:Class;
20        
21         public function CalcShader():void
22         {
23             // 下準備 ------------------------------
24            
25             var array:Array = [];
26             var vector:Vector.<uint> = new Vector.<uint>();
27            
28             for (var h:int = 0; h < SIZE; h++)
29             {
30                 for (var w:int = 0; w < SIZE; w++)
31                 {
32                     array.push(0xFF000000);
33                     vector.push(0xFF000000);
34                 }
35             }
36            
37             var src:BitmapData = new BitmapData(SIZE, SIZE);
38             var dst:BitmapData = new BitmapData(SIZE, SIZE);
39            
40             var point:Point = new Point();
41             var shader:Shader = new Shader(ByteArray(new shaderData()));
42             var shaderFilter:ShaderFilter = new ShaderFilter(shader);
43            
44             var i:int;
45             var l:int;
46            
47             // 計測開始 ------------------------------
48            
49             // Shader + Vector の計測
50             Tracer.debug("Shader + Vector の計測を開始します。");
51             TimeMeasure.begin();
52            
53             src.setVector(src.rect, vector);
54             shader.data.color.value = [1, 0, 0, 0];
55             dst.applyFilter(src, src.rect, point, shaderFilter);
56            
57             var ds:Vector.<uint> = dst.getVector(dst.rect);
58            
59             TimeMeasure.endAndTrace();
60            
61             // Vector の計測
62             Tracer.debug("Vector の計測を開始します。");
63             TimeMeasure.begin();
64            
65             for (i = 0, l = vector.length; i < l; i++)
66             {
67                 vector[i] += 0x00FF0000;
68             }
69            
70             var dv:Vector.<uint> = Vector.<uint>(vector.concat());
71            
72             TimeMeasure.endAndTrace();
73            
74             // Array の計測
75             Tracer.debug("Array の計測を開始します。");
76             TimeMeasure.begin();
77            
78             for (i = 0, l = array.length; i < l; i++)
79             {
80                 array[i] += 0x00FF0000;
81             }
82            
83             var da:Array = array.concat();
84            
85             TimeMeasure.endAndTrace();
86            
87             // 最後にテスト結果の確認
88             l = SIZE * SIZE - 1;
89            
90             Tracer.debug(
91                 "最後にテストが正しいかの確認\n" +
92                 "0xFF000000 + 0x00FF0000 なので、結果は 0xFFFF0000 になる\n\n" +
93                 "Shader + Vector => 0x" + ds[l].toString(16).toUpperCase() + "\n" +
94                 "Vector => 0x" + dv[l].toString(16).toUpperCase() + "\n" +
95                 "Array => 0x" + da[l].toString(16).toUpperCase()
96             );
97            
98             addChild(new Bitmap(dst));
99         }
100     }
101 }
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。