package Ġdev . k drag 0 n . blur test Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . opengl . GLES 3 1 Ċ import Ġandroid . util . Half Ċ import Ġjava . lang . IllegalStateException Ċ import Ġjava . nio . Buffer Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . nio . Byte Order Ċ import Ġjava . nio . Short Buffer Ċ Ċ object ĠGL Utils Ġ{ ĊĠĠĠ Ġfun Ġcheck Errors () Ġ{ ĊĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠGLES 3 1 . glGet Error () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error Ġ== ĠGLES 3 1 . GL _ NO _ ERROR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" GL Ġerror : Ġ$ error ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Compile Errors ( shader : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Compiled Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠ ĠGLES 3 1 . glGet Shader iv ( shader , ĠGLES 3 1 . GL _ COMPILE _ STATUS , Ġis Compiled , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Compiled [ 0 ] Ġ== ĠGLES 3 1 . GL _ FALSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerrors Ġ= ĠGLES 3 1 . glGet Shader Info Log ( shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 1 . gl Delete Shader ( shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalArgumentException (" Error Ġcompiling Ġshader : Ġ$ errors ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Program ( vertex Code : ĠString , Ġfrag Code : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvertex Shader Ġ= ĠGLES 3 1 . gl Create Shader ( GLES 3 1 . GL _ VERTEX _ SHADER ). also Ġ{ Ġshader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Errors () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 1 . gl Shader Source ( shader , Ġvertex Code ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 1 . gl Compile Shader ( shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Compile Errors ( shader ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfrag Shader Ġ= ĠGLES 3 1 . gl Create Shader ( GLES 3 1 . GL _ FRAGMENT _ SHADER ). also Ġ{ Ġshader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Errors () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 1 . gl Shader Source ( shader , Ġfrag Code ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 1 . gl Compile Shader ( shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Compile Errors ( shader ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠGLES 3 1 . gl Create Program (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Errors () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 1 . gl Attach Shader ( it , Ġvertex Shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 1 . gl Attach Shader ( it , Ġfrag Shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 1 . gl Link Program ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Errors () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate VertexBuffer ( data : ĠByteArray ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠ ĠGLES 3 1 . gl Gen Buffers ( 1 , Ġbuf , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= Ġbuf [ 0 ] ĊĊĠĠĠĠĠĠĠ Ġval Ġdata Buf Ġ= ĠByteBuffer . allocate Direct ( data . size ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder ( Byte Order . native Order ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠGLES 3 1 . glBind Buffer ( GLES 3 1 . GL _ ARRAY _ BUFFER , Ġbuffer ) ĊĠĠĠĠĠĠĠ ĠGLES 3 1 . gl BufferData ( GLES 3 1 . GL _ ARRAY _ BUFFER , Ġdata . size , Ġdata Buf , ĠGLES 3 1 . GL _ STATIC _ DRAW ) ĊĠĠĠĠĠĠĠ ĠGLES 3 1 . glBind Buffer ( GLES 3 1 . GL _ ARRAY _ BUFFER , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbuffer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate VertexArray (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuf Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠ ĠGLES 3 1 . gl Gen Vertex Arrays ( 1 , Ġbuf , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuf [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Half Float ") ĊĠĠĠ Ġfun Ġbitmap To Rgb 1 6 f Buffer ( bitmap : ĠBitmap , Ġfilter : Ġ( Float ) Ġ-> ĠDouble Ġ= Ġ{ Ġit . toDouble () Ġ}): ĠShort Buffer Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠByteBuffer . allocate Direct ( bitmap . width Ġ* Ġbitmap . height Ġ* Ġ 3 Ġ* Ġ 2 ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder ( Byte Order . native Order ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġas Short Buffer (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ( bitmap . height Ġ- Ġ 1 ) Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġbitmap . width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġbitmap . getColor ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġfilter ( color . red ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġg Ġ= Ġfilter ( color . green ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġfilter ( color . blue ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Half ( r ). half Value ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Half ( g ). half Value ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Half ( b ). half Value ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġposition ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbitmap To Rgb 8 Buffer ( bitmap : ĠBitmap ): ĠBuffer Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠByteBuffer . allocate Direct ( bitmap . width Ġ* Ġbitmap . height Ġ* Ġ 3 ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder ( Byte Order . native Order ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ( bitmap . height Ġ- Ġ 1 ) Ġdown To Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġbitmap . width ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor Ġ= Ġbitmap . getColor ( x , Ġy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput (( color . red () Ġ* Ġ 2 5 5 . 0 ). to Byte ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput (( color . green () Ġ* Ġ 2 5 5 . 0 ). to Byte ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput (( color . blue () Ġ* Ġ 2 5 5 . 0 ). to Byte ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }