/* Ċ Ġ* ĠTencent Ġis Ġplease d Ġto Ġsupport Ġthe Ġopen Ġsource Ġcommunity Ġby Ġmaking Ġv ap Ġavailable . Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠTH L ĠA 2 9 ĠLimited , Ġa ĠTencent Ġcompany . Ġ ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠMIT ĠLicense Ġ( the Ġ" License "); Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ċ Ġ* Ġcompliance Ġwith Ġthe ĠLicense . ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// opensource . org / licenses / MIT Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . tencent . q game . an imp layer . mask Ċ Ċ import Ġandroid . opengl . GLES 2 0 Ċ import Ġandroid . util . Log Ċ import Ġcom . tencent . q game . an imp layer . util . Shader Util Ċ Ċ class ĠMask Shader ( edge Blur Boolean Ġ: ĠBoolean ) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠV ERT EX Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" attribute Ġvec 4 Ġv Position ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" attribute Ġvec 4 Ġv Tex Coordinate Alpha Mask ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" varying Ġvec 2 Ġv _ Tex Coordinate Alpha Mask ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" void Ġmain () Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġv _ Tex Coordinate Alpha Mask Ġ= Ġvec 2 ( v Tex Coordinate Alpha Mask . x , Ġv Tex Coordinate Alpha Mask . y );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġgl _ Position Ġ= Ġv Position ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" ĊĠĠĠĠĠĠĠ Ġ// è¾¹ ç¼ ĺ åģļ é«ĺ æĸ¯ æ¨¡ ç³ Ĭ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFR AG MENT _ BL UR _ EDGE Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" precision Ġmedi ump Ġfloat ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" uniform Ġsampler 2 D Ġu Texture Alpha Mask ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" varying Ġvec 2 Ġv _ Tex Coordinate Alpha Mask ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" mat 3 Ġweight Ġ= Ġmat 3 ( 0 . 0 6 2 5 , 0 . 1 2 5 , 0 . 0 6 2 5 , 0 . 1 2 5 , 0 . 2 5 , 0 . 1 2 5 , 0 . 0 6 2 5 , 0 . 1 2 5 , 0 . 0 6 2 5 );\ n Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" int Ġcore Size = 3 ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" float Ġtex el Offset Ġ= Ġ. 0 1 ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" void Ġmain () Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġfloat Ġalpha Result Ġ= Ġ 0 . ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġfor ( int Ġy Ġ= Ġ 0 ; Ġy Ġ< Ġcore Size ; Ġy ++) Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠ Ġfor ( int Ġx Ġ= Ġ 0 ; x Ġ< Ġcore Size ; Ġx ++) Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠĠĠĠĠ Ġalpha Result Ġ+= Ġtexture 2 D ( u Texture Alpha Mask , Ġvec 2 ( v _ Tex Coordinate Alpha Mask . x Ġ+ Ġ(- 1 . 0 Ġ+ Ġfloat ( x )) Ġ* Ġtex el Offset , v _ Tex Coordinate Alpha Mask . y Ġ+ Ġ(- 1 . 0 Ġ+ Ġfloat ( y )) Ġ* Ġtex el Offset )). a Ġ* Ġweight [ x ][ y ]; \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠ Ġ}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġgl _ Frag Color Ġ= Ġvec 4 ( 0 , Ġ 0 , Ġ 0 , Ġalpha Result );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFR AG MENT _ NO _ BL UR _ EDGE Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" precision Ġmedi ump Ġfloat ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" uniform Ġsampler 2 D Ġu Texture Alpha Mask ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" varying Ġvec 2 Ġv _ Tex Coordinate Alpha Mask ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" void Ġmain Ġ() Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġvec 4 Ġalpha Mask Color Ġ= Ġtexture 2 D ( u Texture Alpha Mask , Ġv _ Tex Coordinate Alpha Mask );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġgl _ Frag Color Ġ= Ġvec 4 ( 0 , Ġ 0 , Ġ 0 , Ġalpha Mask Color . a );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFR AG MENT _ ROW Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" precision Ġmedi ump Ġfloat ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" uniform Ġsampler 2 D Ġu Texture Alpha Mask ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" varying Ġvec 2 Ġv _ Tex Coordinate Alpha Mask ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" vec 3 Ġweight Ġ= Ġvec 3 ( 0 . 4 0 2 6 , 0 . 2 4 4 2 , 0 . 0 5 4 5 );\ n Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" void Ġmain () Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġfloat Ġtex el Offset Ġ= Ġ. 0 1 ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġvec 2 Ġuv [ 5 ]; \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġuv [ 0 ]= Ġv _ Tex Coordinate Alpha Mask ;\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġuv [ 1 ]= vec 2 ( uv [ 0 ]. x + tex el Offset * 1 . 0 , Ġ Ġuv [ 0 ]. y );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġuv [ 2 ]= vec 2 ( uv [ 0 ]. x - tex el Offset * 1 . 0 , Ġ Ġuv [ 0 ]. y );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġuv [ 3 ]= vec 2 ( uv [ 0 ]. x + tex el Offset * 2 . 0 , Ġ Ġuv [ 0 ]. y );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġuv [ 4 ]= vec 2 ( uv [ 0 ]. x - tex el Offset * 2 . 0 , Ġ Ġuv [ 0 ]. y );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġfloat Ġalpha Result Ġ= Ġtexture 2 D ( u Texture Alpha Mask , Ġuv [ 0 ]). a Ġ* Ġweight [ 0 ]; \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠ Ġfor ( int Ġi Ġ= Ġ 1 ; Ġi Ġ< Ġ 3 ; Ġ++ i ) Ġ{\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠ Ġalpha Result Ġ+= Ġtexture 2 D ( u Texture Alpha Mask , Ġuv [ 2 * i - 1 ]). a Ġ* Ġweight [ i ]; \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠĠĠĠ Ġalpha Result Ġ+= Ġtexture 2 D ( u Texture Alpha Mask , Ġuv [ 2 * i ]). a Ġ* Ġweight [ i ]; \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġ}\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠĠĠ Ġgl _ Frag Color Ġ= Ġvec 4 ( 0 , Ġ 0 , Ġ 0 , Ġalpha Result );\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" ĊĊĠĠĠĠĠĠĠ Ġ// ĠUniform Ġconstants ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠU _ TEXTURE _ ALPHA _ MASK _ UNIT Ġ= Ġ" u Texture Alpha Mask " ĊĊĠĠĠĠĠĠĠ Ġ// ĠAttribute Ġconstants ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠA _ POSITION Ġ= Ġ" v Position " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠA _ TEXTURE _ MASK _ COORD IN ATES Ġ= Ġ" v Tex Coordinate Alpha Mask " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠShader Ġprogram ĊĠĠĠ Ġprivate Ġval Ġprogram : ĠInt ĊĊĠĠĠ Ġ// ĠUniform Ġlocations ĊĠĠĠ Ġval Ġu Texture Mask Unit Location : ĠInt ĊĠĠĠ Ġ// ĠAttribute Ġlocations ĊĠĠĠ Ġval Ġa Position Location : ĠInt ĊĠĠĠ Ġval Ġa Texture Mask Coordinates Location : ĠInt ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġprogram Ġ= Ġif ( edge Blur Boolean ) ĠShader Util . create Program ( VERTEX , ĠFR AG MENT _ BL UR _ EDGE ) Ġelse ĠShader Util . create Program ( VERTEX , ĠFR AG MENT _ NO _ BL UR _ EDGE ) ĊĠĠĠĠĠĠĠ Ġu Texture Mask Unit Location Ġ= ĠGLES 2 0 . glGet UniformLocation ( program , ĠU _ TEXTURE _ ALPHA _ MASK _ UNIT ) ĊĊĠĠĠĠĠĠĠ Ġa Position Location Ġ= ĠGLES 2 0 . glGet Attrib Location ( program , ĠA _ POSITION ) ĊĠĠĠĠĠĠĠ Ġa Texture Mask Coordinates Location Ġ= ĠGLES 2 0 . glGet Attrib Location ( program , ĠA _ TEXTURE _ MASK _ COORD IN ATES ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġuse Program () Ġ{ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Use Program ( program ) ĊĠĠĠ Ġ} Ċ Ċ }