assetsファイル読み込み ― 2013/11/04
三角ポリゴンの描画ができたので、次はテクスチャの描画に移ります。
テクスチャのデータは assetsフォルダに置いておきます。res/rawに置くという手もありますが、assetsの方がいろいろ融通がききそうなので。
ただ、assetsフォルダからの読み込みにもいくつか手順がありますので、今回はその辺りをやってみます。
assetsの読み込みには幾通りかのやり方があるようなのですが、Android OS 2.3以降で使える AssetManagerを使う方法にしてみます。
BaseActivity.java
AssetManagerは java側で取得できるので、initNativeで native側に送ります。
SysMain.cpp
それを native側で受け取って、AAssetManagerに変換します。
ファイル読み込み用の関数です。
データバッファを mallocで取っているので、使い終わったら freeで解放してください。
ファイル読み込みのサンプルです。
assetsフォルダには、test.txtというテキスト(終端に'\0'を追加)を置いておきます。
AppMain.cpp
load_assetで文字列データを読み込んで、ログに出力しています。
最後についでなんですが、アプリの定義は native側に持っていこうと、1フレームの間隔は initNativeの戻り値で native側から取得するように変更しました。
プロジェクト一式はこちらから。
テクスチャのデータは assetsフォルダに置いておきます。res/rawに置くという手もありますが、assetsの方がいろいろ融通がききそうなので。
ただ、assetsフォルダからの読み込みにもいくつか手順がありますので、今回はその辺りをやってみます。
assetsの読み込みには幾通りかのやり方があるようなのですが、Android OS 2.3以降で使える AssetManagerを使う方法にしてみます。
BaseActivity.java
public void onSurfaceChanged(GL10 gl, int width, int height) { int period = initNative(width, height, getAssets()); // native部初期化 if ( future == null ) { // 定期実行開始 future = executor.scheduleAtFixedRate(new Runnable() { @Override public void run() { surface_view.requestRender(); // 描画リクエスト } }, 0, period, TimeUnit.MILLISECONDS); } }
AssetManagerは java側で取得できるので、initNativeで native側に送ります。
SysMain.cpp
asset_manager = AAssetManager_fromJava(env, mgr); // asset読み込みマネージャー assert(asset_manager != NULL);
それを native側で受け取って、AAssetManagerに変換します。
namespace sys { AAssetManager* asset_manager; // asset読み込み用 /**************************************** assetファイル読み込み 引数 name = ファイル名 戻り値 データ size:データサイズ ****************************************/ void* load_asset(const char* name, u32* size) { AAsset* _asset = AAssetManager_open(asset_manager, name, AASSET_MODE_BUFFER); assert(_asset); size_t _size = AAsset_getLength(_asset); // ファイルサイズ void* _buf = malloc(_size); // データバッファ AAsset_read(_asset, _buf, _size); // データ読み込み AAsset_close(_asset); if ( size ) { *size = (u32)_size; } return _buf; } }
ファイル読み込み用の関数です。
データバッファを mallocで取っているので、使い終わったら freeで解放してください。
ファイル読み込みのサンプルです。
assetsフォルダには、test.txtというテキスト(終端に'\0'を追加)を置いておきます。
AppMain.cpp
/************ 初期化 ************/ void init_app(void) { u32 _size; char* _str = (char*)sys::load_asset("test.txt", &_size); // テスト文字列 LOGI("[%s] size:%d", _str, (int)_size); free(_str); }
load_assetで文字列データを読み込んで、ログに出力しています。
最後についでなんですが、アプリの定義は native側に持っていこうと、1フレームの間隔は initNativeの戻り値で native側から取得するように変更しました。
プロジェクト一式はこちらから。
コメント
トラックバック
このエントリのトラックバックURL: http://raseene.asablo.jp/blog/2013/11/04/7038202/tb
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※投稿には管理者が設定した質問に答える必要があります。