DrawDeviceクラスはOpenGLの初期化、設定を行うクラスです。
アンドロイドのOpenGLはアクティビティと密接に関わっているので
その仕様に合わせて設計します。
まず、OpenGLを使用するアクティビティを確認しましょう。
public class OpenGlActivity extends Activity { // コンストラクタ public OpenGlActivity() { super(); m_View = null; } // 作成 @Override public void onCreate( Bundle savedInstanceState ) { super.onCreate( savedInstanceState ); m_View = new GLSurfaceView( this ); m_View.setRenderer( this ); setContentView( m_View ); } // 再開 @Override public void onResume() { super.onResume(); m_View.onResume(); } // 一時停止 @Override public void onPause() { m_View.onPause(); super.onPause(); } // サーフェイスが作られた @Override public void onSurfaceCreated( GL10 gl, EGLConfig config ) { // ここでOpenGL初期化 } // サーフェイスのサイズが変わった @Override public void onSurfaceChanged( GL10 gl, int width, int height ) { // ここでビューポート設定 } // 描画フレーム @Override public void onDrawFrame( GL10 gl ) { // ここで毎フレーム描画 } private GLSurfaceView m_View; }
重要なのは onSurfaceCreated()、onSurfaceChanged()、onDrawFrame() です。
OpenGLを操作するのは各メソッドに渡ってきている”GL10”クラスです。
このクラスをアクティビティが管理しているのでDrawDeviceクラスが持つのは危険ですね。
なので、各メソッドでGL10を渡すようにします。
とりあえず用意するメソッドはこのようなメソッドです。
Create() |
OpenGLの初期化 onSurfaceCreated()で呼び出す。 |
UpdateDrawArea() |
ビューポートの設定 onSurfaceChanged()で呼び出す。 |
Begin() |
フレーム毎の描画開始の宣言。 onDrawFrame()で呼び出す。 ここでGL10をDrawDeviceに持たせる。 そうすることによってフレーム中の描画がGL10を気にせず行えるようになる。 |
End() |
フレーム毎の描画終了宣言。 onDrawFrame()で呼び出す。 Begin()で持っていたGL10をここで開放しておく。 |
具体的な内容は次から説明していきます。