<?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>blog.joa-ebert.com - Blog of Joa Ebert &#187; hydra</title>
	<atom:link href="http://blog.joa-ebert.com/category/hydra/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.joa-ebert.com</link>
	<description>Actionscript3, Flash, Scala, Java, C#, C++, Algorithms &#38; Imageprocessing</description>
	<lastBuildDate>Fri, 11 Nov 2011 11:13:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>JITB&#8217;s PixelBender support</title>
		<link>http://blog.joa-ebert.com/2010/10/01/jitbs-pixelbender-support/</link>
		<comments>http://blog.joa-ebert.com/2010/10/01/jitbs-pixelbender-support/#comments</comments>
		<pubDate>Fri, 01 Oct 2010 15:35:37 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[experiments]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[hydra]]></category>
		<category><![CDATA[apparat]]></category>
		<category><![CDATA[glsl]]></category>
		<category><![CDATA[jitb]]></category>
		<category><![CDATA[pixelbender]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=664</guid>
		<description><![CDATA[I have demoed support for PixelBender shaders in JITB at the FOTB 2010 conference. It turned out that JITB can run PixelBender code really fast and well. I have demoed a Julia and Terrain raytracer which were both kindly contributed by David Lenaerts. I only showed the demos since I would have been running out [...]]]></description>
			<content:encoded><![CDATA[<p>I have demoed support for PixelBender shaders in JITB at the <a href="http://www.flashonthebeach.com/" target="_blank">FOTB 2010</a> conference. It turned out that JITB can run PixelBender code really fast and well. I have demoed a Julia and Terrain raytracer which were both kindly contributed by <a href="http://www.derschmale.com/" target="_blank">David Lenaerts</a>. I only showed the demos since I would have been running out of time. I still owe you an explanation of how it all works.<br />
<span id="more-664"></span></p>
<h3>Step #1: Parsing PixelBender data</h3>
<p>PixelBender compiles down to PBJ which is a two-address based bytecode format. Basically it contains instructions like this one which I have taken from <a href="http://www.ncannasse.fr/projects/pbj" target="_blank">Nicolas&#8217; blog</a>:</p>
<pre>  sampleNearest f2, text0[f0.rg]
  sampleNearest f3, text1[f0.rg]
  mov f4, f2
  mul f4, f3
  mov f1, f4</pre>
<p>Those PBJ files are parsed by Apparat into high level structures. This happens basically the same way I do it for ActionScript bytecode. Thanks to the work of Nicolas Cannasse this was a walk in the park.</p>
<h3>Step #2: Optimizing PixelBender bytecode</h3>
<p>The PixelBender compiler does not produce optimal code as noted by Nicolas. You can see it in the code I just posted. Or you can simply compile and empty shader and take a look at the disassembled output. Apparat performs only two very simple optimizations for PixelBender which are written especially for PBJ. Thos include copy propagation and dead code elimination. The compiler does create code which is not bad thanks to <a href="http://www.llvm.org/" target="_blank">LLVM</a> but there are unnecessary copies going on which are removed by Apparat.</p>
<h3>Step #3: Loop detection</h3>
<p>PixelBender <b>still</b> has no loops since its initial introduction in October 1st in 2007. Tomorrow it is October 1st in 2010. Go figure. So since there are no loops the only way people write loops in PixelBender is basically by copy and paste or using preprocessor directives. With JITB I want to send real shaders to the graphics card and I do want to make use of loops. So I wrote a PBJ bytecode based copy and paste detector which is based on ideas of the <a href="http://pmd.sourceforge.net/" target="_blank">PMD</a> copy and paste detector. When a segment is detected in a sequence I convert it to a loop. That way I can reduce the amount of data I have to send to the graphics card. This is very important since in the case of the demos I showed at FOTB they contained around 50.000 instructions. And my cheap graphics card was complaining that there are too many instrucitons. With the loop conversion this number drastically decreased.</p>
<h3>Step #4: Converting PixelBender bytecode to GLSL</h3>
<p>It is very easy to convert PixelBender to GLSL. The two address code format can be translated with some minor tweaks to GLSL with a very simple mapping. However this is not really optimal since you have only a two address code. When exporting to GLSL I perform one additional step which expands the two address based code to a three address based code. That way I do not emit a lot of unnecessary copies again.</p>
<p>That is basically the recipie to convert PixelBender PBJ files to GLSL shaders that perform well on current graphics card hardware. There are additional steps involved to get OpenGL shaders to work like PixelBender in Flash but they are only minor tweaks. I have no comparable metrics right now. However I will create a JITB applet version so you can have a look for yourself soon.</p>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2010/10/01/jitbs-pixelbender-support/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=664&amp;md5=0cf6eb4a85dfbfd59053adc3948edf8e" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2010/10/01/jitbs-pixelbender-support/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=664&amp;md5=0cf6eb4a85dfbfd59053adc3948edf8e" type="text/html" />
	</item>
		<item>
		<title>PixelBender Support In Apparat</title>
		<link>http://blog.joa-ebert.com/2010/09/07/pixelbender-support-in-apparat/</link>
		<comments>http://blog.joa-ebert.com/2010/09/07/pixelbender-support-in-apparat/#comments</comments>
		<pubDate>Tue, 07 Sep 2010 08:35:38 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[hydra]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[apparat]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[pixelbender]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=651</guid>
		<description><![CDATA[Since PixelBender is becomming a more popular technology in the Flash ecosystem I decided to add first-class Apparat support for it. As you might know I have done a couple of different tools for PixelBender already. When I switched to Linux a while ago I had to discover that there is no compiler for PixelBender [...]]]></description>
			<content:encoded><![CDATA[<p>Since PixelBender is becomming a more popular technology in the Flash ecosystem I decided to add first-class Apparat support for it.</p>
<p>As you <a href="http://blog.joa-ebert.com/2008/09/08/pixelbender-runtime-compilation/" title="PixelBender Runtime Compilation" target="_self">might know</a> I have done a couple of <a href="http://blog.joa-ebert.com/2008/10/08/pixelbender-outline-view/" title="PixelBender Outline View" target="_self">different</a> <a href="http://blog.joa-ebert.com/pbdt/" target="_self" title="PBDT">tools</a> for PixelBender already.</p>
<p>When I switched to Linux a while ago I had to discover that there is no compiler for PixelBender available and also no PixelBender toolkit. Even PBDT does not work on Linux since it requires a compiler.</p>
<p>In the current state Apparat can read and write PBJ files. I already implemented the format two years ago for the outline view plug-in. But this time <a href="http://ncannasse.fr/" target="_blank" title="Nicolas Cannasse">Nicolas Cannasse&#8217;s</a> great work on the <a href="http://hxformat.googlecode.com/" title="hxformat" target="_blank">hxformat</a> library was my reference. </p>
<p>I will add two optimizations specific for PBJ files. TAAS will not be used here since it is only an unnecessary overhead.  You do not have to crack a nut with a sledgehammer. The PBJ format is already register based and has certain useful invariants.</p>
<p>To cleanup some mistakes of the PixelBender compiler I will add:</p>
<ul>
<li>Copy propagation</li>
<li>Dead Code Elimination</li>
</ul>
<p>The compiler is not bad. Compared to the ASC it is a beauty of technology that makes use of the <a href="http://www.llvm.org/" target="_blank" title="LLVM">LLVM</a>. However I think there must be some mistake in the code since unnecessary registers are used (Note: I doubt this is LLVMs fault but more the way how methods like sampleNearest are bound by Adobe). This can be solved with the simple optimizations I will add.</p>
<p>I will add some more things as well like a GLSL conversion or a DSL to write PixelBender kernels in Scala. If we get lucky this will also lead to a true cross platform opensource compiler for the PixelBender language. I think I will name that compiler <i>Hydra</i> :P</p>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2010/09/07/pixelbender-support-in-apparat/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=651&amp;md5=7c242af7c1b61870a087c1fe598f0cec" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2010/09/07/pixelbender-support-in-apparat/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=651&amp;md5=7c242af7c1b61870a087c1fe598f0cec" type="text/html" />
	</item>
		<item>
		<title>Semantic Highlightning For PBDT</title>
		<link>http://blog.joa-ebert.com/2009/05/07/semantic-highlightning-for-pbdt/</link>
		<comments>http://blog.joa-ebert.com/2009/05/07/semantic-highlightning-for-pbdt/#comments</comments>
		<pubDate>Thu, 07 May 2009 20:38:29 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[hydra]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[fdt]]></category>
		<category><![CDATA[pbdt]]></category>
		<category><![CDATA[pixelbender]]></category>
		<category><![CDATA[semantichighlightning]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=354</guid>
		<description><![CDATA[PBDT has now support for semantic highlightning. Thanks to the FDT guys again for answering a lot of Eclipse releated questions. Semantic highlightning works currently with parameters, input and output declarations and for defined preprocessor directives. Just have a look at the screenshot. I have also integrated complete color preferences support. If you go to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.joa-ebert.com/wp-content/images/pbdt/sem.png" target="_self" title="PBDT with semantic highlightning" rel="lightbox[354]"><img style="float: left; padding-right: 4px" src="http://blog.joa-ebert.com/wp-content/images/pbdt/sem_s.png" alt="Semantic highlightning"/></a>PBDT has now support for semantic highlightning. Thanks to the FDT guys again for answering a lot of Eclipse releated questions. Semantic highlightning works currently with parameters, input and output declarations and for defined preprocessor directives. Just have a look at the screenshot. I have also integrated complete color preferences support. If you go to <i>Preferences > PBDT > Colors</i> you can change everything the way you like.</p>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2009/05/07/semantic-highlightning-for-pbdt/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=354&amp;md5=2ec6548b7bc2cc0f340099f9287456bb" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2009/05/07/semantic-highlightning-for-pbdt/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=354&amp;md5=2ec6548b7bc2cc0f340099f9287456bb" type="text/html" />
	</item>
		<item>
		<title>PBDT with basic refactoring</title>
		<link>http://blog.joa-ebert.com/2009/05/04/pbdt-with-basic-refactoring/</link>
		<comments>http://blog.joa-ebert.com/2009/05/04/pbdt-with-basic-refactoring/#comments</comments>
		<pubDate>Mon, 04 May 2009 12:40:17 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[hydra]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[pbdt]]></category>
		<category><![CDATA[refactoring]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=347</guid>
		<description><![CDATA[PBDT has a new feature which is basic refactoring. Simply select the variable you want to rename and press Alt+Shift+R or select &#8220;Rename&#8221; from the context menu. There are currently two issues with refactoring. If the refactoring entry in the context menu is disabled please select the variable and try again. The same for the [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.joa-ebert.com/wp-content/images/pbdt/ref.png" target="_blank" title="PBDT Refactoring" rel="lightbox[347]"><img src="http://blog.joa-ebert.com/wp-content/images/pbdt/ref_s.png" alt="PBDT Refactoring"/ border="0" style="float: right; padding-left: 8px"></a>PBDT has a new feature which is basic refactoring. Simply select the variable you want to rename and press Alt+Shift+R or select &#8220;Rename&#8221; from the context menu. There are currently two issues with refactoring. If the refactoring entry in the context menu is disabled please select the variable and try again. The same for the shortcut. If you want to refactor something, just select it first in the text. Once I figure out how Eclipse handles changes of the caret position I will fix that.</p>
<p>The second is about scopes. If you redefine a variable in a different scope the refactoring is not correct. But I guess 99% of the developers will not get in touch with this issue.<br />
In this example <code>i</code> would be refactored in the outer and inner scope which is not correct.</p>
<p><code></p>
<pre>
void evaluatePixel()
{
        int i;

        {
        	int i;
        	i;
        }

        i;

        out = sampleNearest(src,outCoord());
}
</pre>
<p></code></p>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2009/05/04/pbdt-with-basic-refactoring/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=347&amp;md5=c049c44304b0f8d50071f21a6e0a4449" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2009/05/04/pbdt-with-basic-refactoring/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=347&amp;md5=c049c44304b0f8d50071f21a6e0a4449" type="text/html" />
	</item>
		<item>
		<title>PixelBender on Linux</title>
		<link>http://blog.joa-ebert.com/2009/04/28/pixelbender-on-linux/</link>
		<comments>http://blog.joa-ebert.com/2009/04/28/pixelbender-on-linux/#comments</comments>
		<pubDate>Tue, 28 Apr 2009 08:23:29 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[hydra]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[ffk]]></category>
		<category><![CDATA[pbdt]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=343</guid>
		<description><![CDATA[Here is a nice tutorial that explains how to get PixelBender to work on Linux systems. Adobe offers just a Mac and Windows version of the toolkit. But using PBDT in combination with Wine allows PixelBender to work on Linux systems. How cool is that? I also updated the PBDT plug-in to get rid of [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://book.abe.free.fr/blog/?post/2009/04/25/Using-PixelBender-on-Linux" target="_blank">Here</a> is a nice tutorial that explains how to get PixelBender to work on Linux systems. Adobe offers just a Mac and Windows version of the toolkit. But using PBDT in combination with Wine allows PixelBender to work on Linux systems. How cool is that?</p>
<p>I also updated the PBDT plug-in to get rid of some errors. I did not include all feature requests yet because the FFK in Cologne is currently eating up all my time.</p>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2009/04/28/pixelbender-on-linux/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=343&amp;md5=5207233dd7f5f5347e29712849098767" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2009/04/28/pixelbender-on-linux/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=343&amp;md5=5207233dd7f5f5347e29712849098767" type="text/html" />
	</item>
		<item>
		<title>PBDT Release</title>
		<link>http://blog.joa-ebert.com/2009/04/24/pbdt-release/</link>
		<comments>http://blog.joa-ebert.com/2009/04/24/pbdt-release/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 16:20:57 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[hydra]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[pixelbender]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=338</guid>
		<description><![CDATA[I just released my PixelBender plug-in for Eclipse. It integrates for us very charming into the workflow and is a good help when developing PixelBender kernels. I have put up a tutorial and instructions at this page. Features of the PBDT plug-in include code completion, syntax highlightning and some other nifty features. It can be [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.joa-ebert.com/wp-content/images/pbdt/10.png" target="_blank" rel="lightbox[338]"><img src="http://blog.joa-ebert.com/wp-content/images/pbdt/10_s.png" style="float: left; padding-right: 8px"/></a> I just released my PixelBender plug-in for Eclipse. It integrates for us very charming into the workflow and is a good help when developing PixelBender kernels. I have put up a tutorial and instructions at <a href="http://blog.joa-ebert.com/pbdt/" target="_self">this</a> page.</p>
<p>Features of the PBDT plug-in include code completion, syntax highlightning and some other nifty features. It can be integrated into existing projects in FDT or FlexBuilder. Let me know what you think and please report any bugs or issues back to me.</p>
<p>A special thanks goes to Arne Deutsch from the <a href="http://fdt.powerflasher.com/" target="_blank">FDT</a> team for helping me a lot and answering all my annoying questions.</p>
<ul>
<li><a href="http://blog.joa-ebert.com/pbdt/" target="_self">PBDT</a></li>
</ul>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2009/04/24/pbdt-release/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=338&amp;md5=3f3c9fad19e8f146a8e18f43c81cb244" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2009/04/24/pbdt-release/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=338&amp;md5=3f3c9fad19e8f146a8e18f43c81cb244" type="text/html" />
	</item>
		<item>
		<title>Flash And Image Processing</title>
		<link>http://blog.joa-ebert.com/2009/01/23/flash-and-imageprocessing/</link>
		<comments>http://blog.joa-ebert.com/2009/01/23/flash-and-imageprocessing/#comments</comments>
		<pubDate>Fri, 23 Jan 2009 13:01:49 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[hydra]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[adobe]]></category>
		<category><![CDATA[imageprocessing]]></category>
		<category><![CDATA[pixelbender]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=275</guid>
		<description><![CDATA[During the last weeks I have thought about a completly new version of the image processing library. I have done lots of scribbling about what kind of features I want to have and which would be really cool. But there is still a big problem when it comes to dealing with image data in Flash. [...]]]></description>
			<content:encoded><![CDATA[<p>During the last weeks I have thought about a completly new version of the image processing library. I have done lots of scribbling about what kind of features I want to have and which would be really cool. </p>
<p>But there is still a big problem when it comes to dealing with image data in Flash. I have currently different strategies with their pro&#8217;s and con&#8217;s but I can not decide for myself which one makes the most sense.</p>
<ol>
<li>
<h4>BitmapData</h4>
<p>When you are using only one BitmapData to represent an image you have of course access to all the native methods. Life will be a lot easier. But there are certain key issues with the BitmapData. The precision for each channel is limited to 8bit and the main problem is that you will always have to deal with pre-multiplied alpha.  If I want to have a high-quality image processing library this is unacceptable.
</li>
<li>
<h4>Vector.&lt;uint&gt;</h4>
<p>A vector filled with unsigned integers makes sense because this is what you get from a BitmapData and what you can use to set the contents of a BitmapData but working all the times with one integer value and having to do the bit-hassle is really annoying.<br />
The main problem with a Vector of unsigned integers is simply that PixelBender does only accept a Vector of Number values with the length of <code>width * height * 4</code>. So everytime you want to use PixelBender you would have to convert your vector. And also remember that you have only a precision of 8bit per channel. Instead of using a Vector.&lt;uint&gt; I could also use a BitmapData &#8212; the only thing I gain from the vector is that I do not have to deal with pre-multiplied alpha.
</li>
<li>
<h4>Vector.&lt;Number&gt;</h4>
<p>A vector of normalized Number values makes a lot of sense. You are able to use PixelBender with this kind of Vector without having to convert anything. The only problem occurrs when you want to convert your vector into a BitmapData &#8212; but this problem can be solved pretty easy with a PixelBender identity shader. This is also what I used to convert a BitmapData into a vector of Number values since <code>BitmapData.getVector</code> returns only a vector of unsigned integers.</p>
<p>Now all of this does not sound that bad. But there are a lot of problems actually. First of all every time you want to get/set a pixel you have to access four fields of a vector which is way slower than accessing only one field. And the main problem I have is the poor PixelBender support. First of all every time I start a ShaderJob with a vector of fixed length as the target I get an exception that the <code>ShaderJob.start()</code> wants to change the length of my vector. What the fuck? If my Vector has a fixed length of <code>width * height * 4</code> I do not see why the ShaderJob should change this at all.</p>
<p>Another problem is PixelBender itself. In order to rebuild a method like <code>BitmapData.fillRect()</code> you have to visit every channel for every pixel if the rectangle is the full image size. Using ActionScript for this task is out of the question because it will be way to slow. So I thought I write a fillRect-Shader. No problem. The shader works very well in the PixelBender Toolkit but I get only garbage in the Flash Player. Now I am really uncertain if I should continue with this approach since even simple tasks fail. If my target is a BitmapData it works very well by the way. So if I want to fill a rectangle with PixelBender and I have only a Vector.&lt;Number&gt; I have to create a BitmapData with equal size to use it as the target with the ShaderJob and then use an identity shader to convert the BitmapData back into a Vector.&lt;Number&gt;. And once we are using a BitmapData we have again lost the precision and we have pre-multiplied alpha. This would not be a problem if PixelBender would work with Vector.&lt;Number&gt; as good as with a BitmapData.</p>
</li>
<li>
<h4>Vector.&lt;RGBA&gt; and single-linked list</h4>
<p>Having a Vector.&lt;RGBA&gt; in combination with a single linked list is by far the best what you can get in terms of speed. We use this in our audio engine as well. You need to access every field only once and you can iterate over the single-linked list very fast. There are only two major issues. In order to use PixelBender you have to convert this structure which has the length <code>width * height</code> into a Vector.&lt;Number&gt; of the length <code>width * height * 4</code> and you will have the same problems as described above. If you want to have a BitmapData representation you will have to convert the Vector manually to a BitmapData which will also cost you a lot.
</li>
</ol>
<p>My main problem is that I do not like any of those possible approaches. In the old ImageProcessing library I used a BitmapData for each channel but I would not do that again. The main problem is that Adobe has released a very buggy version of the PixelBender run-time in Flash. I would criticize also that we have so many different formats for pixel data which do not fit together. Sometimes you need a Vector.&lt;uint&gt;, sometimes you need a Vector.&lt;Number&gt; &#8212; sometimes the endian is flipped (Adobe Alchemy) and working with the BitmapData only  &#8212; which sounds reasonable &#8212; is a pain because you will never get around pre-multiplied alpha. I would love to have a primitive RGBA data type for image processing which I could feed into PixelBender (color4) and which I could get and set to a BitmapData as a Vector.&lt;RGBA&gt;. If those RGBA elements would be also a single-linked list &#8212; even better.</p>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2009/01/23/flash-and-imageprocessing/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=275&amp;md5=703397f65d0685686af382574e96dfac" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2009/01/23/flash-and-imageprocessing/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=275&amp;md5=703397f65d0685686af382574e96dfac" type="text/html" />
	</item>
		<item>
		<title>PixelBender Outline View</title>
		<link>http://blog.joa-ebert.com/2008/10/08/pixelbender-outline-view/</link>
		<comments>http://blog.joa-ebert.com/2008/10/08/pixelbender-outline-view/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 16:36:42 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[hydra]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[eclipse]]></category>
		<category><![CDATA[fdt]]></category>
		<category><![CDATA[pixelbender]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://blog.joa-ebert.com/?p=245</guid>
		<description><![CDATA[PixelBender Outline is a simple view for Eclipse. It allows you to browse through compiled PixelBender kernel files (pbj). Usually it is quite annoying when working with PixelBender. You always have to debug the shader if you did not write it yourself to know about parameters and stuff. The PixelBender Outline view allows you to [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://blog.joa-ebert.com/wp-content/images/pixelBenderOutline.jpg" target="_blank" rel="lightbox[245]"><img src="http://blog.joa-ebert.com/wp-content/images/pixelBenderOutline.gif" alt="PixelBender Outline" border="0" style="float: right; padding-left: 6px"/></a>PixelBender Outline is a simple view for Eclipse. It allows you to browse through compiled PixelBender kernel files (pbj). Usually it is quite annoying when working with PixelBender. You always have to debug the shader if you did not write it yourself to know about parameters and stuff. The PixelBender Outline view allows you to navigate through that information in a comfortable way.</p>
<p><b>PixelBender Outline is working with FDT only</b>. Just grab the JAR file and place it into your Eclipse plugins folder (&#8230;/Eclipse/plugins/) to install it. After restarting Eclipse you can open the view using Window-&gt;Show View-&gt;Other-&gt;PixelBender-&gt;PixelBender Outline.</p>
<p>The outline is updated everytime you select a *.pbj file in the Flash Explorer.</p>
<ul>
<li><a href="http://www.joa-ebert.com/files/jar/com.joa_ebert.eclipse.pbjexplorer_1.0.0.jar" target="_blank">Download</a></li>
</ul>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2008/10/08/pixelbender-outline-view/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=245&amp;md5=eece2f20ac783db32dd22d10b03e4de9" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2008/10/08/pixelbender-outline-view/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=245&amp;md5=eece2f20ac783db32dd22d10b03e4de9" type="text/html" />
	</item>
		<item>
		<title>Water with Pixel Bender</title>
		<link>http://blog.joa-ebert.com/2008/05/20/water-with-pixel-bender/</link>
		<comments>http://blog.joa-ebert.com/2008/05/20/water-with-pixel-bender/#comments</comments>
		<pubDate>Tue, 20 May 2008 13:59:25 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[as3]]></category>
		<category><![CDATA[experiments]]></category>
		<category><![CDATA[Flash]]></category>
		<category><![CDATA[hydra]]></category>
		<category><![CDATA[astro]]></category>
		<category><![CDATA[pixelbender]]></category>
		<category><![CDATA[water]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=187</guid>
		<description><![CDATA[Another simple example here. I think it was a little bit hard for me to understand first how to do animations with Pixel Bender based on user input. The user input is currently only a Math.random() but I think you will get the idea. I always put the output of the shader back into it [...]]]></description>
			<content:encoded><![CDATA[<p>Another simple example here. I think it was a little bit hard for me to understand first how to do animations with Pixel Bender based on user input.</p>
<p>The user input is currently only a <code>Math.random()</code> but I think you will get the idea. I always put the output of the shader back into it and get a nice wave effect.</p>
<ul>
<li><a href="http://je2050.de/astro_water.zip" target="_blank">astro_water.zip</a></li>
</ul>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2008/05/20/water-with-pixel-bender/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=187&amp;md5=35c3f83d6790c4bba6a9e2064b57fb2e" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2008/05/20/water-with-pixel-bender/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=187&amp;md5=35c3f83d6790c4bba6a9e2064b57fb2e" type="text/html" />
	</item>
		<item>
		<title>FITC Toronto</title>
		<link>http://blog.joa-ebert.com/2008/04/07/fitc-toronto/</link>
		<comments>http://blog.joa-ebert.com/2008/04/07/fitc-toronto/#comments</comments>
		<pubDate>Mon, 07 Apr 2008 09:29:07 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[hydra]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[fitc2008 2008 flash hydra as3c]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/?p=175</guid>
		<description><![CDATA[FITC is approaching and I am glad to announce that I will do more than just the one session about inlining bytecode. I will also talk about Hydra again &#8212; it will be the &#8220;Chop the Hydra!&#8221; session from FITC Amsterdam. I think it is a great opportunity to share the Hydra-love on the other [...]]]></description>
			<content:encoded><![CDATA[<p>FITC is approaching and I am glad to announce that I will do more than just the one session about inlining bytecode. I will also talk about Hydra again &#8212; it will be the &#8220;Chop the Hydra!&#8221; session from FITC Amsterdam. I think it is a great opportunity to share the Hydra-love on the other side of the hemisphere.</p>
<p>Another interesting part will be the open discussion &#8220;3D in Flash: Now and the Future&#8221; which <a target="_blank" href="http://blog.unitzeroone.com/">Ralph Hauwert</a> will moderate.</p>
<p>I think it will be an awesome event &#8212; hope to see you soon!</p>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2008/04/07/fitc-toronto/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=175&amp;md5=c60803d4ba56a9bbfbe371406e01558a" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2008/04/07/fitc-toronto/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=175&amp;md5=c60803d4ba56a9bbfbe371406e01558a" type="text/html" />
	</item>
		<item>
		<title>Flashforum Conference 2008</title>
		<link>http://blog.joa-ebert.com/2008/02/08/flashforum-konferenz-2008/</link>
		<comments>http://blog.joa-ebert.com/2008/02/08/flashforum-konferenz-2008/#comments</comments>
		<pubDate>Fri, 08 Feb 2008 14:32:16 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[hydra]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[projects]]></category>
		<category><![CDATA[as3c]]></category>
		<category><![CDATA[ffk08]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/2008/02/08/flashforum-konferenz-2008/</guid>
		<description><![CDATA[A new year, a new Flashforum Conference. The organizers Sascha and Marc invite you from 2nd to the 5th of June to Cologne. It is my third time at the Flashforum Conference and I think it will be a great event just like the last two years. This time the conference will be also a [...]]]></description>
			<content:encoded><![CDATA[<div align="center"><a href="http://www.flashforum.de/ffk08/"><img src="http://www.flashforum.de/ffk08/images/ffk08_468x60.gif" alt="Flashforum Konferenz 2008" width="468" height="60" border="0" /></a></div>
<p>A new year, a new <a href="http://ffk08.flashforum.de/" target="_blank">Flashforum Conference</a>. The organizers <a href="http://www.wolter.biz/" target="_blank">Sascha</a> and <a href="http://www.kungbao.de/" target="_blank">Marc</a> invite you from 2nd to the 5th of June to Cologne. It is my third time at the Flashforum Conference and I think it will be a great event just like the last two years. This time the conference will be also a little bit more workshop-based with two extra days (pre and post conference) full of workshops. I will have one session about Hydra like in Amsterdam and another one about my inline bytecode compiler and optimizer. Be prepared &#8212; it will definitly rock.</p>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2008/02/08/flashforum-konferenz-2008/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=162&amp;md5=a481452655e9fb6183e52039f1dedfb4" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2008/02/08/flashforum-konferenz-2008/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=162&amp;md5=a481452655e9fb6183e52039f1dedfb4" type="text/html" />
	</item>
		<item>
		<title>FITC Amsterdam</title>
		<link>http://blog.joa-ebert.com/2007/12/05/fitc-amsterdam/</link>
		<comments>http://blog.joa-ebert.com/2007/12/05/fitc-amsterdam/#comments</comments>
		<pubDate>Wed, 05 Dec 2007 20:24:33 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[hydra]]></category>
		<category><![CDATA[news]]></category>
		<category><![CDATA[personal]]></category>
		<category><![CDATA[fitc 2008]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/2007/12/05/fitc-amsterdam/</guid>
		<description><![CDATA[I am happy to announce that I will speak at the FITC in Amsterdam. My session is titled &#8220;Chop the Hydra!&#8221; and guess what it is about? Probably you noticed that I was working with Hydra a lot in the past. Everyone who worked with BitmapData will love Hydra and I have the honor to [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://je2050.de/blog/wp-content/images/fitc_amsterdam.png" alt="FITC Amsterdam"/><br />
I am happy to announce that I will speak at the <a href="http://www.fitc.ca" target="_blank">FITC</a> in Amsterdam. My session is titled &#8220;<a href="http://www.fitc.ca/presentation_detail.cfm?festival_id=29&#038;presentation_id=598" target="_blank">Chop the Hydra!</a>&#8221; and guess what it is about?</p>
<p>Probably you noticed that I was working with <a target="_blank" href="http://labs.adobe.com/wiki/index.php/AIF_Toolkit">Hydra</a> a lot in the past. Everyone who worked with BitmapData will love Hydra and I have the honor to introduce you into the world of shaders. And even better: It is not only about Flash since Hydra filters work with AfterEffects too.</p>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2007/12/05/fitc-amsterdam/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=156&amp;md5=a47d6b2d9592cd5344b36a2c337b86e3" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2007/12/05/fitc-amsterdam/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=156&amp;md5=a47d6b2d9592cd5344b36a2c337b86e3" type="text/html" />
	</item>
		<item>
		<title>Kuwahara!</title>
		<link>http://blog.joa-ebert.com/2007/10/09/kuwahara/</link>
		<comments>http://blog.joa-ebert.com/2007/10/09/kuwahara/#comments</comments>
		<pubDate>Mon, 08 Oct 2007 22:53:59 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[hydra]]></category>
		<category><![CDATA[kuwahara]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/2007/10/09/kuwahara/</guid>
		<description><![CDATA[Working with Hydra for some days gave me a better knowledge of how things actually work and I thought it might be worth trying something that is a little bit harder. It is very funny to implement a complex filter on the one hand and keeping it Flash compatible on the other hand. You will [...]]]></description>
			<content:encoded><![CDATA[<div align="center"><img src="http://je2050.de/blog/wp-content/images/kuwahara.jpg" width="450" height="150" alt="kuwahara.hydra" border="0"/></div>
<p>Working with Hydra for some days gave me a better knowledge of how things actually work and I thought it might be worth trying something that is a little bit harder. It is very funny to implement a complex filter on the one hand and keeping it Flash compatible on the other hand. You will see a lot of this in the code.</p>
<p>I really enjoyed writing this one. It helped me again a lot and I think you might learn a lot from the source code as well. By the way I started first with a <code>k</code> of <code>4</code> but that was crashing Hydra all the time. Might have looked better but <code>2</code> is also ok. Have fun!</p>
<ul>
<li><a href="http://je2050.de/hydra/kuwahara.hydra">kuwahara.hydra</a></li>
</ul>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2007/10/09/kuwahara/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=150&amp;md5=596b45ccd599a96ac174355a1fddba8e" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2007/10/09/kuwahara/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=150&amp;md5=596b45ccd599a96ac174355a1fddba8e" type="text/html" />
	</item>
		<item>
		<title>Hydra TechnoDots</title>
		<link>http://blog.joa-ebert.com/2007/10/03/hydra-technodots/</link>
		<comments>http://blog.joa-ebert.com/2007/10/03/hydra-technodots/#comments</comments>
		<pubDate>Tue, 02 Oct 2007 22:43:13 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[hydra]]></category>
		<category><![CDATA[technodots]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/2007/10/03/hydra-technodots/</guid>
		<description><![CDATA[Thanks to Zeh for poiting out that a short if is possible and succeeds in the Hydra compiler with Flash warnings enabled. So you can use them only if your values are constant but the use of this is already fantastic. See this nice &#8220;technodots&#8221; filter which shoul be 100% Flash compatible if we can [...]]]></description>
			<content:encoded><![CDATA[<div align="center"><img src="http://je2050.de/blog/wp-content/images/technodots.jpg" alt="technodots.hydra" /></div>
<p>Thanks to <a href="http://labs.zeh.com.br/">Zeh</a> for poiting out that a short if is possible and succeeds in the Hydra compiler with Flash warnings enabled. So you can use them only if your values are constant but the use of this is already fantastic. See this nice &#8220;technodots&#8221; filter which shoul be 100% Flash compatible if we can trust the compiler. It works because all parameters and function results have been set to variables before doing the if.</p>
<p>I think Adobe showed this filter during the keynote. Could not find sources for it and my internet is at home to crappy in order to watch the video again but it was something like this if I remember correct.</p>
<p><b>Update:</b> To complete the list of filters they showed during the keynote here is a cheap twirl as well.</p>
<ul>
<li><a href="http://je2050.de/hydra/technodots.hydra">technodots.hydra</a></li>
<li><a href="http://je2050.de/hydra/twirl.hydra">twirl.hydra</a></li>
</ul>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2007/10/03/hydra-technodots/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=149&amp;md5=2ca58aad9c7be5b72c232cef1357e5f1" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2007/10/03/hydra-technodots/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=149&amp;md5=2ca58aad9c7be5b72c232cef1357e5f1" type="text/html" />
	</item>
		<item>
		<title>More on Hydra</title>
		<link>http://blog.joa-ebert.com/2007/10/02/more-on-hydra/</link>
		<comments>http://blog.joa-ebert.com/2007/10/02/more-on-hydra/#comments</comments>
		<pubDate>Tue, 02 Oct 2007 09:37:12 +0000</pubDate>
		<dc:creator>joa</dc:creator>
				<category><![CDATA[Flash]]></category>
		<category><![CDATA[hydra]]></category>

		<guid isPermaLink="false">http://blog.je2050.de/2007/10/02/more-on-hydra/</guid>
		<description><![CDATA[As I told you I will have a closer look on hydra and the results are nice. I was able to build a Spherize, SinePlasma and OldschoolPlasma in about an hour. I think you have to keep in mind that Hydra will work together with Flash. Plasma functions are a good example because you could [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://je2050.de/blog/wp-content/img/spherize_aif.jpg" alt="spherize2.hydra" /><br />
As I told you I will have a closer look on hydra and the results are nice. I was able to build a Spherize, SinePlasma and OldschoolPlasma in about an hour. I think you have to keep in mind that Hydra will work together with Flash. Plasma functions are a good example because you could generate the texture in grayscale using Hydra and then use a paletteMap() in Flash.</p>
<p>I am not so sure about the spherize though. I have one if-statement inside and they are not allowed if you use Flash. Funny new problems will pop up but I have a good feeling and one thing is for sure: the syntax and editor are already better than what we have with AS3/FlexBuilder! Highlightning of matching brackets, no stupid function and no var keywords. Finally! Can I have that with AS3 please?</p>
<ul>
<li><a href="http://je2050.de/hydra/oldschool.hydra">Oldschool</a> &#8211; Simple oldschool plasma effect. You have to use a color palette with this.</li>
<li><a href="http://je2050.de/hydra/ripple.hydra">Ripple filter</a> &#8211; Sine distortion for an image.</li>
<li><a href="http://je2050.de/hydra/sineplasma.hydra">Sineplasma</a> &#8211; Sine plasma with adjustable levels, frequency and amplitude.</li>
<li><a href="http://je2050.de/hydra/spherize2.hydra">Spherize filter</a> &#8211; Spherical displacement map with adjustable center, radius and refraction strength.</li>
<li><a href="http://je2050.de/hydra/structure.hydra">Structure</a> &#8211; Filter with adjustable 3&#215;3 structuring function.</li>
<li><a href="http://je2050.de/hydra/warp.hydra">Warp</a> &#8211; I wanted to do an affine transformation until I found out it does not work with the way hydra works. I will try again.</li>
<li><a href="http://je2050.de/hydra/gamma.hydra">Gamma correction</a> &#8211; Look how simple it is!</li>
<li><a href="http://je2050.de/hydra/pixelate.hydra">Pixelate</a> &#8211; Could not be easier than that.</li>
<li><a href="http://je2050.de/hydra/sepia.hydra">Sepia</a> &#8211; I hate those ColorMatrixFilter sepia effects. Now this one is fast and has nice quality using Y-transform.</li>
<li><a href="http://je2050.de/hydra/quantization.hydra">Quantization</a> &#8211; A color quantization filter.</li>
</ul>
<div class="none"><div class="g-plusone" data-href="http://blog.joa-ebert.com/2007/10/02/more-on-hydra/" size="standard" count="true"></div></div> <p><a href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=148&amp;md5=02c5155b2b966d1feed7f78d6e4374db" title="Flattr" target="_blank"><img src="http://blog.joa-ebert.com/wp-content/plugins/flattr/img/flattr-badge-large.png" alt="flattr this!"/></a></p>]]></content:encoded>
			<wfw:commentRss>http://blog.joa-ebert.com/2007/10/02/more-on-hydra/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<atom:link rel="payment" href="http://blog.joa-ebert.com/?flattrss_redirect&amp;id=148&amp;md5=02c5155b2b966d1feed7f78d6e4374db" type="text/html" />
	</item>
	</channel>
</rss>

