OpenGLES 2.0 アプリでテクスチャとして使用するビットマップを読み込んでいます
Bitmapfactory経由でビットマップを読み込んで使用すると、すべて問題ありません。そのようです:
ロード
public void loadBitmaps{
backgrounds= BitmapFactory.decodeResource(view.getResources(), R.drawable.backgrounds, BMFOptions);
...
使用する
//Apply as texture to OpenGL Quad
リサイクル
backgrounds.recycle();
.
さて、問題は…………
.
ビットマップを bitmapDrawable としてロードすると、問題が発生します (以下のコードで説明)。そのようです:
.
クラス レベルで BitmapDrawable を宣言する
public class Res{
BitmapDrawable bd;
...
ロード
public void loadBitmaps(){
bd = (BitmapDrawable) view.getResources().getDrawable(R.drawable.backgrounds);
backgrounds = bd.getBitmap();
...
使用する
//Apply as texture to OpenGL Quad
リサイクル
backgrounds.recycle();
これを行うと、最初は機能しますが、もう一度押して終了し、アプリを再起動すると、テクスチャが表示されず、黒いクワッドしか表示されません。
次のいずれかを実行すると問題が解決します。その理由を知りたいのですが......
- クラス変数からbdの宣言を移動して、次を使用しています。
BitmapDrawable bd = (BitmapDrawable) view.getResources().getDrawable(R.drawable.backgrounds);
- または、ビットマップを作成した後にこれを行うだけです。
bd = ヌル;
- 最後に、ビットマップをリサイクルしないこともできますが、これはオプションではありません
XML エイリアス経由でビットマップにアクセスしているため、BitmapFactory を使用するのではなく、この方法でビットマップにアクセスする必要があることに注意してください。