したがって、Native Client はブラウザーから C++ コードを実行できます。NXエンジン は C++ から構築されており、Android で実行するように微調整できることがわかっています。では、NX エンジンが Cave Story を実行でき、それが理論的にはネイティブ クライアントで実行できる場合、ページにアクセスしてブラウザ内でゲームをプレイできるようにするには、どのように動作させてホストするのでしょうか?
2 に答える
NXEngineをNativeClientに移植するには、NXEngine自体(もちろん!)とその依存関係を移植する必要があります。それらのそれぞれを考えてみましょう:
- SDLはすでに移植されていますが、移植には2、3のバージョンが遅れているため、更新を使用できます。これは、
naclports
コミュニティリポジトリhttp://code.google.com/p/naclports/source/browse#svn%2Ftrunk%2Fsrc%2Flibraries%2FSDL-1.2.14にあります(以下についての私のメモを参照してくださいnaclports
)。 - SDL_ttfは、依存関係を含めて移植する必要があります。これは、私が知る限り、フリータイプです。
- freetypeはすでに移植されており、http: //code.google.com/p/naclports/source/browse#svn%2Ftrunk%2Fsrc%2Flibraries%2Ffreetype-2.1.10のnaclportsにあります。
ネイティブクライアントへの移植は、多くの点でLinuxのような新しいオペレーティングシステムへの移植に非常によく似ています。ただし、いくつかの重要な違いがあります。
Native Clientの「オペレーティングシステム」APIは、ブラウザの機能へのアクセスを提供するAPIのセットであるPepper(PPAPI)です。移植作業の大部分は、通常、ファイルを開いたり、グラフィックを表示したり、サウンドを再生したりするためにPepper APIを使用するようにコードを取得することです(ただし、SDLを使用すると、入力、サウンド、およびグラフィックがはるかに簡単になります)。ファイルを開くに
nacl_mounts
は、Pepper File APIをラップするライブラリを使用することがよくあります。これにより、アプリのHTML5 WebストレージまたはURLをファイルシステムとしてWebにマウントし、使い慣れfopen
たfread
、などを使用できます。Pepper25から、の一部はnacl_mounts
NaClSDKに含まれています。ネイティブクライアントモジュールは、ネイティブオペレーティングシステムコールを使用できず、ホストファイルシステムにアクセスできません。これはセキュリティ上の理由と移植性を確保するためです。
現在、Pepperには非実験的なフォントAPIはありません。したがって、ネイティブクライアントはにアクセスできないため、すべてのフォントレンダリングはコードで実行する必要があり、
.ttf
ファイルはアプリの一部として提供する必要があります.ttf
。セキュリティ上の理由から、ホストシステム上のファイル。
Chrome / Pepper 25推奨:これまで、PepperAPI呼び出しはメインスレッドからのみ行うことができました。これには、たとえば、あるスレッドでレンダリングし、別のスレッドで音楽を再生するように設計されたゲームやその他のマルチスレッドプログラムの大幅なリファクタリングが必要でした。Chrome 25以降、この制限はなくなりました。詳細については、https://developers.google.com/native-client/dev/peppercpp/classpp_1_1_message_loopを参照してください。Chrome 25以降をターゲットにして、NaClSDKのPepper25バージョンを使用すると、このクラスのアプリケーションのリファクタリング作業の量が減る可能性があります。
WebページでのNativeClientの実行:質問には、「ページにアクセスして、ブラウザー内でゲームをプレイする」ことができると記載されています。現時点では、ChromeのみがNativeClientをサポートしていることを知っておくことが重要です。また、ネイティブクライアントが機能するためにウェブアプリをChromeウェブストアに配置する必要がある現世代のネイティブクライアントと、任意のウェブページでネイティブクライアントのコンテンツを許可する次期ポータブルネイティブクライアントとの間にも重要な違いがあります。ウェブページの訪問者が最小限の迂回で現在の世代のNaClベースのアプリを使用できるようにするために、Chromeウェブストアのインラインインストール(https://developers.google.com/chrome/web-store/docs/inline_installationを参照)を回避できます。ユーザーがChromeウェブストアにアクセスする必要があります。
naclports
:に関する注記 naclports
は、NativeClientのコミュニティベースのリポジトリです。いくつかのライブラリと以前のポートが含まれています。ライブラリのリストはnaclports
、http://code.google.com/p/naclports/source/browse/trunk/src/libraries/で確認できます。ポートの実行方法の便利な例が含まれていますが、naclports
それはしばしば壊れて、ボランティア/ベストエフォートベースで維持されていることを考えると、修正するのに時間がかかる可能性があるため、気弱な人向けではありません。
追加のポインタ:*この回答には、ガイドへの追加のヒントとポインタがいくつかあります。外部ライブラリでNaCLを使用するGoogleChrome拡張機能。