package Ġcom . feat z ima . rx media . video . internal Ċ Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . opengl . GLES 2 0 Ċ import Ġandroid . opengl . GL Utils Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . nio . Byte Order Ċ import Ġjava . nio . Float Buffer Ċ Ċ class ĠInput Texture Render Ġ{ ĊĠĠĠ Ġprivate Ġval Ġvertices Ġ= Ġfloat ArrayOf (- 1 f , Ġ- 1 f , Ġ 1 f , Ġ- 1 f , Ġ- 1 f , Ġ 1 f , Ġ 1 f , Ġ 1 f ) ĊĠĠĠ Ġprivate Ġval Ġtexture Vertices Ġ= Ġfloat ArrayOf ( 0 f , Ġ 1 f , Ġ 1 f , Ġ 1 f , Ġ 0 f , Ġ 0 f , Ġ 1 f , Ġ 0 f ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġvertices Buffer : ĠFloat Buffer ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtexture Buffer : ĠFloat Buffer ĊĊĠĠĠ Ġprivate Ġvar Ġvertex Shader : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġfragment Shader : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġprogram : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġfirst Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġtextures Ġ= ĠInt Array ( 2 ) ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize Buffers () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġbuff Ġ= ĠByteBuffer . allocate Direct ( vertices . size Ġ* Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġbuff . order ( Byte Order . native Order ()) ĊĠĠĠĠĠĠĠ Ġvertices Buffer Ġ= Ġbuff . as Float Buffer () ĊĠĠĠĠĠĠĠ Ġvertices Buffer . put ( vertices ) ĊĠĠĠĠĠĠĠ Ġvertices Buffer . position ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġbuff Ġ= ĠByteBuffer . allocate Direct ( texture Vertices . size Ġ* Ġ 4 ) ĊĠĠĠĠĠĠĠ Ġbuff . order ( Byte Order . native Order ()) ĊĠĠĠĠĠĠĠ Ġtexture Buffer Ġ= Ġbuff . as Float Buffer () ĊĠĠĠĠĠĠĠ Ġtexture Buffer . put ( texture Vertices ) ĊĠĠĠĠĠĠĠ Ġtexture Buffer . position ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinitialize Program () Ġ{ ĊĠĠĠĠĠĠĠ Ġvertex Shader Ġ= ĠGLES 2 0 . gl Create Shader ( GLES 2 0 . GL _ VERTEX _ SHADER ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Shader Source ( vertex Shader , Ġvertex Shader Code ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Compile Shader ( vertex Shader ) ĊĊĠĠĠĠĠĠĠ Ġfragment Shader Ġ= ĠGLES 2 0 . gl Create Shader ( GLES 2 0 . GL _ FRAGMENT _ SHADER ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Shader Source ( fragment Shader , Ġfragment Shader Code ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Compile Shader ( fragment Shader ) ĊĊĠĠĠĠĠĠĠ Ġprogram Ġ= ĠGLES 2 0 . gl Create Program () ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Attach Shader ( program , Ġvertex Shader ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Attach Shader ( program , Ġfragment Shader ) ĊĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Link Program ( program ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Texture ( texture : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . glBind Framebuffer ( GLES 2 0 . GL _ FRAMEBUFFER , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Use Program ( program ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Disable ( GLES 2 0 . GL _ BLEND ) ĊĊĠĠĠĠĠĠĠ Ġval Ġposition Handle Ġ= ĠGLES 2 0 . glGet Attrib Location ( program , Ġ" a Position ") ĊĠĠĠĠĠĠĠ Ġval Ġtexture Handle Ġ= ĠGLES 2 0 . glGet UniformLocation ( program , Ġ" u Texture ") ĊĠĠĠĠĠĠĠ Ġval Ġtexture Position Handle Ġ= ĠGLES 2 0 . glGet Attrib Location ( program , Ġ" a Tex Position ") ĊĊĠĠĠĠĠĠĠ ĠGLES 2 0 . glVertex Attrib Pointer ( texture Position Handle , Ġ 2 , ĠGLES 2 0 . GL _ FLOAT , Ġfalse , Ġ 0 , Ġtexture Buffer ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Enable VertexAttrib Array ( texture Position Handle ) ĊĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Active Texture ( GLES 2 0 . GL _ TEXTURE 0 ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . glBind Texture ( GLES 2 0 . GL _ TEXTURE _ 2 D , Ġtexture ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Uniform 1 i ( texture Handle , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ ĠGLES 2 0 . glVertex Attrib Pointer ( position Handle , Ġ 2 , ĠGLES 2 0 . GL _ FLOAT , Ġfalse , Ġ 0 , Ġvertices Buffer ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Enable VertexAttrib Array ( position Handle ) ĊĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear ( GLES 2 0 . GL _ COLOR _ BUFFER _ BIT ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Draw Arrays ( GLES 2 0 . GL _ TRI ANGLE _ STRIP , Ġ 0 , Ġ 4 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinitialize () Ġ{ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Gen Textures ( 2 , Ġtextures , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . glBind Texture ( GLES 2 0 . GL _ TEXTURE _ 2 D , Ġtextures [ 0 ]) ĊĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl TexParameter i ( GLES 2 0 . GL _ TEXTURE _ 2 D , ĠGLES 2 0 . GL _ TEXTURE _ MIN _ FILTER , ĠGLES 2 0 . GL _ LINEAR ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl TexParameter i ( GLES 2 0 . GL _ TEXTURE _ 2 D , ĠGLES 2 0 . GL _ TEXTURE _ MAG _ FILTER , ĠGLES 2 0 . GL _ LINEAR ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl TexParameter i ( GLES 2 0 . GL _ TEXTURE _ 2 D , ĠGLES 2 0 . GL _ TEXTURE _ WRAP _ S , ĠGLES 2 0 . GL _ CLAMP _ TO _ EDGE ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl TexParameter i ( GLES 2 0 . GL _ TEXTURE _ 2 D , ĠGLES 2 0 . GL _ TEXTURE _ WRAP _ T , ĠGLES 2 0 . GL _ CLAMP _ TO _ EDGE ) ĊĊĠĠĠĠĠĠĠ Ġthis . initialize Buffers () ĊĠĠĠĠĠĠĠ Ġthis . initialize Program () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw Bitmap ( bitmap : ĠBitmap ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! first ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . initialize () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfirst Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear Color ( 2 5 5 F , Ġ 2 5 5 F , Ġ 2 5 5 F , Ġ 1 F ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear ( GLES 2 0 . GL _ COLOR _ BUFFER _ BIT ) ĊĊĠĠĠĠĠĠĠ ĠGL Utils . tex Image 2 D ( GLES 2 0 . GL _ TEXTURE _ 2 D , Ġ 0 , Ġbitmap , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġthis . draw Texture ( textures [ 0 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject ĠSh aders Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġvertex Shader Code Ġ= Ġ" attribute Ġvec 4 Ġa Position ;" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attribute Ġvec 2 Ġa Tex Position ;" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" varying Ġvec 2 Ġv Tex Position ;" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" void Ġmain () Ġ{" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ Ġgl _ Position Ġ= Ġa Position ;" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ Ġv Tex Position Ġ= Ġa Tex Position ;" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfragment Shader Code Ġ= Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" precision Ġmedi ump Ġfloat ;" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" uniform Ġsampler 2 D Ġu Texture ;" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" varying Ġvec 2 Ġv Tex Position ;" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" void Ġmain () Ġ{" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ Ġgl _ Frag Color Ġ= Ġtexture 2 D ( u Texture , Ġv Tex Position );" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }") ĊĠĠĠ Ġ} Ċ } Ċ