ここ最近のアプリバージョンアップ作業中にわかったことを記録しておきます。
・仮想フレームバッファの更新(結局以前の処理のまま保留)
java側で確保したバッファ(RGB565)にNDK側で描画しているが、これまで受け渡しをGetShortArrayElementsでやっていた。
void ネイティブ関数(JNIEnv* env, jobject th, jshortArray vArray)
{
jshort *canvas = env->GetShortArrayElements(vArray, NULL);
<なんらか描画処理>
env->ReleaseShortArrayElements(vArray, canvas, 0);
}
しかしGetPrimitiveArrayCriticalの方が速いという話も聞いたのでやってみた。
void ネイティブ関数(JNIEnv* env, jobject th, jshortArray vArray)
{
jshort *const canvas = (jshort*)env->GetPrimitiveArrayCritical(vArray, NULL);
<なんらか描画処理>
env->ReleasePrimitiveArrayCritical(vArray, canvas, NULL);
}
実機では動いたけど、なぜかエミュレータでは動かなかったので結局GetShortArrayElementsのまま保留中。
・行列のかけ方
Matrixのリファレンスどおりだけど、preConcat,postConcatでかける順序を変えられるらしい。
その他のpre/postメソッドも同様らしい。
・Bitmapメモリが足りなくなったとき
Bitmap#createBitmapを繰り返し実行するとメモリが無くなった。
これもリファレンスどおりだけどBitmap#recycleしたあとにcreateすれば問題なかった。
private static Bitmap sBitmap;
<なんらか処理>
sBitmap.recycle();
sBitmap= Bitmap.createBitmap(幅, 高さ, Bitmap.Config.RGB_565);
コメントを残す