assetsファイル読み込み2013/11/04

三角ポリゴンの描画ができたので、次はテクスチャの描画に移ります。
テクスチャのデータは 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の入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
○○○人を右に!

コメント:

トラックバック

このエントリのトラックバックURL: http://raseene.asablo.jp/blog/2013/11/04/7038202/tb