我有一个Android应用程序,它使用在带有ICS的Galaxy Nexus上运行的一些OpenGL。在打开硬件加速并使用我的OpenGL活动之后,系统会窃取其中一些纹理,现在在我的listviews和其他UI元素中。它好像我通过GLES20.glGenTextures获得的GL指针实际上并不是新的指针,而是覆盖了窗口渲染器使用的指针。
在任何情况下,操作系统屏幕绘图系统和我的应用程序之间都应该有某种防火墙或沙箱,不是吗?
关闭hardwareAcceleration完全显示正常,但用户界面不稳定(并且在2.3及更低的任何一种情况下,黄油都很平滑)。通过活动关闭/打开活动也没有帮助。
屏幕截图(之前/之后)
通常是一个重复的位图可绘制,现在是一个图像(在本例中来自相机)我在不同的活动中加载到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);
基本抽奖
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);