ビルドするAndroidのバージョンを2.1以上にしてください。
その後で、SampleCameraGLActivity.java のonCreateメソッドの処理の一番最後に
mGLSurfaceView.setZOrderOnTop(true);を加えてください。
こんな感じです。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Create OpenGL SurfaceView
mGLSurfaceView = new MyGLSurfaceView(this);
// Create CameraView
mCameraView = new CameraView(this, mGLSurfaceView);
// Set Contents
//setContentView(mGLSurfaceView);
setContentView(mCameraView);
LayoutParams params = new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
addContentView(mGLSurfaceView, params);
mGLSurfaceView.setZOrderOnTop(true);
}
この問題の原因ですが、どうもandroid:screenOrientation="landscape"をやると、
SurfaceのZ値の値が強制されるようです。
Androidの描画システムは複数のSurfaceから色情報をSurfaceFlingerが受け取って、
SurfaceFlingerがそれらを結合して、ビデオバッファとして送り出すという構造になっています。
普通のビュー(ImageViewやButtonなどのビュー)の場合はRootViewが持っている1つのSurfaceに描画内容が
集約されるので、指定したレイアウトに従って描画されるので順番が狂うことはないですが、
カメラビューやGLSurfaceVIewのようなSurfaceViewを継承したビューの場合は独立したSurfaceを持っています。
複数のSurfaceが存在する場合、SurfaceFlingerは各Surfaceが持っているZ値で描画順序を決定します。
これのせいで、指定したレイアウトとは異なる描画順序でビューが描画されてしまいます。
setZOrderOnTop(true)はAndroid2.1以降にSurfaceViewに追加されたメソッドでそのSurfaceViewのSurfaceのZ値を
一番上に描画するように変更します。