ICS搭載のGalaxy Nexusで動作するOpenGLのビットを使用するAndroidアプリがあります。ハードウェアアクセラレーションをオンにしてOpenGLのアクティビティを使用すると、それらのテクスチャのいくつかがシステムによって盗まれ、現在リストビューやその他のUI要素に盗まれています。 GLES20.glGenTexturesを介して得られたGLポインタは、実際には新鮮なポインタではなく、ウィンドウレンダラで使用されるポインタを上書きするものです。Android - ICS - ハードウェアアクセラレーションがOpenGLテクスチャを盗む
いずれの場合でも、OSの画面描画システムと私のアプリケーションの間に何らかの種類のファイアウォールやサンドボックスが存在するはずです。
ハードウェアアクセラレーションを完全にオフにすると、表示はうまくなりますが、UIが不安定になります(どちらの方法でも、滑らかで滑らかな滑らかさ)。それをアクティビティによってオフ/オンにすることは役に立ちません。
スクリーン(前/後)通常
反復ビットマップ描画可能、Iは異なる活性のOpenGLにロードされ(この場合はカメラから)今画像 - http://a.yfrog.com/img532/9245/t81k.png
ジェン/ロードテクスチャ
int[] image = new int[1];
GLES20.glGenTextures(1, image, 0);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER,GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,GLES20.GL_LINEAR);
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmp, 0);
基本
01を描きますGLES20.glViewport(0, 0, width, height);
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, 0);
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
GLES20.glUseProgram(shader.program);
GLES20.glUniform1i(GLES20.glGetUniformLocation(shader.program, "imageTexture"), 0);
GLES20.glVertexAttribPointer(Attributes.VERTEX, 2, GLES20.GL_FLOAT, true, 0, squareVertices);
GLES20.glEnableVertexAttribArray(Attributes.VERTEX);
GLES20.glVertexAttribPointer(Attributes.TEXTUREPOSITON, 2, GLES20.GL_FLOAT, true, 0, textureVertices);
GLES20.glEnableVertexAttribArray(Attributes.TEXTUREPOSITON);
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, image[0]);
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_STRIP, 0, 4);
これは非常識に聞こえます。あなたはスクリーングラブといくつかのコードを投稿できますか? –
そのスクリーングラブも非常識に見えます。 EGLコンテキストセットアップコードを投稿できますか?あなたは何とかリサイクルされたGLの文脈を継承しているかもしれません... –