私は、ユーザーが と対話しGLSurfaceView
て画面上に図形を描画できるプロジェクトに取り組んできました。これはすべてうまく機能しますが、今は 2 つのことを試みています。1) 図面のサムネイルを作成し、2) 図面を保存します。ユーザーは画面よりも大きな画像を描画できることに注意してください。
私の調査が示す限り、これはBitmap
(1) サムネイルの にレンダリングされ、Canvas
2) ファイル システムに保存され、私の両方の目標を達成することを使用して最もよく達成されます)。
最初に、 viaRenderer
からを読み取ろうとしましたが、これからオフスクリーン データを取得できませんでした。代わりに、オフスクリーン バッファを使用してイメージのレンダリングを生成することにしました。これは.GLSurfaceView
glReadPixels
Bitmap
私が現在使用している というクラスのコードを提供する素敵な投稿を見つけました。PixelBuffer
(私はいくつかの微調整を行いましたが、私が経験したすべての問題は、微調整の有無にかかわらず発生しました。)
ここで、コードの を使用すると (フォーラム スレッドが読めないgetBitmap()
場合に備えて以下に投稿します)、大量の. 最初はこれがおかしいと思ったので、調べてみました。何らかの理由で、クラスが OpenGL ES 2.0 を使用しているのに対し、GLSurfaceView は OpenGL ES 1.1 を使用していることが判明しました。私が使用しているデバイス (Galaxy Nexus) は 2.0 をサポートしていません。(さらに、可能な限り幅広いデバイスをサポートしたいと考えています。)PixelBuffer
called unimplemented OpenGL ES API
PixelBuffer
それで、ここに私の質問がありますPixelBuffer
:クラスに OpenGL ES 1.1 APIを強制的に使用させるにはどうすればよいですか? マニフェストに次のものを既に追加しました。
<uses-feature android:glEsVersion="0x00010001" />
さらに、を使用してバージョンを設定しようとしましたがint[] version = new int[] { 1, 1 };
、役に立ちませんでした。
PixelBuffer
私が使用しているコード: Link . を呼び出す問題の行はRenderer
91 行目です。バージョン コードは 39 行目以降にあります。
これは、オブジェクトPixelBuffer
から呼び出されるを作成するために使用するコードです。GLSurfaceView
setEGLConfigChooser(8, 8, 8, 8, 0, 0);
mRenderer = new MyRenderer(this);
setRenderer(mRenderer);
mPixelBuffer = new CPPixelBuffer(1440, 1280); // TODO Temporary hardcode for Galaxy Nexus wallpaper size
mPixelBuffer.setRenderer(mRenderer);
オフスクリーン レンダリングにバージョン 1.1 を使用できない場合、GL サーフェスBitmap
をバージョン 1.1 以下のバージョンに変換する最良の方法は何ですか?
編集:いくつかのテストを通じて、以下のコードを使用するとこれらのエラーが発生することがわかりました:
// int[] version = new int[2];
int[] version = new int[] { // When using this line, as well as the other marked lines, instead of the line above, the errors are produced.
1, 1 // Marked
}; // Marked
int[] attribList = new int[] {
EGL_WIDTH, mWidth,
EGL_HEIGHT, mHeight,
EGL_VERSION, 1, // Marked
EGL_NONE
};
06-11 15:41:52.316: E/libEGL(5618): eglMakeCurrent:674 error 3009 (EGL_BAD_MATCH)
06-11 15:41:52.316: E/libEGL(5618): call to OpenGL ES API with no current context (logged once per thread)
ただし、これらのセットアップのいずれも目前の問題を軽減しません。どちらも私の PasteBin されたコードに存在するだけなので、指摘しておくとよいと思いました。