« 2010年8月 | トップページ | 2010年11月 »

2010年10月25日 (月)

ONScripter for NetWalker 20100105-8

7は公開するの忘れてました・・・orz。

例によって、高速化&本家のバグ修正に追随、です。でも、本家が取り入れている新機能については、まだ取り入れていません。まだ、「ひぐらし」を2話までしかクリアしてない身で、「うみねこ」なんて、とてもとても・・・(^^;。

しか~しっ!(大げさ) 今回は、結構大幅な高速化(当社比)となっています(笑)。オーバークロックカーネルと組み合わせると、「はにはに」や「オーガストファンBOX」なども、「default.ttf」を用意してやるだけで(データの変換などしなくても)、OPムービーも含めて、ほぼストレスなくそのまま動きます。

具体的には、

・立ち絵の移動・・・約15%の高速化
・スキップ速度・・・約25%の高速化

というところです。感覚的にはもっと速くなっている気もしますが、まあ、それはそれと言うことで。

「onscripter_20100105-8-0ubuntu1_armel.deb」をダウンロード

そういえば、まだ「||」(or)も実装していません・・・。

閑話休題

さて、今回の高速化ですが、これまでに比べるとかなり大幅なものとなっています。種を明かせば、インラインアセンブラを使ったんですね、はい。とはいうものの、どこに使うかが問題です。αブレンドに使うという手もあったんですが、まだGCC&ARMのインラインアセンブラの知識&理解が十分ではないので断念しました。

というわけで、それ以外に問題が大きそうだったメモリ転送、具体的にはmemcpyとSDL_BlitSurfaceの速度アップを考えることにしました。

初めはNEONの拡張レジスタを使ってみたんですが、NEONを有効にしてビルドしたsmpegと干渉してしまうみたいで、BGMが遅くなってしまう問題が発生してしまったので却下。で、ARMの通常のレジスタと複数レジスタ転送命令を使ってみた所、それなりの効果があった、というわけです。まあ、きちんと命令のサイクル数や分岐回数を計算して組んでるわけではないので、まだ効率アップの余地は十分あるんですが、とりあえず一区切りと言うことで。

んでもって、ソースはこちら。

「onscripter_20100105-8-0ubuntu1.tar.gz」をダウンロード

インラインアセンブラを使った転送ルーチンは、AnimationInfo.cppの中にあります。まあ、できるだけ見ないでやって下さいませ。一応ARM汎用なので、同じ系列のCPUを使っているものであればそのまま流用できると思います。言うまでもなく、保証はしませんが・・・。

まあ、バグなど見つけたら、お知らせ下さい。

| | コメント (3) | トラックバック (0)

« 2010年8月 | トップページ | 2010年11月 »