Marmalade (SDK)

Marmalade SDKはIdeaworks3D Limitedが開発し、ライセンス提供するクロスプラットフォーム対応のソフトウェア開発キット (SDK) であり、主にモバイル端末向けのアプリを開発、テスト、展開するためのライブラリ、サンプル、ドキュメント、ツールが含まる。 
歴史.
Marmalade SDKはかつてAirplay SDKという名称で提供されていたが、2011年6月のVersion 5.0.0のリリースからリブランドされた。本SDKはIdeaworks3D社内でモバイル端末向けのゲームを開発するために元々、内製ライブラリとして活用されていたもので、後に製品化された。
Marmalade SDK設計の根底は ”Write once, run anywhere" （一度プログラムすれば、どこでも実行が可能）というもので、異なるプラットフォーム向けのAPIを使用して、異なるプログラミング言語でそれぞれ書き直すのではなく、単一のコードベースからコンパイルし、全ての対応プラットフォームへの展開を実現する。このため、各プラットフォームのコアAPIに対して抽象化レイヤーとして機能するC/C++ベースのAPIを提供している。
2012年9月にはWeb Marmaladeがリリースされた。これは同様に”write once, run anywhere”の特色を持つライブラリ群から構成され、HTML5, CSS 3 及び JavaScript 開発に対応したもので、加速度センサやGPSデータなどモバイル端末の機能を活用できるAPIが提供された。
Marmaladeは2013年2月にRAD (計算機プログラミング環境) システムMarmalade Quickをリリースした。このMarmalade QuickはMarmalade SDKの上にハイレベルライブラリ群を提供するもので、プログラマーに短期間でゲームやアプリ開発を可能にするスクリプト言語Luaに対応した。
機能.
ライセンス.
Marmalade SDKを使用するにあたっては、ライセンスを購入する必要がある。展開プラットフォームの違いや、技術サポートのレベルにおける違いによって4種類のライセンスが存在する。SDKがインストールされた各コンピュータ端末にそれぞれライセンスが必要となる。
ライセンスのレベルは、低コストから順に次のようになる。
プラットフォーム.
Marmalade SDKは次のプラットフォームへのアプリ展開に対応している。実際に展開可能なプラットフォームは取得したライセンスレベルによって異なる。
C/C++ ベースの開発.
主製品のMarmalade SDKは次の２つの層から構成されている。
Marmalade Systemと呼ばれるローレベルC言語 APIは抽象化レイヤーを提供し、メモリ管理、ファイルアクセス、タイマー、ネットワーク機能、各種I/F (例：加速度センサー、キーボード、タッチスクリーン)及びサウンド、ビデオ出力などの端末機能にプログラマがアクセス出来るようにする。
Marmalade Studioと呼ばれるC++ APIは2D（例:ビットマップ、フォントの処理）、3Dグラフィクス描画（例:3Dメッシュ描画、ボーンアニメーション）などの機能を提供します。また、拡張可能なリソース管理システムとHTTPネットワーク機能も含まれる。
グラフィクス.
Marmalade SDKはモバイル端末のグラフィクス描画機能に OpenGL ES API（OpenGL ES 1.x、2.x共に対応）を直接使用するか、もしくはMarmalade Studio層のミドルウェアを介してアクセスすることが出来る。
Marmalade Studioはビットマップや3Dモデルデータ等のグラフィクスリソースのロード及び描画の機能を提供する。OpenGL ESを直接使用する場合には、これら機能はデベロッパー側で別途実装する必要がある。Marmalade StudioはAutodesk 3ds Max及びAutodesk Maya用のエクスポータープラグインを提供し、これらの3Dパッケージで作成した3Dモデルやアニメーションをアプリ内で使用することが出来る。
また、描画専用のハードウエアを搭載していない比較的古い端末対応には、ソフトウエア描画処理オプションが提供されていますが、これは既にレガシーモジュールという位置付けになっている。
オーディオ.
SE効果音や音楽の出力には、ローレベルMarmalade System APIが圧縮オーディオやビデオフォーマットのデータを再生する機能を提供する。
Marmalade Systemには、マルチチャネル対応のサウンドミキサー機能があり、複数チャネルの非圧縮サンプル音源を、ピッチ及びボリューム制御を各チャネルに対して行い、同時再生することが出来る。