summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Wright <michaelwr@google.com>2014-10-13 17:30:31 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2014-10-13 17:30:32 +0000
commit265d3e9d3eb6915d9ca9da5fcd1ddb29b5f8bc3b (patch)
treed7a32440d17f3e8752d1bd66e4ad20e4850b2b50
parent02c4a225ffa32e67255517a0275d7a4c1a738619 (diff)
parent5018df761ba7dfa443a9abc728ddcd20d51a75c2 (diff)
downloadframeworks_base-265d3e9d3eb6915d9ca9da5fcd1ddb29b5f8bc3b.zip
frameworks_base-265d3e9d3eb6915d9ca9da5fcd1ddb29b5f8bc3b.tar.gz
frameworks_base-265d3e9d3eb6915d9ca9da5fcd1ddb29b5f8bc3b.tar.bz2
Merge "Clean-up ColorFade's shaders and buffers." into lmp-dev
-rw-r--r--services/core/java/com/android/server/display/ColorFade.java41
1 files changed, 29 insertions, 12 deletions
diff --git a/services/core/java/com/android/server/display/ColorFade.java b/services/core/java/com/android/server/display/ColorFade.java
index 920fdfb..f549f3d 100644
--- a/services/core/java/com/android/server/display/ColorFade.java
+++ b/services/core/java/com/android/server/display/ColorFade.java
@@ -226,12 +226,15 @@ final class ColorFade {
GLES20.GL_VERTEX_SHADER);
int fshader = loadShader(context, com.android.internal.R.raw.color_fade_frag,
GLES20.GL_FRAGMENT_SHADER);
+ GLES20.glReleaseShaderCompiler();
if (vshader == 0 || fshader == 0) return false;
mProgram = GLES20.glCreateProgram();
GLES20.glAttachShader(mProgram, vshader);
GLES20.glAttachShader(mProgram, fshader);
+ GLES20.glDeleteShader(vshader);
+ GLES20.glDeleteShader(fshader);
GLES20.glLinkProgram(mProgram);
@@ -254,6 +257,11 @@ final class ColorFade {
return true;
}
+ private void destroyGLShaders() {
+ GLES20.glDeleteProgram(mProgram);
+ checkGlErrors("glDeleteProgram");
+ }
+
private boolean initGLBuffers() {
//Fill vertices
setQuad(mVertexBuffer, 0, 0, mDisplayWidth, mDisplayHeight);
@@ -288,6 +296,11 @@ final class ColorFade {
return true;
}
+ private void destroyGLBuffers() {
+ GLES20.glDeleteBuffers(2, mGLBuffers, 0);
+ checkGlErrors("glDeleteBuffers");
+ }
+
private static void setQuad(FloatBuffer vtx, float x, float y, float w, float h) {
if (DEBUG) {
Slog.d(TAG, "setQuad: x=" + x + ", y=" + y + ", w=" + w + ", h=" + h);
@@ -314,10 +327,20 @@ final class ColorFade {
Slog.d(TAG, "dismiss");
}
- destroyScreenshotTexture();
- destroyEglSurface();
- destroySurface();
- mPrepared = false;
+ if (mPrepared) {
+ attachEglContext();
+ try {
+ destroyScreenshotTexture();
+ destroyGLShaders();
+ destroyGLBuffers();
+ destroyEglSurface();
+ } finally {
+ detachEglContext();
+ }
+ destroySurface();
+ GLES20.glFlush();
+ mPrepared = false;
+ }
}
/**
@@ -468,14 +491,8 @@ final class ColorFade {
private void destroyScreenshotTexture() {
if (mTexNamesGenerated) {
mTexNamesGenerated = false;
- if (attachEglContext()) {
- try {
- GLES20.glDeleteTextures(1, mTexNames, 0);
- checkGlErrors("glDeleteTextures");
- } finally {
- detachEglContext();
- }
- }
+ GLES20.glDeleteTextures(1, mTexNames, 0);
+ checkGlErrors("glDeleteTextures");
}
}