まいむぞうです。
安藤さん、お返事ありがとうございます。
> A1) GL10.glTexImage2D()したときのメモリの扱い
> glTexImage2D() で指定したテクスチャ画像バッファは
> glTexImage2D() の後、解放してもかまいません。
おぉなるほど。
やはりそうなんですね。
> (姑息なテクニックとしてはテクスチャを生成したらすぐに
> 画面の見えないところに一度ダミー描画すると、
> ハードウェア全体のメモリ効率が良くなります)
これは、常駐テクスチャとなることでキャッシュが使えるから、ということでしょうか?
> A2) マルチスレッド下でのGL10.glBindTexture()
> OpenGL は関数によって様々な情報を定義する際、
> 一つの流れしかありませんので「干渉してしまう」という理解で正しいです。
こちらも、OpenGLのステートは1つだけ、ということですね。
GLSurfaceViewなどを使う場合で、別スレッドを使って画像などを取り込みたい場合は、
別スレッドで画像を取ってきて、どこか可視性を確保した場所に画像を置いておいて、
GLスレッド側のキューにアップデート用の処理を積んでおく感じでしょうか。
これに限らず、OpenGLは内部構造がどうなっているのか理解しないと取っ付きづらい感がありますね。
赤本などを熟読すれば理解できるんだと思うのですが、さすがに内容が濃くて
一読して済ませている事が多いです。
概念図などがわかりやすくまとまっているような資料があればいいんだけど。。。
この他に
Q3) SurfaceとSurfaceHolderとGL10などのインスタンスの関係
オライリーさんの「初めてのAndroid」でさらっと解説があるのですが、
いまいち感覚が掴めていません。このへんがキモだと思うのですが。。。
Surface ~ OpenGL ESで描画を行ったときに最終的な画像が入るGPU上のフレームバッファのこと?
SurfaceHolder ~ 実際にSurfaceHolderで保持している情報ってなに?
GL10などのインスタンス ~ GPU上のフレームバッファが壊れるから、その上で動いていたGL10などのインスタンスも壊れる、ってこと?
# そもそも自分の知識はPC9801のVRAMあたりで止まっているので、GPUが載ったときの動作を理解してないのが
# 最大の要因な気がしますorz
# GPU上のフレームバッファは、その時ディスプレイに見えている画像と同一と思っていいんでしょうか?
Activityのライフサイクル上から見た時、SurfaceとSurfaceHolderとGL10などのインスタンスがそれぞれ
どう動いているのかが理解できていないのが原因だと思うのですが、何か参考になる資料はありますでしょうか?
Q4) GL10のインスタンスの同一性
GLSurfaceViewではGL10のインスタンスは、描画ごとに渡されたインスタンスを使うような設計になっていますが、これはなぜでしょう?
別のActivityがフォアグラウンドになったときなどに、Surfaceと連動してGL10のインスタンスが壊れるから、
GLSurfaceViewが再度フォアグラウンドになったときに、GL10のインスタンスが再生成されるため、という理解で良いでしょうか?
この、再生生成されたGL10のインスタンスには、以前に登録されたテクスチャや各種パラメータは残っているんでしょうか?
たまにRendererのonDrawFrame()以外のタイミング(描画以外のタイミング)で
GL10のインスタンスを使いたいな(OpenGLに触りたいな)と思う時があるのですが、
onSurfaceCreated()などで渡ってきたGL10のインスタンスを保存しておくのではなく、
やはりこれはonDrawFrame()のタイミングまでぐっと我慢するべきなんでしょうか。
Q5) OpenGL ES関連処理の後片付けや、Activityライフサイクルとの連動
たとえばゲームなどでメニュー用Activityと、OpenGL ESを使うゲーム本体Activityが別になっている場合、
ゲームをやめてメニューに戻ってきた場合などに、OpenGL ES関連の後片付けは必要でしょうか?
(正確には後片付けが必要かどうかはそのアプリによるのでしょうが)
ゲーム本体Activityが完全に破棄された場合(onDestroy後)は自動的に後片付けされてしまうと思うのですが、
GLSurfaceViewなどを見ると、あまり後片付けの事は考慮されていないように見えます。
必要な人はonPause()やonResume()をうまくハンドリングしてキューに入れなさい、ということなんでしょうか。
(この場合でも、GLThreadのキューからはGL10のインスタンスを取れないので、やりたい事ができない事が多いような)
> このあたり、OpenGL ES の技術情報や、テクニック、はまりどころ、
> グラフィックスハードウェアの構造や仕組みなど、基本的なところを含め、何かの機会に
> まとめてセミナーできたり、本にしたりできるといいな~とは思っているのですが.....
これ、すごく欲しいです!!
Android関係のプログラミングの本は全部買ってるんですが、今の所OpenGL関係は扱ってなかったり、
扱っていてもページ数が少なくて初歩的な所までといった感じの本が多いので、
「AndroidでのOpenGL ES」という切り口の資料があると、とても助かります。
(NDK使ってネイティブで描画というのも、やっている人いるんでしょうか?)
------------------------------------------------------------------------------------------------------
大路裕介(おおみちゆうすけ)/まいむぞう
mail:
mai...@gmail.com
2009/8/10 Yukio Andoh <
yukio...@gmail.com>: