<?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.alumican.net &#187; tool</title>
	<atom:link href="http://blog.alumican.net/tag/tool/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.alumican.net</link>
	<description>日々の記憶と記録とActionScript とその周辺</description>
	<lastBuildDate>Thu, 19 Jan 2012 05:51:29 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>PixelBender (.pbj) をActionScriptに埋め込む</title>
		<link>http://blog.alumican.net/2010/07/12_165011</link>
		<comments>http://blog.alumican.net/2010/07/12_165011#comments</comments>
		<pubDate>Mon, 12 Jul 2010 07:50:11 +0000</pubDate>
		<dc:creator>alumican</dc:creator>
				<category><![CDATA[DEVELOPMENT]]></category>
		<category><![CDATA[ActionScript3.0]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[wonderfl]]></category>

		<guid isPermaLink="false">http://blog.alumican.net/?p=1775</guid>
		<description><![CDATA[まじめにPixelBenderやろうかなと思いつつ、いちいちpbjファイルをロードするのも面倒くさいなと思ったので、ちょっと便利そうなツールを作ってみました。

pbjファイルをローカルからアップロードすると、Pixel [...]]]></description>
			<content:encoded><![CDATA[<p>まじめにPixelBenderやろうかなと思いつつ、いちいちpbjファイルをロードするのも面倒くさいなと思ったので、ちょっと便利そうなツールを作ってみました。</p>
<div style="text-align:center;width:100%;margin-bottom:15px;"><iframe title="Embedded PixelBender Generator - wonderfl build flash online" scrolling="no" src="http://wonderfl.net/blogparts/gD6k" width="465" height="490" style="border:0px black solid;"></iframe></div>
<p>pbjファイルをローカルからアップロードすると、PixelBenderのコードを内部に埋め込んだActionScriptのクラスを生成します。pbjファイルがパラメータを含む場合は、各パラメータに対して自動的にgetter/setterも用意します。インプットに対しても自動でgetter/setterを生成します。</p>
<p>このツールの利点としては</p>
<ul>
<li>コンパイル時にPixelBenderのコードを含めることができるので、pbjファイルを外部読み込みする必要が無くなる</li>
<li>pbjファイルにどのようなパラメータやインプットを設定すればいいのか分かる</li>
</ul>
<p>といったことがあります。wonderflに投稿する際にメインのコードとPixelBenderをひとつのファイルにまとめたり、パラメータやインプットの指定ミスを減らせることができるかと思います。<br />
<span id="more-1775"></span><br />
エンコード/デコード処理はこのようになっています。</p>
<pre><code>//pbjファイル → 埋め込みコード
function encode(bytes:ByteArray):Array {
    var code:Array = new Array();
    bytes.position = 0;
    while (bytes.bytesAvailable) {
        code.push(bytes.readByte());
    }
    return code;
}

encode(loader.data);</code></pre>
<pre><code>//埋め込みコード → Shaderインスタンス
function decode(code:Array):ByteArray {
    var bytes:ByteArray = new ByteArray();
    for (var i:uint = 0, l:uint = code.length; i < l; ++i) {
        bytes.writeByte(code[i]);
    }
    return bytes;
}

var shader:Shader = new Shader( decode(code) );</code></code></pre>
<p><strong>おまけ</strong><br />
結局使わなかったのですが、このツールを作るにあたりpbjファイルをディスアセンブルするクラスをC++からASに移植しました。<br />
» <a href="http://www.kaourantin.net/2008/09/pixel-bender-pbj-files.html">Pixel Bender .pbj files （C++版のディスアセンブラ）</a></p>
<p>当初はpbjファイルをディスアセンブルしてパラメータのgetter/setterを自動生成ｓていたのですが、Shaderインスタンスのdataプロパティを列挙すれば必要な情報を取得できることに、移植完了後に気づきました。なのでディスアセンブラはお蔵入りとなってしまったのですが、せっかくなので置いておきます。使い方はクラスファイルの最初のほうを見てください。<br />
» <a href="http://lab.alumican.net/embedded_pixelbender_generator/PBJDecoder.as">PBJDecoder.as</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alumican.net/2010/07/12_165011/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

