added setting shaders

pull/527/head
Suneet Agrawal 6 years ago
parent 3f7dfc3d9b
commit 32ef8f5538
  1. 16
      cameraview/src/main/java/com/otaliastudios/cameraview/CameraView.java
  2. 9
      cameraview/src/main/java/com/otaliastudios/cameraview/internal/egl/EglViewport.java
  3. 4
      cameraview/src/main/java/com/otaliastudios/cameraview/preview/GlCameraPreview.java

@ -26,6 +26,7 @@ import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
@ -67,6 +68,8 @@ import com.otaliastudios.cameraview.preview.CameraPreview;
import com.otaliastudios.cameraview.preview.GlCameraPreview;
import com.otaliastudios.cameraview.preview.SurfaceCameraPreview;
import com.otaliastudios.cameraview.preview.TextureCameraPreview;
import com.otaliastudios.cameraview.shadereffects.ShaderInterface;
import com.otaliastudios.cameraview.shadereffects.effects.BlackAndWhiteEffect;
import com.otaliastudios.cameraview.size.AspectRatio;
import com.otaliastudios.cameraview.size.Size;
import com.otaliastudios.cameraview.size.SizeSelector;
@ -2129,4 +2132,17 @@ public class CameraView extends FrameLayout implements LifecycleObserver {
}
//endregion
//region Effects
public void changeEffect(ShaderInterface shader) {
if (mCameraPreview instanceof GlCameraPreview) {
String effect = shader.getShader(((GlCameraPreview) mCameraPreview).getView());
((GlCameraPreview) mCameraPreview).setEffectFragmentShader(effect);
} else {
LOG.e("changeEffect", "changeEffect is supported only for GLSurfaceView");
}
}
//endregion
}

@ -79,10 +79,7 @@ public class EglViewport extends EglElement {
public EglViewport() {
mTextureTarget = GLES11Ext.GL_TEXTURE_EXTERNAL_OES;
//mProgramHandle = createProgram(SIMPLE_VERTEX_SHADER, SIMPLE_FRAGMENT_SHADER);
ShaderInterface effect = new BlackAndWhiteEffect();
mProgramHandle = createProgram(SIMPLE_VERTEX_SHADER, effect.getShader(null));
mProgramHandle = createProgram(SIMPLE_VERTEX_SHADER, SIMPLE_FRAGMENT_SHADER);
maPositionLocation = GLES20.glGetAttribLocation(mProgramHandle, "aPosition");
checkLocation(maPositionLocation, "aPosition");
@ -124,6 +121,10 @@ public class EglViewport extends EglElement {
return texId;
}
public void changeEffectFragmentShader(String fragmentShader){
mProgramHandle = createProgram(SIMPLE_VERTEX_SHADER, fra);
}
public void drawFrame(int textureId, float[] textureMatrix) {
drawFrame(textureId, textureMatrix,
mVertexCoordinatesArray,

@ -308,4 +308,8 @@ public class GlCameraPreview extends CameraPreview<GLSurfaceView, SurfaceTexture
protected Renderer instantiateRenderer() {
return new Renderer();
}
public void setEffectFragmentShader(String fragmentShader){
mOutputViewport.changeEffectFragmentShader(fragmentShader);
}
}

Loading…
Cancel
Save