食品偽装だらけ ― 2013/11/04
阪急阪神ホテルズのレストランでの食品偽装が発覚して以来、全国各地のホテルで次々に同じような偽装が明るみになっているようです。
これだけあると、最初に批判された阪急阪神ホテルズでは「どこもやってることだ」と言いたかったんじゃないでしょうか?
むしろ便乗ではなく、自分のところで問題を発覚させたという点では他のホテルよりマシなのではないかとも思ってしまいます。
ただ種類とか産地とか明らかな間違いはともかく、「フレッシュ」みたいな曖昧な表現は偽装の判断が難しいですけどね。
「一口ひれかつ」なんか一口で食べられたためしがないですし。
この前もラーメン屋で注文した「具だくさんつけ麺」が全然具だくさんに見えませんでしたが、これはどうも間違って普通のつけ麺を出していたらしい。
これだけあると、最初に批判された阪急阪神ホテルズでは「どこもやってることだ」と言いたかったんじゃないでしょうか?
むしろ便乗ではなく、自分のところで問題を発覚させたという点では他のホテルよりマシなのではないかとも思ってしまいます。
ただ種類とか産地とか明らかな間違いはともかく、「フレッシュ」みたいな曖昧な表現は偽装の判断が難しいですけどね。
「一口ひれかつ」なんか一口で食べられたためしがないですし。
この前もラーメン屋で注文した「具だくさんつけ麺」が全然具だくさんに見えませんでしたが、これはどうも間違って普通のつけ麺を出していたらしい。
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側から取得するように変更しました。
プロジェクト一式はこちらから。
最近のコメント