2011.12.28

【Android SDK】onSurfaceCreatedの再呼び出し

アプリを作っていて予想外の問題が起きたので書いておく。

状況

Activityが切り替わり、復帰したタイミングにonSurfaceCreatedが呼ばれる。

onSurfaceCreatedはGLSurfaceViewが作られたときに呼び出されるんじゃないのでしょうか?

いろんな感じでチェックしてみたけど機種ごとにも動きが違うっぽい。
IS03だと確実にActivity切り替え時に呼ばれる。
Galaxy S2だとメモリ使用量が増えてくると呼ばれるっぽい。

GLSurfaceViewの仕様

GLSurfaceViewの仕様はこんな感じらしい。
Link:GLSurfaceView.Renderer - Androidon

以下抜粋。

EGLレンダリングコンテキストが失われる場合があります.これは通常、デバイスがスリープ状態から復帰したときに起こります.EGLコンテキストが失われたとき、全てのopenGLソース(例えばテクスチャとか)は自動的に削除対象になります.
レンダリングを正常に保つためにレンダラーはまだ必要とされているが足りなくなってしまっているリソースを再構築していかなければなりません.そういった場面でonSurfaceCreated(GL10, EGLConfig)は利用できます.

こういうことらしいので、Activityの切り替え時に消える可能性があるのを覚悟しながら処理を行わないといけないらしい。


仕様とはいえ、せっかくOpenGL側に転送しておいたものを削除されてしまうのはなかなかきびしい。
3Dとかだと頂点データもその対象になるのでさらに痛い。

何かしらうまい対処方法はないだろうか・・・

Open GL ES 2.0 プログラミングガイド Open GL ES 2.0 プログラミングガイド
Aaftab Munshi Dan Ginsburg Dave Shreiner アフタブ・ムンシ ダン・ギンズバーグ デーブ・シュライナー 松田 晃一

ピアソン桐原 2009-11-01
売り上げランキング : 32973

Amazonで詳しく見る by G-Tools

ニャッキ格闘列伝 > プログラム >

前の記事:
次の記事:

関連記事

コメントリスト

コメントなし

コメント



*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

こんなタグが使えるみたいよ:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>