<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="horizontal" width="800" height="600"
creationComplete="init()" backgroundColor="0x000000" viewSourceURL="srcview/index.html">
<mx:Script>
<![CDATA[
import com.derschmale.pixelBender.PBBenchmarker;
private static const SHADERJOB_MODE : String = "shaderJobMode";
private static const APPLY_FILTER_MODE : String = "applyFilterMode";
private static const WIDTH : int = 500;
private static const HEIGHT : int = 500;
private static const LEN : int = WIDTH*HEIGHT*4;
private var _lookUp : Array;
[Embed(source="/../pbj/RandomKernel.pbj", mimeType="application/octet-stream")]
private var RandomKernel : Class;
[Embed(source="/../pbj/AlphaTestKernel.pbj", mimeType="application/octet-stream")]
private var AlphaTestKernel : Class;
private var _bitmapData1 : BitmapData;
private var _bitmapData2 : BitmapData;
private var _vector1 : Vector.<Number>;
private var _vector2 : Vector.<Number>;
private var _byteArray1 : ByteArray;
private var _byteArray2 : ByteArray;
private function init() : void
{
initData();
_lookUp = [];
_lookUp["randomBMP4"] = new PBBenchmarker(RandomKernel, _bitmapData1, _bitmapData2);
_lookUp["randomVec4"] = new PBBenchmarker(RandomKernel, _vector1, _vector2, WIDTH, HEIGHT);
_lookUp["randomBA4"] = new PBBenchmarker(RandomKernel, _byteArray1, _byteArray2, WIDTH, HEIGHT);
_lookUp["alphaBMP4"] = new PBBenchmarker(AlphaTestKernel, _bitmapData1, _bitmapData2);
_lookUp["alphaVec4"] = new PBBenchmarker(AlphaTestKernel, _vector1, _vector2, WIDTH, HEIGHT);
_lookUp["alphaBA4"] = new PBBenchmarker(AlphaTestKernel, _byteArray1, _byteArray2, WIDTH, HEIGHT);
_lookUp["randomBMPself"] = new PBBenchmarker(AlphaTestKernel, _bitmapData1, _bitmapData1);
_lookUp["randomVecself"] = new PBBenchmarker(AlphaTestKernel, _vector1, _vector1, WIDTH, HEIGHT);
_lookUp["randomBAself"] = new PBBenchmarker(AlphaTestKernel, _byteArray1, _byteArray1, WIDTH, HEIGHT);
}
private function initData() : void
{
var b : int = 0;
_bitmapData1 = new BitmapData(WIDTH, HEIGHT, true, 0x00000000);
_bitmapData2 = new BitmapData(WIDTH, HEIGHT, true, 0x00000000);
_vector1 = new Vector.<Number>(LEN);
_vector2 = new Vector.<Number>(LEN);
_byteArray1 = new ByteArray();
_byteArray2 = new ByteArray();
_byteArray1.endian = _byteArray2.endian = Endian.LITTLE_ENDIAN;
for (var i : int = 0; i < LEN; ++i) {
if (i % 3 == 0) {
++b;
_bitmapData1.setPixel32(b % WIDTH, Math.floor(b / WIDTH), (int(genRnd()*0xff) << 24) + 0xffffff);
}
_vector1[i] = genRnd();
_byteArray1.writeFloat(genRnd());
}
}
private function genRnd() : Number
{
var r : Number = Math.random();
return r < 0.5? 0.0 : r;
}
private function run(event : Event, id : String, mode : String = SHADERJOB_MODE) : void
{
var benchmark : PBBenchmarker = _lookUp[id];
var result : int = (mode == SHADERJOB_MODE)? benchmark.testShaderJob() : benchmark.testFilter();
traceBox.text += event.target.label + ": "+result+"ms\n";
}
]]>
</mx:Script>
<mx:VBox width="300" height="100%">
<mx:Button width="100%" label="ShaderJob on BitmapData" click="run(event, 'randomBMP4')" />
<mx:Button width="100%" label="ApplyFilter on BitmapData" click="run(event, 'randomBMP4', APPLY_FILTER_MODE)" />
<mx:Button width="100%" label="ShaderJob on Vector" click="run(event, 'randomVec4')" />
<mx:Button width="100%" label="ShaderJob on ByteArray" click="run(event, 'randomBA4')" />
<mx:Button width="100%" label="SJ on BitmapData with alpha test" click="run(event, 'alphaBMP4')" />
<mx:Button width="100%" label="AF on BitmapData with alpha test" click="run(event, 'alphaBMP4', APPLY_FILTER_MODE)" />
<mx:Button width="100%" label="SJ on Vector with alpha test" click="run(event, 'alphaVec4')" />
<mx:Button width="100%" label="SJ on ByteArray with alpha test" click="run(event, 'alphaBA4')" />
<mx:Button width="100%" label="SJ BitmapData to self" click="run(event, 'randomBMPself', APPLY_FILTER_MODE)" />
<mx:Button width="100%" label="SJ Vector to self" click="run(event, 'randomVecself')" />
<mx:Button width="100%" label="SJ ByteArray to self" click="run(event, 'randomBAself')" />
</mx:VBox>
<mx:TextArea id="traceBox" width="100%" height="100%" />
</mx:Application>