package { import flash.display.Sprite; import flash.display.Bitmap; import flash.display.BitmapData; import flash.events.Event; import flash.utils.getTimer; import flash.text.TextField; import flash.utils.ByteArray; import flash.geom.Rectangle; public class BufferTest3 extends Sprite { public static const BUFFER_WIDTH:int = 800; public static const BUFFER_HEIGHT:int = 600; private var outputBitmapData:BitmapData; private var outputBitmap:Bitmap; private var t:Number; private var dt:Number = .01; private var frameTimeTxt:TextField; private var buffer:ByteArray; public function BufferTest3() { outputBitmapData = new BitmapData(BUFFER_WIDTH, BUFFER_HEIGHT, true); outputBitmap = new Bitmap(outputBitmapData); addChild(outputBitmap); var rect:Rectangle = new Rectangle(0, 0, BUFFER_WIDTH, BUFFER_HEIGHT); buffer = outputBitmapData.getPixels(rect); frameTimeTxt = new TextField(); frameTimeTxt.x = 8; frameTimeTxt.y = 8; frameTimeTxt.textColor = 0xFFFFFF; addChild(frameTimeTxt); t = 0; addEventListener(Event.ENTER_FRAME, update, false, 0, true); } public function update(e:*) { var timer:Number = getTimer(); t += dt; var x:int; var y:int; var r:int; var g:int; var b:int; buffer.position = 0; var offset:int = 0; for(y = 0; y < BUFFER_HEIGHT; ++y) { for(x = 0; x < BUFFER_WIDTH; ++x) { r = (t*100 + 255 * x / BUFFER_WIDTH)%255; g = 180; b = 180; //++offset; //buffer[offset++] = r; //buffer[offset++] = g; //buffer[offset++] = b; // very slow buffer.writeByte(255); buffer.writeByte(r); buffer.writeByte(g); buffer.writeByte(b); //buffer.writeUnsignedInt( (255<<24) + (r<<16) + (g<<8) + b ); //buffer.writeInt( (255<<24) + (r<<16) + (g<<8) + b ); } } var rect:Rectangle = new Rectangle(0,0,BUFFER_WIDTH,BUFFER_HEIGHT); buffer.position = 0; outputBitmapData.lock(); outputBitmapData.setPixels(rect, buffer); outputBitmapData.unlock(); var fps:Number = 1.0/((getTimer() - timer) / 1000.0); frameTimeTxt.text = "fps: " + int(fps); } } }