From 8dfd8d72c9c5d5130fcbf5d9f09671d235bfdcdc Mon Sep 17 00:00:00 2001 From: KillerInk Date: Fri, 2 Jul 2021 10:49:44 +0200 Subject: [PATCH] move fp and zebra into supershader, limit to gl3 --- app/src/main/assets/shader/focuspeak.fsh | 34 -------- .../main/assets/shader/focuspeak_sobel.fsh | 71 ---------------- .../main/assets/shader/focuspeak_zebra.fsh | 81 ------------------- app/src/main/assets/shader/preview.fsh | 26 ------ app/src/main/assets/shader/supershader.fsh | 79 ++++++++++++++++++ app/src/main/assets/shader/zebra.fsh | 44 ---------- app/src/main/assets/shader/zebramethod.fsh | 28 ------- app/src/main/java/freed/gl/GLTex.java | 23 ++---- app/src/main/java/freed/gl/GlVersion.java | 2 +- app/src/main/java/freed/gl/MainRenderer.java | 76 +++++------------ app/src/main/java/freed/gl/PreviewModel.java | 19 +++++ .../main/java/freed/gl/program/FPShape.java | 29 ------- .../freed/gl/program/FocuspeakZebraShape.java | 27 ------- .../freed/gl/program/SuperShaderShape.java | 49 +++++++++++ .../java/freed/gl/program/ZebraShape.java | 27 ------- .../freed/gl/shader/FocusPeakZebraShader.java | 17 ---- .../freed/gl/shader/FpFragmentShader.java | 17 ---- .../gl/shader/PreviewFragmentShader.java | 17 ---- .../gl/shader/SobelFpFragmentShader.java | 19 ----- .../{ZebraShader.java => SuperShader.java} | 6 +- 20 files changed, 178 insertions(+), 513 deletions(-) delete mode 100644 app/src/main/assets/shader/focuspeak.fsh delete mode 100644 app/src/main/assets/shader/focuspeak_sobel.fsh delete mode 100644 app/src/main/assets/shader/focuspeak_zebra.fsh delete mode 100644 app/src/main/assets/shader/preview.fsh create mode 100644 app/src/main/assets/shader/supershader.fsh delete mode 100644 app/src/main/assets/shader/zebra.fsh delete mode 100644 app/src/main/assets/shader/zebramethod.fsh delete mode 100644 app/src/main/java/freed/gl/program/FPShape.java delete mode 100644 app/src/main/java/freed/gl/program/FocuspeakZebraShape.java create mode 100644 app/src/main/java/freed/gl/program/SuperShaderShape.java delete mode 100644 app/src/main/java/freed/gl/program/ZebraShape.java delete mode 100644 app/src/main/java/freed/gl/shader/FocusPeakZebraShader.java delete mode 100644 app/src/main/java/freed/gl/shader/FpFragmentShader.java delete mode 100644 app/src/main/java/freed/gl/shader/PreviewFragmentShader.java delete mode 100644 app/src/main/java/freed/gl/shader/SobelFpFragmentShader.java rename app/src/main/java/freed/gl/shader/{ZebraShader.java => SuperShader.java} (63%) diff --git a/app/src/main/assets/shader/focuspeak.fsh b/app/src/main/assets/shader/focuspeak.fsh deleted file mode 100644 index 06936c5cf..000000000 --- a/app/src/main/assets/shader/focuspeak.fsh +++ /dev/null @@ -1,34 +0,0 @@ -#GLES3 -#version 300 es -#line 1 -#extension GL_OES_EGL_image_external_essl3 : require -precision mediump float; -uniform samplerExternalOES sTexture; -out vec4 Output; -in vec2 texCoord; -#END_GLES - -#GLES2 -#extension GL_OES_EGL_image_external : require -#extension GL_OES_standard_derivatives : enable -precision mediump float; -uniform mediump samplerExternalOES sTexture; -varying mediump vec2 texCoord; -#END_GLES - -uniform vec4 peak_color; -uniform float peak_strength; -void main() { - - vec4 color = texture(sTexture, texCoord); - float gray = ((color.r + color.g +color.b)/3.0); - - float focusPeak = step(peak_strength, length(vec2(dFdx(gray), dFdy(gray)))); - -#GLES2 - gl_FragColor = mix(color, peak_color, focusPeak); -#END_GLES -#GLES3 - Output = mix(color,peak_color, focusPeak); -#END_GLES -} \ No newline at end of file diff --git a/app/src/main/assets/shader/focuspeak_sobel.fsh b/app/src/main/assets/shader/focuspeak_sobel.fsh deleted file mode 100644 index a7b2b1d28..000000000 --- a/app/src/main/assets/shader/focuspeak_sobel.fsh +++ /dev/null @@ -1,71 +0,0 @@ -#GLES3 -#version 300 es -#line 1 -#extension GL_OES_EGL_image_external_essl3 : require -precision mediump float; -uniform samplerExternalOES sTexture; -out vec4 Output; -in vec2 texCoord; -#END_GLES - -#GLES2 -#extension GL_OES_EGL_image_external : require -#extension GL_OES_standard_derivatives : enable -precision mediump float; -uniform mediump samplerExternalOES sTexture; -varying mediump vec2 texCoord; -uniform vec2 texRes; -#END_GLES - -uniform vec4 peak_color; -uniform float peak_strength; -//test -void main() -{ -#GLES3 - vec4 color = texture(sTexture, texCoord); - vec2 texSize = vec2(textureSize(sTexture, 0)); -#END_GLES -#GLES2 - vec4 color = texture2D(sTexture, texCoord); - vec2 texSize = texRes; -#END_GLES - - float w = 1.0 / texSize.x; - float h = 1.0 / texSize.y; - - vec4 n[9]; -#GLES3 - n[0] = texture(sTexture, texCoord + vec2( -w, -h)); - n[1] = texture(sTexture, texCoord + vec2(0.0, -h)); - n[2] = texture(sTexture, texCoord + vec2( w, -h)); - n[3] = texture(sTexture, texCoord + vec2( -w, 0.0)); - n[4] = texture(sTexture, texCoord); - n[5] = texture(sTexture, texCoord + vec2( w, 0.0)); - n[6] = texture(sTexture, texCoord + vec2( -w, h)); - n[7] = texture(sTexture, texCoord + vec2(0.0, h)); - n[8] = texture(sTexture, texCoord + vec2( w, h)); -#END_GLES -#GLES2 - n[0] = texture2D(sTexture, texCoord + vec2( -w, -h)); - n[1] = texture2D(sTexture, texCoord + vec2(0.0, -h)); - n[2] = texture2D(sTexture, texCoord + vec2( w, -h)); - n[3] = texture2D(sTexture, texCoord + vec2( -w, 0.0)); - n[4] = texture2D(sTexture, texCoord); - n[5] = texture2D(sTexture, texCoord + vec2( w, 0.0)); - n[6] = texture2D(sTexture, texCoord + vec2( -w, h)); - n[7] = texture2D(sTexture, texCoord + vec2(0.0, h)); - n[8] = texture2D(sTexture, texCoord + vec2( w, h)); -#END_GLES - - vec4 sobel_edge_h = n[2] + (peak_strength*n[5]) + n[8] - (n[0] + (peak_strength*n[3]) + n[6]); - vec4 sobel_edge_v = n[0] + (peak_strength*n[1]) + n[2] - (n[6] + (peak_strength*n[7]) + n[8]); - vec4 sobel = sqrt(((sobel_edge_h * sobel_edge_h) + (sobel_edge_v * sobel_edge_v))); - if(sobel == min(sobel, vec4(0.3,0.3,0.3,1))) - sobel = vec4(0,0,0,1); -#END_GLES - Output = mix(color, peak_color, sobel); -#GLES2 - gl_FragColor = mix(color, peak_color, sobel); -#END_GLES -} \ No newline at end of file diff --git a/app/src/main/assets/shader/focuspeak_zebra.fsh b/app/src/main/assets/shader/focuspeak_zebra.fsh deleted file mode 100644 index b29dd560c..000000000 --- a/app/src/main/assets/shader/focuspeak_zebra.fsh +++ /dev/null @@ -1,81 +0,0 @@ -#GLES3 -#version 300 es -#line 1 -#extension GL_OES_EGL_image_external_essl3 : require -precision mediump float; -uniform samplerExternalOES sTexture; -out vec4 Output; -in vec2 texCoord; -#END_GLES - -#GLES2 -#extension GL_OES_EGL_image_external : require -#extension GL_OES_standard_derivatives : enable -precision mediump float; -uniform mediump samplerExternalOES sTexture; -varying mediump vec2 texCoord; -uniform vec2 texRes; -#END_GLES - -uniform vec4 peak_color; -uniform float peak_strength; -uniform float float_position; -uniform float zebra_high; -uniform float zebra_low; -#IMPORT shader/zebramethod.fsh -//test -void main() -{ -#GLES3 - vec4 color = texture(sTexture, texCoord); - vec2 texSize = vec2(textureSize(sTexture, 0)); -#END_GLES -#GLES2 - vec4 color = texture2D(sTexture, texCoord); - vec2 texSize = texRes.xy; -#END_GLES - - float w = 1.0 / texSize.x; - float h = 1.0 / texSize.y; - - vec4 n[9]; -#GLES3 - n[0] = texture(sTexture, texCoord + vec2( -w, -h)); - n[1] = texture(sTexture, texCoord + vec2(0.0, -h)); - n[2] = texture(sTexture, texCoord + vec2( w, -h)); - n[3] = texture(sTexture, texCoord + vec2( -w, 0.0)); - n[4] = texture(sTexture, texCoord); - n[5] = texture(sTexture, texCoord + vec2( w, 0.0)); - n[6] = texture(sTexture, texCoord + vec2( -w, h)); - n[7] = texture(sTexture, texCoord + vec2(0.0, h)); - n[8] = texture(sTexture, texCoord + vec2( w, h)); -#END_GLES -#GLES2 - n[0] = texture2D(sTexture, texCoord + vec2( -w, -h)); - n[1] = texture2D(sTexture, texCoord + vec2(0.0, -h)); - n[2] = texture2D(sTexture, texCoord + vec2( w, -h)); - n[3] = texture2D(sTexture, texCoord + vec2( -w, 0.0)); - n[4] = texture2D(sTexture, texCoord); - n[5] = texture2D(sTexture, texCoord + vec2( w, 0.0)); - n[6] = texture2D(sTexture, texCoord + vec2( -w, h)); - n[7] = texture2D(sTexture, texCoord + vec2(0.0, h)); - n[8] = texture2D(sTexture, texCoord + vec2( w, h)); -#END_GLES - - vec4 sobel_edge_h = n[2] + (peak_strength*n[5]) + n[8] - (n[0] + (peak_strength*n[3]) + n[6]); - vec4 sobel_edge_v = n[0] + (peak_strength*n[1]) + n[2] - (n[6] + (peak_strength*n[7]) + n[8]); - vec4 sobel = sqrt((sobel_edge_h * sobel_edge_h) + (sobel_edge_v * sobel_edge_v)); - if(sobel == min(sobel, vec4(0.3,0.3,0.3,1))) - sobel = vec4(0,0,0,1); - - - vec4 out_color = getZebra(texCoord, color,float_position,zebra_high,zebra_low); - -#GLES3 - Output = mix(out_color, peak_color, sobel); -#END_GLES - -#GLES2 - gl_FragColor = mix(out_color, peak_color, sobel); -#END_GLES -} \ No newline at end of file diff --git a/app/src/main/assets/shader/preview.fsh b/app/src/main/assets/shader/preview.fsh deleted file mode 100644 index 8fe517ea4..000000000 --- a/app/src/main/assets/shader/preview.fsh +++ /dev/null @@ -1,26 +0,0 @@ -#GLES3 -#version 300 es -#line 1 -#extension GL_OES_EGL_image_external_essl3 : require -precision mediump float; -uniform samplerExternalOES sTexture; -out vec4 Output; -in vec2 texCoord; -#END_GLES - -#GLES2 -#extension GL_OES_EGL_image_external : require -precision mediump float; -uniform samplerExternalOES sTexture; -varying vec2 texCoord; -#END_GLES - -void main() { - vec2 texSize = texCoord.xy; -#GLES3 - Output = texture(sTexture,texSize); -#END_GLES -#GLES2 - gl_FragColor = texture2D(sTexture,texSize); -#END_GLES -} \ No newline at end of file diff --git a/app/src/main/assets/shader/supershader.fsh b/app/src/main/assets/shader/supershader.fsh new file mode 100644 index 000000000..f3f08a1ff --- /dev/null +++ b/app/src/main/assets/shader/supershader.fsh @@ -0,0 +1,79 @@ +#version 300 es +#line 1 +#extension GL_OES_EGL_image_external_essl3 : require +precision mediump float; + +uniform samplerExternalOES sTexture; +out vec4 Output; +in vec2 texCoord; + +uniform float float_position; +uniform float zebra_high; +uniform float zebra_low; +uniform bool show_zebra; +uniform bool show_focuspeak; + +uniform vec4 peak_color; +uniform float peak_strength; + +vec4 getZebra(vec2 texS, vec4 color, float pos,float high,float low) +{ + vec4 out_color; + if(fract((texS.x + texS.y)*(20.0+pos)) > 0.9) + { + float gray = (color.r + color.g +color.b) /3.0; + if(gray > (1.0 - high)) + out_color = mix(color,vec4(1.0, 0.0, 0.0, 1.0),gray); + else if(gray < low) + out_color = mix(color,vec4(0.0, 0.4, 1.0, 1.0),1.0-gray); + else + out_color = color; + } + else if(fract((texS.x - texS.y)*(20.0+pos)) > 0.9) + { + float gray = (color.r + color.g +color.b) /3.0; + if(gray > (1.0 - high)) + out_color = mix(color,vec4(1.0, 0.0, 0.0, 1.0),gray); + else if(gray < low) + out_color = mix(color,vec4(0.0, 0.4, 1.0, 1.0),1.0-gray); + else + out_color = color; + } + else + out_color = color; + return out_color; +} + +void main() { + vec2 texSize = texCoord.xy; + vec4 color = texture(sTexture,texSize); + vec4 out_color = color; + if (show_zebra) + out_color = getZebra(texSize, color,float_position,zebra_high,zebra_low); + + if(show_focuspeak) + { + vec2 size = vec2(textureSize(sTexture, 0)); + float w = 1.0 / size.x; + float h = 1.0 / size.y; + vec4 n[9]; + n[0] = texture(sTexture, texCoord + vec2( -w, -h)); + n[1] = texture(sTexture, texCoord + vec2(0.0, -h)); + n[2] = texture(sTexture, texCoord + vec2( w, -h)); + n[3] = texture(sTexture, texCoord + vec2( -w, 0.0)); + n[4] = texture(sTexture, texCoord); + n[5] = texture(sTexture, texCoord + vec2( w, 0.0)); + n[6] = texture(sTexture, texCoord + vec2( -w, h)); + n[7] = texture(sTexture, texCoord + vec2(0.0, h)); + n[8] = texture(sTexture, texCoord + vec2( w, h)); + + vec4 sobel_edge_h = n[2] + (peak_strength*n[5]) + n[8] - (n[0] + (peak_strength*n[3]) + n[6]); + vec4 sobel_edge_v = n[0] + (peak_strength*n[1]) + n[2] - (n[6] + (peak_strength*n[7]) + n[8]); + vec4 sobel = sqrt(((sobel_edge_h * sobel_edge_h) + (sobel_edge_v * sobel_edge_v))); + if(sobel == min(sobel, vec4(0.3,0.3,0.3,1))) + sobel = vec4(0,0,0,1); + out_color = mix(out_color, peak_color, sobel); + } + + Output = out_color; +} \ No newline at end of file diff --git a/app/src/main/assets/shader/zebra.fsh b/app/src/main/assets/shader/zebra.fsh deleted file mode 100644 index 928e94698..000000000 --- a/app/src/main/assets/shader/zebra.fsh +++ /dev/null @@ -1,44 +0,0 @@ -#GLES3 -#version 300 es -#line 1 -#extension GL_OES_EGL_image_external_essl3 : require -precision mediump float; -uniform samplerExternalOES sTexture; -out vec4 Output; -in vec2 texCoord; -#END_GLES - -#GLES2 -#extension GL_OES_EGL_image_external : require -#extension GL_OES_standard_derivatives : enable -precision mediump float; -uniform mediump samplerExternalOES sTexture; -varying mediump vec2 texCoord; -uniform vec2 texRes; -#END_GLES - -uniform float float_position; -uniform float zebra_high; -uniform float zebra_low; - -#IMPORT shader/zebramethod.fsh - -void main() { - vec2 texSize = texCoord.xy; -#GLES3 - vec4 color = texture(sTexture,texSize); -#END_GLES -#GLES2 - vec4 color = texture2D(sTexture,texSize); -#END_GLES - - vec4 out_color = getZebra(texSize, color,float_position,zebra_high,zebra_low); - -#GLES3 - Output = out_color; -#END_GLES - -#GLES2 - gl_FragColor = out_color; -#END_GLES -} \ No newline at end of file diff --git a/app/src/main/assets/shader/zebramethod.fsh b/app/src/main/assets/shader/zebramethod.fsh deleted file mode 100644 index 35a01fb79..000000000 --- a/app/src/main/assets/shader/zebramethod.fsh +++ /dev/null @@ -1,28 +0,0 @@ - -vec4 getZebra(vec2 texS, vec4 color, float pos,float high,float low) -{ - vec4 out_color; - if(fract((texS.x + texS.y)*(20.0+pos)) > 0.9) - { - float gray = (color.r + color.g +color.b) /3.0; - if(gray > (1.0 - high)) - out_color = mix(color,vec4(1.0, 0.0, 0.0, 1.0),gray); - else if(gray < low) - out_color = mix(color,vec4(0.0, 0.4, 1.0, 1.0),1.0-gray); - else - out_color = color; - } - else if(fract((texS.x - texS.y)*(20.0+pos)) > 0.9) - { - float gray = (color.r + color.g +color.b) /3.0; - if(gray > (1.0 - high)) - out_color = mix(color,vec4(1.0, 0.0, 0.0, 1.0),gray); - else if(gray < low) - out_color = mix(color,vec4(0.0, 0.4, 1.0, 1.0),1.0-gray); - else - out_color = color; - } - else - out_color = color; - return out_color; -} \ No newline at end of file diff --git a/app/src/main/java/freed/gl/GLTex.java b/app/src/main/java/freed/gl/GLTex.java index d2d6a3944..6df3c16b3 100644 --- a/app/src/main/java/freed/gl/GLTex.java +++ b/app/src/main/java/freed/gl/GLTex.java @@ -13,7 +13,13 @@ public class GLTex { public GLTex(int id) { this.id = id; - initTex(); + hTex = new int[1]; + GLES20.glGenTextures(1, hTex, id); + GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, hTex[0]); + GLES20.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); + GLES20.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); + GLES20.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); + GLES20.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); mSTexture = new SurfaceTexture(getHandel()); setActive(); } @@ -27,26 +33,11 @@ public void setActive() GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, getHandel()); } - private void initTex() { - hTex = new int[1]; - rebind(); - } - public int[] getTex() { return hTex; } - private void rebind() - { - GLES20.glGenTextures(1, hTex, id); - GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, hTex[0]); - GLES20.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE); - GLES20.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR); - GLES20.glTexParameteri(GLES30.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR); - } - public int getHandel() { return hTex[0]; diff --git a/app/src/main/java/freed/gl/GlVersion.java b/app/src/main/java/freed/gl/GlVersion.java index 57c311a78..9598faac0 100644 --- a/app/src/main/java/freed/gl/GlVersion.java +++ b/app/src/main/java/freed/gl/GlVersion.java @@ -22,6 +22,6 @@ public static int getGlesVersion() public static boolean isMinGlVersion() { - return getGlesVersion() >1; + return getGlesVersion() >=3; } } diff --git a/app/src/main/java/freed/gl/MainRenderer.java b/app/src/main/java/freed/gl/MainRenderer.java index 94e679bfe..bc25eb91e 100644 --- a/app/src/main/java/freed/gl/MainRenderer.java +++ b/app/src/main/java/freed/gl/MainRenderer.java @@ -7,16 +7,9 @@ import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10; -import freed.gl.program.FPShape; -import freed.gl.program.FocuspeakZebraShape; -import freed.gl.program.GLProgram; -import freed.gl.program.PreviewShape; -import freed.gl.program.ZebraShape; +import freed.gl.program.SuperShaderShape; import freed.gl.shader.DefaultVertexShader; -import freed.gl.shader.FocusPeakZebraShader; -import freed.gl.shader.PreviewFragmentShader; -import freed.gl.shader.SobelFpFragmentShader; -import freed.gl.shader.ZebraShader; +import freed.gl.shader.SuperShader; import freed.utils.Log; public class MainRenderer implements GLSurfaceView.Renderer, SurfaceTexture.OnFrameAvailableListener { @@ -29,13 +22,9 @@ public class MainRenderer implements GLSurfaceView.Renderer, SurfaceTexture.OnFr private final GLPreview mView; - private GLProgram activeProgram; - private PreviewShape previewShape; - private FPShape fpShape; - private ZebraShape zebraShape; - private FocuspeakZebraShape focuspeakZebraShape; private GLPreview.PreviewProcessors processors = GLPreview.PreviewProcessors.Normal; private final PreviewModel previewModel; + private SuperShaderShape superShaderShape; GLTex cameraInputTextureHolder; @@ -49,16 +38,20 @@ public void setProgram(GLPreview.PreviewProcessors processors) this.processors = processors; switch (processors) { case Normal: - activeProgram = previewShape; + previewModel.setZebra(false); + previewModel.setFocuspeak(false); break; case FocusPeak: - activeProgram = fpShape; + previewModel.setZebra(false); + previewModel.setFocuspeak(true); break; case Zebra: - activeProgram = zebraShape; + previewModel.setZebra(true); + previewModel.setFocuspeak(false); break; case FocusPeak_Zebra: - activeProgram = focuspeakZebraShape; + previewModel.setZebra(true); + previewModel.setFocuspeak(true); break; } } @@ -79,12 +72,11 @@ public void onDrawFrame(GL10 unused) { mUpdateST = false; } } - activeProgram.draw(); + superShaderShape.draw(); if (previewModel.getFloat_position() <= 10.0f) previewModel.setFloat_position(previewModel.getFloat_position() +0.05f); else previewModel.setFloat_position(0); - } @Override @@ -97,42 +89,14 @@ public void onSurfaceCreated(GL10 gl, EGLConfig config) { DefaultVertexShader vertexShader = new DefaultVertexShader(glesv); vertexShader.createShader(); - SobelFpFragmentShader fpFragmentShader = new SobelFpFragmentShader(glesv); - fpFragmentShader.createShader(); - - PreviewFragmentShader previewFragmentShader = new PreviewFragmentShader(glesv); - previewFragmentShader.createShader(); - - ZebraShader zebraShader = new ZebraShader(glesv); - zebraShader.createShader(); - - FocusPeakZebraShader focusPeakZebraShader = new FocusPeakZebraShader(glesv); - focusPeakZebraShader.createShader(); - - previewShape = new PreviewShape(glesv,previewModel); - previewShape.setFragmentShader(previewFragmentShader); - previewShape.setVertexShader(vertexShader); - previewShape.createAndLinkProgram(); - previewShape.setGlTex(cameraInputTextureHolder); - activeProgram = previewShape; - - fpShape = new FPShape(glesv,previewModel); - fpShape.setVertexShader(vertexShader); - fpShape.setFragmentShader(fpFragmentShader); - fpShape.createAndLinkProgram(); - fpShape.setGlTex(cameraInputTextureHolder); - - zebraShape = new ZebraShape(glesv,previewModel); - zebraShape.setVertexShader(vertexShader); - zebraShape.setFragmentShader(zebraShader); - zebraShape.createAndLinkProgram(); - zebraShape.setGlTex(cameraInputTextureHolder); - - focuspeakZebraShape = new FocuspeakZebraShape(glesv,previewModel); - focuspeakZebraShape.setVertexShader(vertexShader); - focuspeakZebraShape.setFragmentShader(focusPeakZebraShader); - focuspeakZebraShape.createAndLinkProgram(); - focuspeakZebraShape.setGlTex(cameraInputTextureHolder); + SuperShader superShader = new SuperShader(glesv); + superShader.createShader(); + + superShaderShape = new SuperShaderShape(glesv,previewModel); + superShaderShape.setFragmentShader(superShader); + superShaderShape.setVertexShader(vertexShader); + superShaderShape.createAndLinkProgram(); + superShaderShape.setGlTex(cameraInputTextureHolder); cameraInputTextureHolder.getmSTexture().setOnFrameAvailableListener(this); mGLInit = true; diff --git a/app/src/main/java/freed/gl/PreviewModel.java b/app/src/main/java/freed/gl/PreviewModel.java index 6125e53e3..341ef75a9 100644 --- a/app/src/main/java/freed/gl/PreviewModel.java +++ b/app/src/main/java/freed/gl/PreviewModel.java @@ -29,6 +29,8 @@ public enum Colors private float float_position = 0; private float zebra_high = 0.001f; private float zebra_low = 0.01f; + private boolean focuspeak = false; + private boolean zebra = false; public PreviewModel() { @@ -174,4 +176,21 @@ public void setZebra_low(float zebra_low) { public float getZebra_low() { return zebra_low; } + + public boolean isFocusPeak() + { + return focuspeak; + } + + public void setFocuspeak(boolean focuspeak) { + this.focuspeak = focuspeak; + } + + public void setZebra(boolean zebra) { + this.zebra = zebra; + } + + public boolean isZebra() { + return zebra; + } } diff --git a/app/src/main/java/freed/gl/program/FPShape.java b/app/src/main/java/freed/gl/program/FPShape.java deleted file mode 100644 index 7e6d1ab19..000000000 --- a/app/src/main/java/freed/gl/program/FPShape.java +++ /dev/null @@ -1,29 +0,0 @@ -package freed.gl.program; - -import android.opengl.GLES20; - -import freed.gl.PreviewModel; - -public class FPShape extends PreviewShape { - - - public FPShape(int glesVersion, PreviewModel previewModel) { - super(glesVersion, previewModel); - } - - @Override - protected void bind() { - super.bind(); - int peakh = GLES20.glGetUniformLocation (hProgram, "peak_color"); - if (peakh > 0) - GLES20.glUniform4fv(peakh, 1, previewModel.getPeak_color(),0); - - int peaksh = GLES20.glGetUniformLocation (hProgram, "peak_strength"); - if (peaksh > 0) - GLES20.glUniform1f(peaksh, previewModel.getPeak_strength()); - - int texSizeh = GLES20.glGetUniformLocation (hProgram, "texRes"); - if (texSizeh > 0) - GLES20.glUniform2fv(texSizeh,1, previewModel.getTextSize(),0); - } -} diff --git a/app/src/main/java/freed/gl/program/FocuspeakZebraShape.java b/app/src/main/java/freed/gl/program/FocuspeakZebraShape.java deleted file mode 100644 index 9f968030a..000000000 --- a/app/src/main/java/freed/gl/program/FocuspeakZebraShape.java +++ /dev/null @@ -1,27 +0,0 @@ -package freed.gl.program; - -import android.opengl.GLES20; - -import freed.gl.PreviewModel; - -public class FocuspeakZebraShape extends FPShape { - public FocuspeakZebraShape(int glesVersion, PreviewModel previewModel) { - super(glesVersion, previewModel); - } - - @Override - protected void bind() { - super.bind(); - int float_pos = GLES20.glGetUniformLocation (hProgram, "float_position"); - if (float_pos > 0) - GLES20.glUniform1f(float_pos, previewModel.getFloat_position()); - - int zebra_low = GLES20.glGetUniformLocation (hProgram, "zebra_low"); - if (zebra_low > 0) - GLES20.glUniform1f(zebra_low, previewModel.getZebra_low()); - - int zebra_high = GLES20.glGetUniformLocation (hProgram, "zebra_high"); - if (zebra_high > 0) - GLES20.glUniform1f(zebra_high, previewModel.getZebra_high()); - } -} diff --git a/app/src/main/java/freed/gl/program/SuperShaderShape.java b/app/src/main/java/freed/gl/program/SuperShaderShape.java new file mode 100644 index 000000000..1826f253b --- /dev/null +++ b/app/src/main/java/freed/gl/program/SuperShaderShape.java @@ -0,0 +1,49 @@ +package freed.gl.program; + +import android.opengl.GLES20; + +import freed.gl.PreviewModel; + +public class SuperShaderShape extends PreviewShape +{ + + public SuperShaderShape(int glesVersion, PreviewModel previewModel) { + super(glesVersion, previewModel); + } + + @Override + protected void bind() { + super.bind(); + int float_pos = GLES20.glGetUniformLocation (hProgram, "float_position"); + if (float_pos > 0) + GLES20.glUniform1f(float_pos, previewModel.getFloat_position()); + + int zebra_low = GLES20.glGetUniformLocation (hProgram, "zebra_low"); + if (zebra_low > 0) + GLES20.glUniform1f(zebra_low, previewModel.getZebra_low()); + + int zebra_high = GLES20.glGetUniformLocation (hProgram, "zebra_high"); + if (zebra_high > 0) + GLES20.glUniform1f(zebra_high, previewModel.getZebra_high()); + + int peakh = GLES20.glGetUniformLocation (hProgram, "peak_color"); + if (peakh > 0) + GLES20.glUniform4fv(peakh, 1, previewModel.getPeak_color(),0); + + int peaksh = GLES20.glGetUniformLocation (hProgram, "peak_strength"); + if (peaksh > 0) + GLES20.glUniform1f(peaksh, previewModel.getPeak_strength()); + + int texSizeh = GLES20.glGetUniformLocation (hProgram, "texRes"); + if (texSizeh > 0) + GLES20.glUniform2fv(texSizeh,1, previewModel.getTextSize(),0); + + int focuspeak = GLES20.glGetUniformLocation (hProgram, "show_focuspeak"); + if (focuspeak > 0) + GLES20.glUniform1i(focuspeak, previewModel.isFocusPeak() ? 1:0); + + int zebra = GLES20.glGetUniformLocation (hProgram, "show_zebra"); + if (zebra > 0) + GLES20.glUniform1i(zebra, previewModel.isZebra() ? 1:0); + } +} diff --git a/app/src/main/java/freed/gl/program/ZebraShape.java b/app/src/main/java/freed/gl/program/ZebraShape.java deleted file mode 100644 index b5e0b2bec..000000000 --- a/app/src/main/java/freed/gl/program/ZebraShape.java +++ /dev/null @@ -1,27 +0,0 @@ -package freed.gl.program; - -import android.opengl.GLES20; - -import freed.gl.PreviewModel; - -public class ZebraShape extends PreviewShape { - public ZebraShape(int glesVersion, PreviewModel previewModel) { - super(glesVersion, previewModel); - } - - @Override - protected void bind() { - super.bind(); - int float_pos = GLES20.glGetUniformLocation (hProgram, "float_position"); - if (float_pos > 0) - GLES20.glUniform1f(float_pos, previewModel.getFloat_position()); - - int zebra_low = GLES20.glGetUniformLocation (hProgram, "zebra_low"); - if (zebra_low > 0) - GLES20.glUniform1f(zebra_low, previewModel.getZebra_low()); - - int zebra_high = GLES20.glGetUniformLocation (hProgram, "zebra_high"); - if (zebra_high > 0) - GLES20.glUniform1f(zebra_high, previewModel.getZebra_high()); - } -} diff --git a/app/src/main/java/freed/gl/shader/FocusPeakZebraShader.java b/app/src/main/java/freed/gl/shader/FocusPeakZebraShader.java deleted file mode 100644 index 550b8ad7c..000000000 --- a/app/src/main/java/freed/gl/shader/FocusPeakZebraShader.java +++ /dev/null @@ -1,17 +0,0 @@ -package freed.gl.shader; - -public class FocusPeakZebraShader extends Shader { - public FocusPeakZebraShader(int glesVersion) { - super(glesVersion); - } - - @Override - String getShaderName() { - return "focuspeak_zebra"; - } - - @Override - ShaderType getShaderType() { - return ShaderType.fragment; - } -} diff --git a/app/src/main/java/freed/gl/shader/FpFragmentShader.java b/app/src/main/java/freed/gl/shader/FpFragmentShader.java deleted file mode 100644 index bf7ea7feb..000000000 --- a/app/src/main/java/freed/gl/shader/FpFragmentShader.java +++ /dev/null @@ -1,17 +0,0 @@ -package freed.gl.shader; - -public class FpFragmentShader extends Shader { - public FpFragmentShader(int glesVersion) { - super(glesVersion); - } - - @Override - String getShaderName() { - return "focuspeak"; - } - - @Override - ShaderType getShaderType() { - return ShaderType.fragment; - } -} diff --git a/app/src/main/java/freed/gl/shader/PreviewFragmentShader.java b/app/src/main/java/freed/gl/shader/PreviewFragmentShader.java deleted file mode 100644 index 2964b3274..000000000 --- a/app/src/main/java/freed/gl/shader/PreviewFragmentShader.java +++ /dev/null @@ -1,17 +0,0 @@ -package freed.gl.shader; - -public class PreviewFragmentShader extends Shader { - public PreviewFragmentShader(int glesVersion) { - super(glesVersion); - } - - @Override - String getShaderName() { - return "preview"; - } - - @Override - ShaderType getShaderType() { - return ShaderType.fragment; - } -} diff --git a/app/src/main/java/freed/gl/shader/SobelFpFragmentShader.java b/app/src/main/java/freed/gl/shader/SobelFpFragmentShader.java deleted file mode 100644 index bf2cb86eb..000000000 --- a/app/src/main/java/freed/gl/shader/SobelFpFragmentShader.java +++ /dev/null @@ -1,19 +0,0 @@ -package freed.gl.shader; - -public class SobelFpFragmentShader extends PreviewFragmentShader { - public SobelFpFragmentShader(int glesVersion) { - super(glesVersion); - } - - @Override - String getShaderName() { - return "focuspeak_sobel"; - } - - @Override - ShaderType getShaderType() { - return ShaderType.fragment; - } - - -} diff --git a/app/src/main/java/freed/gl/shader/ZebraShader.java b/app/src/main/java/freed/gl/shader/SuperShader.java similarity index 63% rename from app/src/main/java/freed/gl/shader/ZebraShader.java rename to app/src/main/java/freed/gl/shader/SuperShader.java index 1819fc596..07ba7a980 100644 --- a/app/src/main/java/freed/gl/shader/ZebraShader.java +++ b/app/src/main/java/freed/gl/shader/SuperShader.java @@ -1,13 +1,13 @@ package freed.gl.shader; -public class ZebraShader extends Shader { - public ZebraShader(int glesVersion) { +public class SuperShader extends Shader { + public SuperShader(int glesVersion) { super(glesVersion); } @Override String getShaderName() { - return "zebra"; + return "supershader"; } @Override