From e8356bb751c04d093885eef07c328721d6cc7bf7 Mon Sep 17 00:00:00 2001 From: Mattia Iavarone Date: Mon, 5 Aug 2019 20:05:41 +0200 Subject: [PATCH] Avoid releasing location pointers --- .../cameraview/filters/BaseFilter.java | 19 +++++++------------ .../cameraview/filters/Filter.java | 2 +- .../cameraview/internal/egl/EglViewport.java | 2 +- .../cameraview/demo/CameraActivity.java | 2 +- 4 files changed, 10 insertions(+), 15 deletions(-) diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/filters/BaseFilter.java b/cameraview/src/main/java/com/otaliastudios/cameraview/filters/BaseFilter.java index 3134fd50..35890eca 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/filters/BaseFilter.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/filters/BaseFilter.java @@ -65,23 +65,21 @@ public abstract class BaseFilter implements Filter { + " gl_FragColor = texture2D(sTexture, "+fragmentTextureCoordinateName+");\n" + "}\n"; } - // When the model/view/projection matrix is identity, this will exactly cover the viewport. - private static final FloatBuffer VERTEX_POSITION = GlUtils.floatBuffer(new float[]{ + private FloatBuffer vertexPosition = GlUtils.floatBuffer(new float[]{ -1.0f, -1.0f, // 0 bottom left 1.0f, -1.0f, // 1 bottom right -1.0f, 1.0f, // 2 top left 1.0f, 1.0f, // 3 top right }); - private static final FloatBuffer TEXTURE_COORDINATES = GlUtils.floatBuffer(new float[]{ + private FloatBuffer textureCoordinates = GlUtils.floatBuffer(new float[]{ 0.0f, 0.0f, // 0 bottom left 1.0f, 0.0f, // 1 bottom right 0.0f, 1.0f, // 2 top left 1.0f, 1.0f // 3 top right }); - private int vertexModelViewProjectionMatrixLocation = -1; private int vertexTranformMatrixLocation = -1; private int vertexPositionLocation = -1; @@ -127,11 +125,8 @@ public abstract class BaseFilter implements Filter { } @Override - public void onDestroy() { - vertexModelViewProjectionMatrixLocation = -1; - vertexTranformMatrixLocation = -1; - vertexTextureCoordinateLocation = -1; - vertexPositionLocation = -1; + public void onDestroy(int programHandle) { + // Do nothing. } @NonNull @@ -165,15 +160,15 @@ public abstract class BaseFilter implements Filter { // Enable the "aPosition" vertex attribute. // Connect vertexBuffer to "aPosition". GLES20.glEnableVertexAttribArray(vertexPositionLocation); - GlUtils.checkError("glEnableVertexAttribArray"); - GLES20.glVertexAttribPointer(vertexPositionLocation, 2, GLES20.GL_FLOAT, false, 8, VERTEX_POSITION); + GlUtils.checkError("glEnableVertexAttribArray: " + vertexPositionLocation); + GLES20.glVertexAttribPointer(vertexPositionLocation, 2, GLES20.GL_FLOAT, false, 8, vertexPosition); GlUtils.checkError("glVertexAttribPointer"); // Enable the "aTextureCoord" vertex attribute. // Connect texBuffer to "aTextureCoord". GLES20.glEnableVertexAttribArray(vertexTextureCoordinateLocation); GlUtils.checkError("glEnableVertexAttribArray"); - GLES20.glVertexAttribPointer(vertexTextureCoordinateLocation, 2, GLES20.GL_FLOAT, false, 8, TEXTURE_COORDINATES); + GLES20.glVertexAttribPointer(vertexTextureCoordinateLocation, 2, GLES20.GL_FLOAT, false, 8, textureCoordinates); GlUtils.checkError("glVertexAttribPointer"); } diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/filters/Filter.java b/cameraview/src/main/java/com/otaliastudios/cameraview/filters/Filter.java index 709adbd9..ebdcb580 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/filters/Filter.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/filters/Filter.java @@ -7,7 +7,7 @@ public interface Filter { void onCreate(int programHandle); - void onDestroy(); + void onDestroy(int programHandle); void draw(float[] transformMatrix); diff --git a/cameraview/src/main/java/com/otaliastudios/cameraview/internal/egl/EglViewport.java b/cameraview/src/main/java/com/otaliastudios/cameraview/internal/egl/EglViewport.java index bcec19bc..e5adcc98 100644 --- a/cameraview/src/main/java/com/otaliastudios/cameraview/internal/egl/EglViewport.java +++ b/cameraview/src/main/java/com/otaliastudios/cameraview/internal/egl/EglViewport.java @@ -42,7 +42,7 @@ public class EglViewport { public void release() { if (mProgramHandle != -1) { - mFilter.onDestroy(); + mFilter.onDestroy(mProgramHandle); GLES20.glDeleteProgram(mProgramHandle); mProgramHandle = -1; } diff --git a/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java b/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java index e77a9f8a..a4e1ef8f 100644 --- a/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java +++ b/demo/src/main/java/com/otaliastudios/cameraview/demo/CameraActivity.java @@ -332,7 +332,7 @@ public class CameraActivity extends AppCompatActivity implements View.OnClickLis } else { mCurrentFilter = 0; } - camera.setFilter(mAllFilters[mCurrentFilter]); + camera.setFilter(mAllFilters[mCurrentFilter].newInstance()); } @Override