У меня есть приложение для Android, которое использует немного OpenGL, работающего на Galaxy Nexus с ICS. После включения аппаратного ускорения и использования моей активности OpenGL некоторые из этих текстур украдены системой, а теперь в моих списках и других элементах пользовательского интерфейса. Как будто мои указатели GL, полученные с помощью GLES20.glGenTextures, на самом деле не являются новыми указателями, а скорее переписывают те, которые используются средством визуализации окон.Android - ICS - аппаратное ускорение крадет мои текстуры OpenGL
В любом случае должен быть какой-то брандмауэр или песочница между системой рисования экрана ОС и моим приложением, нет?
Отключение аппаратного ускорения полностью отображается в хорошем состоянии, но пользовательский интерфейс является изменчивым (и маслянистым гладким на 2.3 и ниже в любом случае). Отключение его от активности по активности тоже не помогает.
Скриншот (до/после)
Обычно повторяющийся точечный рисунок вытяжке, теперь изображение (от камеры в данном случае) я загружен в OpenGL в различной активности - http://a.yfrog.com/img532/9245/t81k.png
Gen/Load текстуры
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);
Basic рисовать
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 ... –