Slide 1

Slide 1 text

TextureView OpenGL ES Wasabeef

Slide 2

Slide 2 text

About Me @wasabeef_jp AbemaTV, Inc. (CyberAgent, Inc.)

Slide 3

Slide 3 text

What would you like to do?

Slide 4

Slide 4 text

What would you like to do? ・3D Graphics  Game (Unity, Unreal Engine, Cocos2d-x) ・Filter (Camera, Image, Movie)

Slide 5

Slide 5 text

OpenGL ES by Khronos Group

Slide 6

Slide 6 text

OpenGL ES “Android includes support for high performance 2D and 3D graphics with the Open Graphics Library (OpenGL®), specifically, the OpenGL ES API.”

Slide 7

Slide 7 text

OpenGL ES ・OpenGL ES 1.0/1.1 - API level 1+ ・OpenGL ES 2.0 - API level 8+ ・OpenGL ES 3.0 - API level 18+ ・OpenGL ES 3.1 - API level 21+

Slide 8

Slide 8 text

Vulkan by Khronos Group

Slide 9

Slide 9 text

Vulkan

Slide 10

Slide 10 text

Surface

Slide 11

Slide 11 text

SurfaceView

Slide 12

Slide 12 text

SurfaceHolder

Slide 13

Slide 13 text

SurfaceHolder public class MySurfaceView extends SurfaceView { public MySurfaceView(Context context) { super(context); SurfaceHolder holder = this.getHolder(); } }

Slide 14

Slide 14 text

SurfaceHolder.Callback public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback { public MySurfaceView(Context context) { super(context); getHolder().addCallback(this); } @Override public void surfaceCreated(SurfaceHolder arg0) { /***/ } @Override public void surfaceChanged( SurfaceHolder arg0, int arg1, int arg2, int arg3) { /***/ } @Override public void surfaceDestroyed(SurfaceHolder arg0) { /***/ } }

Slide 15

Slide 15 text

GLSurfaceView

Slide 16

Slide 16 text

TextureView

Slide 17

Slide 17 text

SurfaceTexture

Slide 18

Slide 18 text

SurfaceTextureListener

Slide 19

Slide 19 text

SurfaceTextureListener private class MySurfaceTextureListener implements SurfaceTextureListener { @Override public void onSurfaceTextureAvailable( SurfaceTexture surface, int width, int height) { /***/ } @Override public void onSurfaceTextureSizeChanged( SurfaceTexture surface, int width, int height) { /***/ } @Override public boolean onSurfaceTextureDestroyed( SurfaceTexture surface) { /***/ } @Override public void onSurfaceTextureUpdated( SurfaceTexture surface) { /***/ }
 }

Slide 20

Slide 20 text

GLTextureView http://bit.ly/1RAnLrw

Slide 21

Slide 21 text

Shader

Slide 22

Slide 22 text

Shader public static final String SAMPLE_SHADER = "" + "void main()\n" + "{\n" + " gl_FragColor =vec4(1.0, 0.0, 0.0, 1.0)\n” + "}";

Slide 23

Slide 23 text

Shader public static final String COLOR_SHADER = "" + "varying highp vec2 textureCoordinate;\n" + "uniform sampler2D inputImageTexture;\n" + "uniform lowp mat4 colorMatrix;\n" + "uniform lowp float intensity;\n" + "void main()\n" + "{\n" + " lowp vec4 textureColor = texture2D(inputImageTexture, textureCoordinate);\n" + " lowp vec4 outputColor = textureColor * colorMatrix;\n" + " gl_FragColor = (intensity * outputColor) + ((1.0 - intensity) * textureColor);\n" + "}";

Slide 24

Slide 24 text

Shader private static int loadShader(int type, String src) { int shader = GLES20.glCreateShader(type); if (shader != 0) { GLES20.glShaderSource(shader, src); GLES20.glCompileShader(shader); int[] compiled = new int[1]; GLES20.glGetShaderiv( shader, GLES20.GL_COMPILE_STATUS, compiled, 0); if (compiled[0] == 0) { GLES20.glDeleteShader(shader); shader = 0; } } return shader; }

Slide 25

Slide 25 text

Summary ・OpenGL ES2 (API level 8+) ・TextureView (API level 14+) ・SurfaceTexture ・SurfaceTextureListener ・GLTextureView (Custom) ・Shader (GLSL)

Slide 26

Slide 26 text

Thanks.