<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Ali Nakipoglu</title>
	<atom:link href="http://blog.alinakipoglu.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.alinakipoglu.com</link>
	<description>Ali Nakipoglu Blog</description>
	<lastBuildDate>Mon, 23 Aug 2010 18:15:42 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Benchmarks of some BitmapData methods</title>
		<link>http://blog.alinakipoglu.com/2010/08/benchmark-results-for-blitting-methods-in-bitmapdata/</link>
		<comments>http://blog.alinakipoglu.com/2010/08/benchmark-results-for-blitting-methods-in-bitmapdata/#comments</comments>
		<pubDate>Sun, 22 Aug 2010 10:59:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Actionscript]]></category>

		<guid isPermaLink="false">http://blog.alinakipoglu.com/?p=233</guid>
		<description><![CDATA[I just started to develop our upcoming space shooter game. We want to push graphics/look as much as we can.  For this reason I needed to find fast BitmapData methods to draw things on screen. I did some benchmarks with some common methods. Also, while benchmarking i had chance to discuss these results with Engin [...]]]></description>
			<content:encoded><![CDATA[<p><object style="width: 580px; height: 320px;" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="580" height="320" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://www.indieinheaven.com/swf/Demo.swf" /><embed style="width: 580px; height: 320px;" type="application/x-shockwave-flash" width="580" height="320" src="http://www.indieinheaven.com/swf/Demo.swf"></embed></object></p>
<p>I just started to develop our upcoming space shooter game. We want to push graphics/look as much as we can.  For this reason I needed to find fast BitmapData methods to draw things on screen. I did some benchmarks with some common methods.</p>
<p><strong>Also, while benchmarking i had chance to discuss these results with Engin Erenturk at Yogurt. He was wondering if any faster way to draw vector graphics on BitmapData.  Then we find a nice way to do this up to </strong><strong>300% faster.</strong></p>
<h4>A quick note</h4>
<p>These are not scientific benchmarks. The results here can vary on environment (most with browser choice).</p>
<p><strong>Environment Specs</strong></p>
<p>MacBook with 2 GHz. Intel Core 2 Duo, 2 GB. of memory and Flash Player version is 10.1.53.64. Browser is Safari. SWF Debug Mode is On</p>
<p>Canvas BitmapData is 320 x 240 and next BitmapData is 1.000 x 1.000.</p>
<p>I tried to limit copying size to 100 x 100 but some methods also tested with variations.</p>
<p>Many iterations done 100.000 times to get precise results.</p>
<h3>copyPixels()<span style="font-weight: normal; font-size: 13px;"> </span></h3>
<p>According to documentation it’s a fast method to copy a rectangular area of pixel data between BitmapDatas with no stretching, rotation, or color effect. As the documentation suggests it’s a really the fastest method between in methods which i have been tested.</p>

<table id="wp-table-reloaded-id-4-no-1" class="wp-table-reloaded wp-table-reloaded-id-4">
<thead>
	<tr class="row-1 odd">
		<th class="column-1">Rect</th><th class="column-2">Source Alpha</th><th class="column-3">Target Alpha</th><th class="column-4">Merge Alpha</th><th class="column-5">Time / Iteration</th>
	</tr>
</thead>
<tbody class="row-hover">
	<tr class="row-2 even">
		<td class="column-1">100x100 </td><td class="column-2">-</td><td class="column-3">-</td><td class="column-4">-</td><td class="column-5">0.00799</td>
	</tr>
	<tr class="row-3 odd">
		<td class="column-1">100x100 </td><td class="column-2">✓</td><td class="column-3">-</td><td class="column-4">-</td><td class="column-5">0.01249</td>
	</tr>
	<tr class="row-4 even">
		<td class="column-1">100x100 </td><td class="column-2">✓</td><td class="column-3">✓</td><td class="column-4">-</td><td class="column-5">0.00804</td>
	</tr>
	<tr class="row-5 odd">
		<td class="column-1">100x100 </td><td class="column-2">✓</td><td class="column-3">✓</td><td class="column-4">✓</td><td class="column-5">0.02822</td>
	</tr>
	<tr class="row-6 even">
		<td class="column-1">100x100 </td><td class="column-2">✓</td><td class="column-3">-</td><td class="column-4">✓</td><td class="column-5">0.01256</td>
	</tr>
	<tr class="row-7 odd">
		<td class="column-1">100x100 </td><td class="column-2">-</td><td class="column-3">✓</td><td class="column-4">✓</td><td class="column-5">0.02826</td>
	</tr>
	<tr class="row-8 even">
		<td class="column-1">200x200 </td><td class="column-2">-</td><td class="column-3">-</td><td class="column-4">-</td><td class="column-5">0.02587</td>
	</tr>
	<tr class="row-9 odd">
		<td class="column-1">200x200 </td><td class="column-2">✓</td><td class="column-3">-</td><td class="column-4">-</td><td class="column-5">0.04392</td>
	</tr>
	<tr class="row-10 even">
		<td class="column-1">200x200 </td><td class="column-2">✓</td><td class="column-3">✓</td><td class="column-4">-</td><td class="column-5">0.02599</td>
	</tr>
	<tr class="row-11 odd">
		<td class="column-1">200x200 </td><td class="column-2">✓</td><td class="column-3">✓</td><td class="column-4">✓</td><td class="column-5">0.10635</td>
	</tr>
	<tr class="row-12 even">
		<td class="column-1">200x200 </td><td class="column-2">✓</td><td class="column-3">-</td><td class="column-4">✓</td><td class="column-5">0.04362</td>
	</tr>
	<tr class="row-13 odd">
		<td class="column-1">200x200 </td><td class="column-2">-</td><td class="column-3">✓</td><td class="column-4">✓</td><td class="column-5">0.10641</td>
	</tr>
</tbody>
</table>

<p>But the first thing we will notice is the size is matter. As we double copy size we going to need around a double time to process.  Data with alpha is slightly increases time. If we merge alphas we get longest time required by this method to process.</p>
<h3>setVector() and SetPixels()</h3>
<p>Second method we look is setVector. A newer method integrated with Flash Player 10. It uses Vector to to read and write each ARGB pixel in rectangular region.</p>

<table id="wp-table-reloaded-id-5-no-1" class="wp-table-reloaded wp-table-reloaded-id-5">
<thead>
	<tr class="row-1 odd">
		<th class="column-1">Source Alpha</th><th class="column-2">Target Alpha</th><th class="column-3">Time / Iteration</th>
	</tr>
</thead>
<tbody>
	<tr class="row-2 even">
		<td class="column-1">-</td><td class="column-2">-</td><td class="column-3">0.01575</td>
	</tr>
	<tr class="row-3 odd">
		<td class="column-1">✓</td><td class="column-2">-</td><td class="column-3">0.08716</td>
	</tr>
	<tr class="row-4 even">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">0.09175</td>
	</tr>
	<tr class="row-5 odd">
		<td class="column-1">-</td><td class="column-2">✓</td><td class="column-3">0.01553</td>
	</tr>
</tbody>
</table>

<p>When we add alpha channels into process it really gets huge increase over required time. I didn&#8217;t test with bigger sizes since this method works pixel by pixel. Thus i think process time will increase as we pass bigger data.</p>
<p>Lets continue with similar method SetPixels. Which uses a ByteArray data to fill rectangular area with ARGB values.</p>

<table id="wp-table-reloaded-id-6-no-1" class="wp-table-reloaded wp-table-reloaded-id-6">
<thead>
	<tr class="row-1 odd">
		<th class="column-1">Source Alpha</th><th class="column-2">Target Alpha</th><th class="column-3">Time / Iteration</th>
	</tr>
</thead>
<tbody>
	<tr class="row-2 even">
		<td class="column-1">-</td><td class="column-2">-</td><td class="column-3">0.03686</td>
	</tr>
	<tr class="row-3 odd">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">0.09237</td>
	</tr>
	<tr class="row-4 even">
		<td class="column-1">✓</td><td class="column-2">-</td><td class="column-3">0.09217</td>
	</tr>
	<tr class="row-5 odd">
		<td class="column-1">-</td><td class="column-2">✓</td><td class="column-3">0.03755</td>
	</tr>
</tbody>
</table>

<p>As we can see when alpha channels are processed it gets similar with SetVector results. However, data without alpha channel is 300% slower then SetVectors case.</p>
<p><!--StartFragment--></p>
<h3>draw()</h3>
<p>The most common method to populate DisplayObjects on BitmapDatas is the draw method. Unlike SetVector and SetPixels, by using this method or constructing bitmap representation and using copyPixels method we can transfer DisplayObjects on top of existing BitmapData; without replacing old pixels. Draw method also provides matrix and color transformations, blend modes. Which is very handy options.</p>
<p>Keep in mind, every thing has a cost and if you are using such a rich featured method it can get really slow.</p>
<p>First we going to take a look at regular draw calls with BitmapData.</p>

<table id="wp-table-reloaded-id-7-no-1" class="wp-table-reloaded wp-table-reloaded-id-7">
<thead>
	<tr class="row-1 odd">
		<th class="column-1">Source Alpha</th><th class="column-2">Target Alpha</th><th class="column-3">Color Transform</th><th class="column-4">Matrix</th><th class="column-5">Blending</th><th class="column-6">Smoothing</th><th class="column-7">Time / Iteration</th>
	</tr>
</thead>
<tbody>
	<tr class="row-2 even">
		<td class="column-1">-</td><td class="column-2">-</td><td class="column-3">-</td><td class="column-4">-</td><td class="column-5">-</td><td class="column-6">-</td><td class="column-7">0.52542</td>
	</tr>
	<tr class="row-3 odd">
		<td class="column-1">✓</td><td class="column-2">-</td><td class="column-3">-</td><td class="column-4">-</td><td class="column-5">-</td><td class="column-6">-</td><td class="column-7">0.51527</td>
	</tr>
	<tr class="row-4 even">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">-</td><td class="column-4">-</td><td class="column-5">-</td><td class="column-6">-</td><td class="column-7">0.52347</td>
	</tr>
	<tr class="row-5 odd">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">-</td><td class="column-4">-</td><td class="column-5">-</td><td class="column-6">✓</td><td class="column-7">0.4824</td>
	</tr>
	<tr class="row-6 even">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">-</td><td class="column-4">-</td><td class="column-5">-</td><td class="column-6">-</td><td class="column-7">0.5109</td>
	</tr>
	<tr class="row-7 odd">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">-</td><td class="column-4">✓</td><td class="column-5">-</td><td class="column-6">-</td><td class="column-7">0.57789</td>
	</tr>
	<tr class="row-8 even">
		<td class="column-1">-</td><td class="column-2">-</td><td class="column-3">-</td><td class="column-4">✓</td><td class="column-5">-</td><td class="column-6">-</td><td class="column-7">0.60129</td>
	</tr>
	<tr class="row-9 odd">
		<td class="column-1">✓</td><td class="column-2">-</td><td class="column-3">-</td><td class="column-4">✓</td><td class="column-5">-</td><td class="column-6">-</td><td class="column-7">0.57014</td>
	</tr>
	<tr class="row-10 even">
		<td class="column-1">-</td><td class="column-2">✓</td><td class="column-3">-</td><td class="column-4">✓</td><td class="column-5">-</td><td class="column-6">-</td><td class="column-7">0.59359</td>
	</tr>
	<tr class="row-11 odd">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">-</td><td class="column-4">✓</td><td class="column-5">-</td><td class="column-6">✓</td><td class="column-7">0.63116</td>
	</tr>
	<tr class="row-12 even">
		<td class="column-1">-</td><td class="column-2">-</td><td class="column-3">✓</td><td class="column-4">-</td><td class="column-5">-</td><td class="column-6">-</td><td class="column-7">0.55464</td>
	</tr>
	<tr class="row-13 odd">
		<td class="column-1">✓</td><td class="column-2">-</td><td class="column-3">✓</td><td class="column-4">-</td><td class="column-5">-</td><td class="column-6">-</td><td class="column-7">0.56066</td>
	</tr>
	<tr class="row-14 even">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">✓</td><td class="column-4">-</td><td class="column-5">-</td><td class="column-6">-</td><td class="column-7">0.66398</td>
	</tr>
	<tr class="row-15 odd">
		<td class="column-1">-</td><td class="column-2">✓</td><td class="column-3">✓</td><td class="column-4">-</td><td class="column-5">-</td><td class="column-6">-</td><td class="column-7">0.70472</td>
	</tr>
	<tr class="row-16 even">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">✓</td><td class="column-4">✓</td><td class="column-5">-</td><td class="column-6">-</td><td class="column-7">0.677</td>
	</tr>
	<tr class="row-17 odd">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">✓</td><td class="column-4">-</td><td class="column-5">-</td><td class="column-6">✓</td><td class="column-7">0.59854</td>
	</tr>
	<tr class="row-18 even">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">✓</td><td class="column-4">✓</td><td class="column-5">-</td><td class="column-6">✓</td><td class="column-7">0.66102</td>
	</tr>
	<tr class="row-19 odd">
		<td class="column-1">-</td><td class="column-2">-</td><td class="column-3">-</td><td class="column-4">-</td><td class="column-5">✓</td><td class="column-6">-</td><td class="column-7">0.61822</td>
	</tr>
	<tr class="row-20 even">
		<td class="column-1">-</td><td class="column-2">✓</td><td class="column-3">-</td><td class="column-4">-</td><td class="column-5">✓</td><td class="column-6">-</td><td class="column-7">0.59262</td>
	</tr>
	<tr class="row-21 odd">
		<td class="column-1">✓</td><td class="column-2">-</td><td class="column-3">-</td><td class="column-4">-</td><td class="column-5">✓</td><td class="column-6">-</td><td class="column-7">0.59318</td>
	</tr>
	<tr class="row-22 even">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">-</td><td class="column-4">-</td><td class="column-5">✓</td><td class="column-6">-</td><td class="column-7">0.5707</td>
	</tr>
	<tr class="row-23 odd">
		<td class="column-1">-</td><td class="column-2">-</td><td class="column-3">-</td><td class="column-4">✓</td><td class="column-5">✓</td><td class="column-6">-</td><td class="column-7">0.67868</td>
	</tr>
	<tr class="row-24 even">
		<td class="column-1">-</td><td class="column-2">-</td><td class="column-3">✓</td><td class="column-4">✓</td><td class="column-5">✓</td><td class="column-6">-</td><td class="column-7">0.6093</td>
	</tr>
	<tr class="row-25 odd">
		<td class="column-1">✓</td><td class="column-2">-</td><td class="column-3">✓</td><td class="column-4">✓</td><td class="column-5">✓</td><td class="column-6">-</td><td class="column-7">0.60776</td>
	</tr>
	<tr class="row-26 even">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">✓</td><td class="column-4">✓</td><td class="column-5">✓</td><td class="column-6">✓</td><td class="column-7">0.65962</td>
	</tr>
	<tr class="row-27 odd">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">✓</td><td class="column-4">✓</td><td class="column-5">✓</td><td class="column-6">-</td><td class="column-7">0.64566</td>
	</tr>
	<tr class="row-28 even">
		<td class="column-1">-</td><td class="column-2">✓</td><td class="column-3">✓</td><td class="column-4">✓</td><td class="column-5">✓</td><td class="column-6">-</td><td class="column-7">0.64426</td>
	</tr>
	<tr class="row-29 odd">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">✓</td><td class="column-4">✓</td><td class="column-5">✓</td><td class="column-6">-</td><td class="column-7">0.64426</td>
	</tr>
</tbody>
</table>

<p>Compared to other methods its slow. Interesting to note, in some cases smoothing increases performance as it shown at table.</p>
<p>Now lets try with vector graphics and improving it.  Draw method by itself a method for copying pixels. Right? What happens if we use something cached by player? Can this improve our draw?</p>
<p>Let me explain what I mean by “cached”. Every DisplayObject inside Flash Player has a property called cacheAsBitmap. If this property is enabled Flash Player constructs a bitmap copy of our DisplayObject and caches until it needs to reconstruct. Reconstruction only happens if Flash player detects any change in contents. Then every time Flash Player’s renderer tries to render this DisplayObject; it uses this cached fast version rather then processing original one again and again. Its very useful if we have complex vector drawing.</p>
<p>And the idea behind this optimization was to try pushing Flash Player to use this cached bitmap data rather then letting Flash Player to reconstruct bitmap representation of this vector graphic every time we call the draw method.  Here is what we get after enabling and disabling this option with sprite (a vector graphic we draw in it.).</p>

<table id="wp-table-reloaded-id-8-no-1" class="wp-table-reloaded wp-table-reloaded-id-8">
<thead>
	<tr class="row-1 odd">
		<th class="column-1">Cache As Bitmap</th><th class="column-2">Source Alpha</th><th class="column-3">Time / Iteration</th>
	</tr>
</thead>
<tbody>
	<tr class="row-2 even">
		<td class="column-1">-</td><td class="column-2">-</td><td class="column-3">0.16842</td>
	</tr>
	<tr class="row-3 odd">
		<td class="column-1">-</td><td class="column-2">✓</td><td class="column-3">0.16959</td>
	</tr>
	<tr class="row-4 even">
		<td class="column-1">✓</td><td class="column-2">-</td><td class="column-3">0.06393</td>
	</tr>
	<tr class="row-5 odd">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">0.06038</td>
	</tr>
</tbody>
</table>

<p>We can see enabling cache improves drawing speeds up to 300%. Also if we compare this table with BitmapData drawing we can see vector drawing is faster then BitmapData drawing even if cache is disabled.  To do this , we created a sprite instance and created a circle (in this case 100&#215;100) by using Graphics API then we enabled cacheAsBitmap property. I added this Sprite into some where off to stage  (negative width or height). The tricky part is we need to wait for Flash Player to construct a bitmap cache for this Sprite before we start drawing it. To do that I waited one frame to be passed. Then we can safely start using this fast drawing method with this Sprite.</p>
<pre class="brush:as3">package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.display.Sprite;
	import flash.display.StageAlign;
	import flash.display.StageScaleMode;
	import flash.events.Event;
	import flash.utils.getTimer;

	public class DrawMethodTest extends Sprite
	{
		private var m_sprite		:Sprite;
		private var m_bitmapData	:BitmapData;
		private var m_frameCount	:uint;

		public function DrawMethodTest()
		{
			stage.align							= StageAlign.TOP_LEFT;
			stage.scaleMode						= StageScaleMode.NO_SCALE;

			m_sprite							= new Sprite();
			m_bitmapData						= new BitmapData(300, 300, true, 0xFFFFFFFF);
			m_frameCount						= 0;

			m_sprite.graphics.beginFill(0xFF0000, 1);
			m_sprite.graphics.drawCircle(20, 20, 20);
			m_sprite.graphics.endFill();

			// Try removing this line to see without cache.
			m_sprite.cacheAsBitmap				= true;

			m_sprite.x							= -m_sprite.width;

			addChild(m_sprite);

			addEventListener(Event.ENTER_FRAME, handleEnterFrameEvent);
		}

		private function handleEnterFrameEvent(_event:Event):void
		{
			m_frameCount++;

			if(m_frameCount == 2)
			{
				removeEventListener(Event.ENTER_FRAME, handleEnterFrameEvent);

				test();
			}
		}

		private function test():void
		{
			var _iterationCount	:uint	= 100000;
			var _startTime		:uint	= getTimer();

			m_bitmapData.lock();

			for(var i:uint = 0; i &lt; _iterationCount; i++)
			{
				m_bitmapData.draw(m_sprite, null, null, null, null, false);
			}

			trace((getTimer() - _startTime) / _iterationCount);

			//0.09856 cache as bitmap False...
			//0.03746 cache as bitmap true...
		}
	}
}</pre>
<p>Lets see what happens if we use Bitmaps (not BitmapData’s).</p>

<table id="wp-table-reloaded-id-9-no-1" class="wp-table-reloaded wp-table-reloaded-id-9">
<thead>
	<tr class="row-1 odd">
		<th class="column-1">Cache As Bitmap</th><th class="column-2">Source Alpha</th><th class="column-3">Target Alpha</th><th class="column-4">Time / Iteration</th>
	</tr>
</thead>
<tbody>
	<tr class="row-2 even">
		<td class="column-1">-</td><td class="column-2">-</td><td class="column-3">-</td><td class="column-4">0.03433</td>
	</tr>
	<tr class="row-3 odd">
		<td class="column-1">-</td><td class="column-2">✓</td><td class="column-3">✓</td><td class="column-4">0.05249</td>
	</tr>
	<tr class="row-4 even">
		<td class="column-1">-</td><td class="column-2">✓</td><td class="column-3">-</td><td class="column-4">0.03787</td>
	</tr>
	<tr class="row-5 odd">
		<td class="column-1">-</td><td class="column-2">-</td><td class="column-3">✓</td><td class="column-4">0.05321</td>
	</tr>
	<tr class="row-6 even">
		<td class="column-1">✓</td><td class="column-2">-</td><td class="column-3">-</td><td class="column-4">4.8262</td>
	</tr>
	<tr class="row-7 odd">
		<td class="column-1">✓</td><td class="column-2">✓</td><td class="column-3">✓</td><td class="column-4">4.7247</td>
	</tr>
	<tr class="row-8 even">
		<td class="column-1">✓</td><td class="column-2"></td><td class="column-3">-</td><td class="column-4">4.711</td>
	</tr>
	<tr class="row-9 odd">
		<td class="column-1">✓</td><td class="column-2">-</td><td class="column-3">✓</td><td class="column-4">4.7292</td>
	</tr>
</tbody>
</table>

<p>Interesting to not that if we use Bitmaps (not BitmapData) with cache enabled draw calls really gets slower. Also Bitmaps are also draw faster then BitmapDatas.</p>
<h3>The Winner, Conclusion</h3>
<p>Actually there is no winner. Every method has it own advantages and disadvantages. But for me I quite like copyPixels speed.  I think they still need some improvements.</p>
<p>I hope these info’s are helpful and will improve our bitmap operations.</p>
<h3>Demo Swf Info</h3>
<p>copyPixels around 10.000 per frame at 40-60 fps.</p>
<p><!--EndFragment--></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alinakipoglu.com/2010/08/benchmark-results-for-blitting-methods-in-bitmapdata/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yogda AVM2 Workbench</title>
		<link>http://blog.alinakipoglu.com/2010/07/yogda-avm2-workbench/</link>
		<comments>http://blog.alinakipoglu.com/2010/07/yogda-avm2-workbench/#comments</comments>
		<pubDate>Thu, 15 Jul 2010 09:54:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Actionscript]]></category>
		<category><![CDATA[Yogda]]></category>

		<guid isPermaLink="false">http://blog.alinakipoglu.com/?p=169</guid>
		<description><![CDATA[Hi, In this post im going to discuss with you this new exciting tool Yogda. Yogda is a low level Actionscript byte code editing suite. Developed by veteran developer Korhan Kaya (he also composes great musics  ). Korhan currently at Yogurt technologies; a high tech company located at Istanbul, they also pioneering 3d online game development in [...]]]></description>
			<content:encoded><![CDATA[<p>Hi,</p>
<p>In this post im going to discuss with you this new exciting tool <strong>Yogda</strong>.</p>
<p>Yogda is a low level Actionscript byte code editing suite. Developed by veteran developer Korhan Kaya (he also composes great <a title="musics" href="http://soundcloud.com/2ka" target="_blank"><strong>musics</strong></a> <img src='http://blog.alinakipoglu.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ). Korhan currently at Yogurt technologies; a high tech company located at Istanbul, they also pioneering 3d online game development in Turkey.</p>
<p>Yoga supports all types of compilers that outputs a SWF file, including mxmlc, haxe, air and alchemy.</p>
<p><a href="http://blog.alinakipoglu.com/media/2010/07/YogdaOverview.jpg"><img class="alignnone size-full wp-image-178" title="Yogda Overview" src="http://blog.alinakipoglu.com/media/2010/07/YogdaOverview.jpg" alt="" width="714" height="509" /></a></p>
<p>Its allows us to :</p>
<h3><strong>Learn more about AVM2 instructions and experiment them on fly:</strong></h3>
<p>While working with editor pane, Yogda allows us to view help on instructions we select; by right clicking into any one of them we can either view bytecode info or Tamarin Code reference.</p>
<p><a href="http://blog.alinakipoglu.com/media/2010/07/YogdaHelp.jpg"><img class="alignnone size-full wp-image-181" title="Yogda Help" src="http://blog.alinakipoglu.com/media/2010/07/YogdaHelp.jpg" alt="" width="453" height="516" /></a></p>
<p>We can also edit any instruction and alter related parameters.<br />
<img title="Modify_ByteCode" src="http://blog.alinakipoglu.com/media/2010/07/Modify_ByteCode-.jpg" alt="" width="415" height="400" /></p>
<h3>Edit Byte codes:</h3>
<h3><strong>Optimize your application:</strong></h3>
<div><span style="color: #0000ee; -webkit-text-decorations-in-effect: underline;"><br />
</span></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.alinakipoglu.com/2010/07/yogda-avm2-workbench/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
