[processing]2.0で何が変わる?

Written by uechoco 12月 20
この記事を読む時間:552くらい

お久しぶりです。@uechocoです。最近多忙なのでブログに顔出せてないですが、せめて1つくらいアドベントカレンダーには参加したいと思いまして、Processing Advent Calendar 2012の20日目を担当させて頂きます。

最近Processing 2.0 beta 7もリリースされて、2.0系の開発もしっかりと進んでいるようです。ところでそもそも2.0系って何が変わったの?ってところの情報は、英語の変更履歴のページには掲載されているのですが、日本語の資料はほとんど見かけません。Processingが今後どう変わっていくのかを少しご紹介したいと思います。

OpenGLベースの描画

Processing 1.0系をやってきた方は、size()関数の描画モードにはP2DやP3Dと指定することが多く、気合の入った作品だとOPENGLと指定することが多かったと思います。これらはソフトウェアベースの描画のP2D/P3Dと、ハードウェアベースの描画のOPENGLという住み分けでした。今人的な間隔では、多くのProcessingの公開作品のうち、出来が良い・カッコイイ作品は、たいていOPENGLで書かれていた気がします。

Processing 2.0系では、P2DとP3Dという指定はそのまま残るのですが、どちらも内部ではハードウェアベースのOpenGLで描画するようになりました。内部仕様がOpenGLに変わったのには大きく2つの理由があります。1つは、将来的にProcessingのほとんどの作品はOpenGL描画のものになるだろうという開発者たちの感覚があり、そうであるならばそこに注力しようという流れがあったからでした。そしてもう1つは、後述のAndroid対応でOpenGLのほうが有利な点があったからです。

Android・JavaScript対応

最近のProcessing界隈の話題だと、Processing 1.0系の後半にAndroid対応が始まったり、また別の流れでProcessing.jsというものが立ち上がっていました。これらのクロスプラットフォームの流れはProcessing 2.0系で整理され、PDEがJavaモード・Androidモード・JavaScriptモードをサポートするようになります。

また、今後はモードという形でPDEが様々なデバイス・プラットフォームに対応したりPDE自体が進化したりします。上記に挙げた以外には、Experimentalモード・CoffeeScriptモードなどが確認されています。Experimentalモードについては、アドベントカレンダー9日目の「Processing 2.0 beta 7 がリリースされました | ProcessingJP」でも触れられていますので参考にしてみてください。

新しいプラットフォームがサポートされ始める一方で、Javaアプレットがサポートされなくなりました。最近ではJavaアプレットがインストールされているWebブラウザも減ってきており、時代の流れというのもあるでしょう。加えて、Javaアプレットをサポートし続けるのは、かなりの労力を割かなければならないようでした。とはいえWeb上で作品を公開したいという需要が減るわけではないので、今後はProcessing.jsなどで代替していく必要があるでしょう。

immediateモード・retainedモード

Processing 2.0系がOpenGLを全面採用した経緯は最初のトピックで説明したとおりですが、2.0系のOpenGLの使い方には、2種類に分類ができます。それがimmediateモードとretainedモードです

immediateモードは、従来のProcessingの描画方法と変わりありません。その場で線や四角などの図形を描き、ビデオメモリに送るという方式です。気兼ねなくプログラムが書けるという意味でProcessingならではの素晴らしい描画方法なのですが、一方で速度をやや犠牲にしている方法でもあります。

retainedモードは、immediateモードとは考え方が違います。retainedモードは、予め線や四角などの図形を定義してビデオメモリに送っておき、描画するときはビデオメモリ上からただ表示するだけという描画方法です。予め図形を定義してしまうものの、後から色や形や位置を変更することは可能です。この方法だと、ハードウェアレベルではただ描画するだけなので、immediateモードよりも高速に描画することができ、またハードウェア性能を活かすことができるのでAndroid端末などでも効率よく描画することが可能です。一方で、図形の定義を後から変更するときなど、プログラムの書き方がimmediateモードよりも複雑になります。

immediateモードとretaindモードの書き方の違い、速度の違いを見るには、Processing 2.0系のExampleの中の[Demos]-[Performance]あたりに、同一のプログラムをそれぞれのモードで書いたものがありますので、見てみてください。

その他の細かい変更

その他にも、細かい仕様変更があります。textMode()の廃止、text()の引数変更、delay()の復活、rect()の角丸四角形の描画対応などなど。

 

Processing 2.0は大きな変更がいっぱいありますが、このような知識が先にあると、変更点の理解も進みやすいかと思います。