Cleanup EglViewport

pull/535/head
Mattia Iavarone 6 years ago
parent 5f61090406
commit 20485100da
  1. 59
      cameraview/src/main/java/com/otaliastudios/cameraview/internal/egl/EglViewport.java
  2. 5
      cameraview/src/main/java/com/otaliastudios/cameraview/picture/SnapshotGlPictureRecorder.java
  3. 2
      cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java
  4. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/video/encoding/TextureMediaEncoder.java

@ -44,7 +44,7 @@ public class EglViewport extends EglElement {
private FloatBuffer mTextureCoordinatesArray = floatBuffer(FULL_RECTANGLE_TEX_COORDS); private FloatBuffer mTextureCoordinatesArray = floatBuffer(FULL_RECTANGLE_TEX_COORDS);
// Stuff from Texture2dProgram // Stuff from Texture2dProgram
private int mProgramHandle; private int mProgramHandle = -1;
private int mTextureTarget; private int mTextureTarget;
private int mTextureUnit; private int mTextureUnit;
@ -54,13 +54,8 @@ public class EglViewport extends EglElement {
private int maPositionLocation; private int maPositionLocation;
private int maTextureCoordLocation; private int maTextureCoordLocation;
// private int muKernelLoc; // Used for filtering private Filter mFilter;
// private int muTexOffsetLoc; // Used for filtering private boolean mFilterChanged = false;
// private int muColorAdjustLoc; // Used for filtering
private Filter mShaderEffect;
private boolean mIsShaderChanged = false;
public EglViewport() { public EglViewport() {
this(new NoFilter()); this(new NoFilter());
@ -69,30 +64,28 @@ public class EglViewport extends EglElement {
public EglViewport(@NonNull Filter filter) { public EglViewport(@NonNull Filter filter) {
mTextureTarget = GLES11Ext.GL_TEXTURE_EXTERNAL_OES; mTextureTarget = GLES11Ext.GL_TEXTURE_EXTERNAL_OES;
mTextureUnit = GLES20.GL_TEXTURE0; mTextureUnit = GLES20.GL_TEXTURE0;
mShaderEffect = filter; mFilter = filter;
initProgram(); createProgram();
} }
private void initProgram() { private void createProgram() {
release(); release(); // Release old program if present.
mProgramHandle = createProgram(mShaderEffect.getVertexShader(), mShaderEffect.getFragmentShader()); mProgramHandle = createProgram(mFilter.getVertexShader(), mFilter.getFragmentShader());
maPositionLocation = GLES20.glGetAttribLocation(mProgramHandle, mShaderEffect.getPositionVariableName()); maPositionLocation = GLES20.glGetAttribLocation(mProgramHandle, mFilter.getPositionVariableName());
checkLocation(maPositionLocation, mShaderEffect.getPositionVariableName()); checkLocation(maPositionLocation, mFilter.getPositionVariableName());
maTextureCoordLocation = GLES20.glGetAttribLocation(mProgramHandle, mShaderEffect.getTexttureCoordinateVariableName()); maTextureCoordLocation = GLES20.glGetAttribLocation(mProgramHandle, mFilter.getTexttureCoordinateVariableName());
checkLocation(maTextureCoordLocation, mShaderEffect.getTexttureCoordinateVariableName()); checkLocation(maTextureCoordLocation, mFilter.getTexttureCoordinateVariableName());
muMVPMatrixLocation = GLES20.glGetUniformLocation(mProgramHandle, mShaderEffect.getMVPMatrixVariableName()); muMVPMatrixLocation = GLES20.glGetUniformLocation(mProgramHandle, mFilter.getMVPMatrixVariableName());
checkLocation(muMVPMatrixLocation, mShaderEffect.getMVPMatrixVariableName()); checkLocation(muMVPMatrixLocation, mFilter.getMVPMatrixVariableName());
muTexMatrixLocation = GLES20.glGetUniformLocation(mProgramHandle, mShaderEffect.getTextureMatrixVariableName()); muTexMatrixLocation = GLES20.glGetUniformLocation(mProgramHandle, mFilter.getTextureMatrixVariableName());
checkLocation(muTexMatrixLocation, mShaderEffect.getTextureMatrixVariableName()); checkLocation(muTexMatrixLocation, mFilter.getTextureMatrixVariableName());
}
public void release(boolean doEglCleanup) {
if (doEglCleanup) GLES20.glDeleteProgram(mProgramHandle);
mProgramHandle = -1;
} }
public void release() { public void release() {
release(true); if (mProgramHandle != -1) {
GLES20.glDeleteProgram(mProgramHandle);
mProgramHandle = -1;
}
} }
public int createTexture() { public int createTexture() {
@ -114,9 +107,9 @@ public class EglViewport extends EglElement {
return texId; return texId;
} }
public void changeShaderFilter(@NonNull Filter shaderEffect){ public void setFilter(@NonNull Filter filter){
this.mShaderEffect = shaderEffect; this.mFilter = filter;
mIsShaderChanged = true; mFilterChanged = true;
} }
@ -144,9 +137,9 @@ public class EglViewport extends EglElement {
FloatBuffer vertexBuffer, FloatBuffer vertexBuffer,
FloatBuffer texBuffer) { FloatBuffer texBuffer) {
if (mIsShaderChanged){ if (mFilterChanged) {
initProgram(); createProgram();
mIsShaderChanged = false; mFilterChanged = false;
} }
check("draw start"); check("draw start");

@ -103,9 +103,8 @@ public class SnapshotGlPictureRecorder extends PictureRecorder {
} }
@Override @Override
public void public void onFilterChanged(@NonNull Filter filter) {
onFilterChanged(@NonNull Filter filter) { mViewport.setFilter(filter);
mViewport.changeShaderFilter(filter);
} }
}); });
} }

@ -331,7 +331,7 @@ public class GlCameraPreview extends FilterCameraPreview<GLSurfaceView, SurfaceT
} }
mCurrentFilter = filter; mCurrentFilter = filter;
if (mOutputViewport != null) { if (mOutputViewport != null) {
mOutputViewport.changeShaderFilter(filter); mOutputViewport.setFilter(filter);
} }
// Need to synchronize when iterating the Collections.synchronizedSet // Need to synchronize when iterating the Collections.synchronizedSet

@ -137,7 +137,7 @@ public class TextureMediaEncoder extends VideoMediaEncoder<TextureConfig> {
if (event.equals(FILTER_EVENT)) { if (event.equals(FILTER_EVENT)) {
Filter filter = (Filter) data; Filter filter = (Filter) data;
mViewport.changeShaderFilter(filter); mViewport.setFilter(filter);
} else if (event.equals(FRAME_EVENT)) { } else if (event.equals(FRAME_EVENT)) {
Frame frame = (Frame) data; Frame frame = (Frame) data;
if (frame == null) { if (frame == null) {
@ -224,7 +224,7 @@ public class TextureMediaEncoder extends VideoMediaEncoder<TextureConfig> {
mWindow = null; mWindow = null;
} }
if (mViewport != null) { if (mViewport != null) {
mViewport.release(true); mViewport.release();
mViewport = null; mViewport = null;
} }
if (mEglCore != null) { if (mEglCore != null) {

Loading…
Cancel
Save