/* čĊ Ġ* ĠCopyright Ġ[ 2 0 2 0 Ġ- ĠPresent ] Ġ[ L Ãª ĠTr áº§n ĠNg á»įc ĠTh Ãłnh Ġ- Ġ çĳ Ľ å¤ª Ġ( e ita )] Ġ[ k ine ita Ġ( Github )] čĊ Ġ* čĊ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); čĊ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . čĊ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat čĊ Ġ* čĊ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 čĊ Ġ* čĊ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware čĊ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , čĊ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . čĊ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand čĊ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . čĊ Ġ*/ č Ċ package Ġjp . e ita . canvas gl . texture Filter čĊč Ċ import Ġandroid . graphics . Bitmap č Ċ import Ġandroid . graphics . Rect F č Ċ import Ġandroid . opengl . GLES 2 0 č Ċ import Ġandroid . opengl . Matrix č Ċ import Ġjp . e ita . canvas gl . IC an vas GL č Ċ import Ġjp . e ita . canvas gl . gl canvas . Basic Texture č Ċ import Ġjp . e ita . canvas gl . gl canvas . GLES 2 0 Canvas . Companion . check Error č Ċ import Ġjp . e ita . canvas gl . gl canvas . GLES 2 0 Canvas . Companion . print Matrix č Ċ import Ġjp . e ita . canvas gl . gl canvas . Texture Matrix Transformer . convert Coordinate č Ċ import Ġjp . e ita . canvas gl . gl canvas . Texture Matrix Transformer . copy Texture Coordinates č Ċ import Ġjp . e ita . canvas gl . gl canvas . Texture Matrix Transformer . set Texture Matrix č Ċ import Ġjp . e ita . canvas gl . gl view . texture . GL Texture č Ċ import Ġjava . util .* čĊč Ċ /** čĊ Ġ* ĠA Ġfilter Ġthat Ġsupports Ġmix Ġtwo Ġtextures . čĊ Ġ* ĠThis Ġaccept Ġthe Ġsecond Ġtexture Ġas Ġa ĠRaw Texture Ġor Ġa ĠBitmap čĊ Ġ*/ č Ċ abstract Ġclass ĠTwo Texture Filter Ġ: ĠBasic Texture Filter Ġ{ čĊčĊĠĠĠ Ġprotected Ġval Ġm Temp Texture Matrix Ġ= ĠFloat Array ( 1 6 ) čĊčĊĠĠĠ Ġprotected Ġvar Ġsecond Bitmap : ĠBitmap ? Ġ= Ġnull čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠSet Ġthe Ġsecond Ġtexture . ĠIf Ġsecond Bitmap Ġexists , Ġthis Ġwill Ġbe Ġignored . čĊĠĠĠĠ Ġ* čĊĠĠĠĠ Ġ* Ġ@ param Ġsecond Raw Texture ĠThe Ġsecond Ġtexture . ĠIf Ġsecond Bitmap Ġexists , Ġthis Ġwill Ġbe Ġignored čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġprotected Ġvar Ġsecond Raw Texture : ĠGL Texture ? Ġ= Ġnull čĊčĊĠĠĠ Ġprivate Ġval Ġm Temp Src Rect F Ġ= ĠRect F () čĊčĊĠĠĠ Ġoverride Ġval Ġvertex Shader : ĠString čĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠV ERT EX _ SHADER čĊčĊĠĠĠ Ġ/** čĊĠĠĠĠ Ġ* ĠSet Ġthe Ġsecond Ġbitmap . ĠIf Ġthis Ġexists , Ġthe Ġsecond Raw Texture Ġwill Ġbe Ġignored čĊĠĠĠĠ Ġ* čĊĠĠĠĠ Ġ* Ġ@ param Ġsecond Bitmap ĠThe Ġsecond Ġbitmap Ġthat Ġwill Ġbe Ġmixed čĊĠĠĠĠ Ġ*/ čĊĠĠĠ Ġconstructor ( second Bitmap : ĠBitmap ) Ġ{ čĊĠĠĠĠĠĠĠ Ġthis . second Bitmap Ġ= Ġsecond Bitmap čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġconstructor () čĊčĊĠĠĠ Ġfun Ġset Bitmap ( second Bitmap : ĠBitmap ) Ġ{ čĊĠĠĠĠĠĠĠ Ġthis . second Bitmap Ġ= Ġsecond Bitmap čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġreset Matrix () Ġ{ čĊĠĠĠĠĠĠĠ ĠArrays . fill ( m Temp Texture Matrix , Ġ 0 f ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Pre Draw ( program : ĠInt , Ġtexture : ĠBasic Texture , Ġcanvas : ĠI Canvas GL ) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Pre Draw ( program , Ġtexture , Ġcanvas ) čĊĠĠĠĠĠĠĠ Ġif Ġ( use Second Bitmap ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Second Bitmap Texture ( program , Ġcanvas ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġif Ġ( second Raw Texture Ġ!= Ġnull ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Second Raw Texture ( program , Ġcanvas ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġhandle Second Bitmap Texture ( program : ĠInt , Ġcanvas : ĠI Canvas GL ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġsecond Texture : ĠBasic Texture ? Ġ= Ġcanvas . bind Bitmap To Texture ( GLES 2 0 . GL _ TEXTURE 3 , Ġsecond Bitmap !! ) čĊĠĠĠĠĠĠĠ Ġreset Matrix () čĊĠĠĠĠĠĠĠ ĠMatrix . set Identity M ( m Temp Texture Matrix , Ġ 0 ) čĊĠĠĠĠĠĠĠ Ġcopy Texture Coordinates ( second Texture !! , Ġm Temp Src Rect F ) čĊĠĠĠĠĠĠĠ Ġconvert Coordinate ( m Temp Src Rect F , Ġsecond Texture ) čĊĠĠĠĠĠĠĠ Ġset Texture Matrix ( m Temp Src Rect F , Ġm Temp Texture Matrix ) čĊĠĠĠĠĠĠĠ Ġprint Matrix (" two Ġtex Ġmatrix ", Ġm Temp Texture Matrix , Ġ 0 ) čĊĠĠĠĠĠĠĠ Ġval Ġtexture Matrix Position Ġ= ĠGLES 2 0 . glGet UniformLocation ( program , ĠTEXT URE _ MATRIX _ UNIFORM 2 ) čĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Uniform Matrix 4 fv ( texture Matrix Position , Ġ 1 , Ġfalse , Ġm Temp Texture Matrix , Ġ 0 ) čĊĠĠĠĠĠĠĠ Ġval Ġsampler 2 Ġ= ĠGLES 2 0 . glGet UniformLocation ( program , ĠUN IF ORM _ TEXTURE _ SAMPLER 2 ) čĊĠĠĠĠĠĠĠ Ġcheck Error () čĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Uniform 1 i ( sampler 2 , Ġ 3 ) Ġ// Ġmatch ĠGL _ TEXTURE 3 čĊĠĠĠĠĠĠĠ Ġcheck Error () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġhandle Second Raw Texture ( program : ĠInt , Ġcanvas : ĠI Canvas GL ) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġraw Texture Ġ= Ġsecond Raw Texture !!. raw Texture čĊĠĠĠĠĠĠĠ Ġcanvas . bind Raw Texture ( GLES 2 0 . GL _ TEXTURE 3 , Ġraw Texture ) čĊĠĠĠĠĠĠĠ Ġreset Matrix () čĊĠĠĠĠĠĠĠ Ġsecond Raw Texture !!. surface Texture . get Transform Matrix ( m Temp Texture Matrix ) čĊĠĠĠĠĠĠĠ Ġval Ġtexture Matrix Position Ġ= ĠGLES 2 0 . glGet UniformLocation ( program , ĠTEXT URE _ MATRIX _ UNIFORM 2 ) čĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Uniform Matrix 4 fv ( texture Matrix Position , Ġ 1 , Ġfalse , Ġm Temp Texture Matrix , Ġ 0 ) čĊĠĠĠĠĠĠĠ Ġval Ġsampler 2 Ġ= ĠGLES 2 0 . glGet UniformLocation ( program , ĠUN IF ORM _ TEXTURE _ SAMPLER 2 ) čĊĠĠĠĠĠĠĠ Ġcheck Error () čĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Uniform 1 i ( sampler 2 , Ġ 3 ) čĊĠĠĠĠĠĠĠ Ġcheck Error () čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġval Ġo es Fragment Program : ĠString čĊĠĠĠĠĠĠĠ Ġget () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( use Second Bitmap ()) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" čĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ# extension ĠGL _ OES _ EGL _ image _ external Ġ: Ġrequire čĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ fragment Shader . replace First ( SAMPLER _ 2 D . to Regex (), ĠS AMP LER _ EXTERNAL _ OES )} čĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ""" čĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ# extension ĠGL _ OES _ EGL _ image _ external Ġ: Ġrequire čĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ${ fragment Shader . replace ( SAMPLER _ 2 D . to Regex (), ĠS AMP LER _ EXTERNAL _ OES )} čĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent () čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġfun Ġuse Second Bitmap (): ĠBoolean Ġ{ čĊĠĠĠĠĠĠĠ Ġreturn Ġsecond Bitmap Ġ!= Ġnull čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊčĊĠĠĠĠĠĠĠ Ġconst Ġval ĠV ARY ING _ TEXTURE _ COORD 2 Ġ= Ġ" v Texture Coord 2 " čĊčĊĠĠĠĠĠĠĠ Ġconst Ġval ĠUN IF ORM _ TEXTURE _ SAMPLER 2 Ġ= Ġ" u Texture Sampler 2 " čĊčĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTEXT URE _ MATRIX _ UNIFORM 2 Ġ= Ġ" u Texture Matrix 2 " čĊčĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠV ERT EX _ SHADER Ġ= Ġ" Ġ\ n " Ġ+ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attribute Ġvec 2 Ġ" Ġ+ ĠPOSITION _ ATTRIBUTE Ġ+ Ġ"; \ n " Ġ+ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" varying Ġvec 2 Ġ" Ġ+ ĠV ARY ING _ TEXTURE _ COORD Ġ+ Ġ"; \ n " Ġ+ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" varying Ġvec 2 Ġ" Ġ+ ĠV ARY ING _ TEXTURE _ COORD 2 Ġ+ Ġ"; \ n " Ġ+ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" uniform Ġmat 4 Ġ" Ġ+ ĠMAT RIX _ UNIFORM Ġ+ Ġ"; \ n " Ġ+ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" uniform Ġmat 4 Ġ" Ġ+ ĠTEXT URE _ MATRIX _ UNIFORM Ġ+ Ġ"; \ n " Ġ+ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" uniform Ġmat 4 Ġ" Ġ+ ĠTEXT URE _ MATRIX _ UNIFORM 2 Ġ+ Ġ"; \ n " Ġ+ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ\ n " Ġ+ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" void Ġmain () Ġ{\ n " Ġ+ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ Ġvec 4 Ġpos Ġ= Ġvec 4 (" Ġ+ ĠPOSITION _ ATTRIBUTE Ġ+ Ġ", Ġ 0 . 0 , Ġ 1 . 0 );\ n " Ġ+ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġgl _ Position Ġ= Ġ" Ġ+ ĠMAT RIX _ UNIFORM Ġ+ Ġ" Ġ* Ġpos ;\ n " Ġ+ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ" Ġ+ ĠV ARY ING _ TEXTURE _ COORD Ġ+ Ġ" Ġ= Ġ(" Ġ+ ĠTEXT URE _ MATRIX _ UNIFORM Ġ+ Ġ" Ġ* Ġpos ). xy ;\ n " Ġ+ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ" Ġ+ ĠV ARY ING _ TEXTURE _ COORD 2 Ġ+ Ġ" Ġ= Ġ(" Ġ+ ĠTEXT URE _ MATRIX _ UNIFORM 2 Ġ+ Ġ" Ġ* Ġpos ). xy ;\ n " Ġ+ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" čĊĠĠĠ Ġ} č Ċ }