package Ġcom . man u . medi as ample s . util Ċ Ċ import Ġandroid . app . Activity Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . opengl . GLES 2 0 Ċ import Ġandroid . opengl . GL Utils Ċ import Ġandroid . opengl . Matrix Ċ import Ġandroid . util . Log Ċ import Ġjava . io . BufferedReader Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Reader Ċ Ċ /** Ċ Ġ* Ġ@ author Ġ: Ġj z man Ċ Ġ* Ġ@ desc : ĠGL Util Ċ Ġ* Ġ@ date : Ġ 2 0 2 1 / 7 / 3 Ġ 2 0 : 4 6 . Ċ Ġ*/ Ċ object ĠGL Util Ġ{ ĊĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠGL Util :: class . java . simple Name ĊĠĠĠ Ġprivate Ġval Ġs Identity Matrix Ġ= ĠFloat Array ( 1 6 ) ĊĠĠĠ Ġfun Ġidentity Matrix (): ĠFloat Array Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġs Identity Matrix ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæĺ¯åĲ¦ æĶ¯æĮģ OpenGL ĠES 2 . 0 . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠContext ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue è¡¨ç¤º supported ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsupport Open GLES 2 ( context : ĠContext ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Manager Ġ= Ġcontext . getSystem Service ( Context . ACTIVITY _ SERVICE ) Ġas ĠActivity Manager ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Info Ġ= Ġactivity Manager . device Configuration Info ĊĠĠĠĠĠĠĠ Ġreturn Ġconfiguration Info . req Gl Es Version Ġ>= Ġ 0 x 2 0 0 0 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGL æĵįä½ľ éĶĻè¯¯ æ£ĢæŁ¥ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġoperation Ġoperation ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġgl Check ( operation : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġerror : ĠInt ĊĠĠĠĠĠĠĠ Ġwhile Ġ( GLES 2 0 . glGet Error (). also Ġ{ Ġerror Ġ= Ġit Ġ} Ġ!= ĠGLES 2 0 . GL _ NO _ ERROR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġoperation Ġ+ Ġ": Ġgl Error Ġ" Ġ+ ĠGL Utils . get E GLE rror String ( error )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä»İ raw æľ¨ raw çĽ®å½ķ è¯»åıĸ çĿĢ èī² ç¨ĭåºı ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext ĠContext ĊĠĠĠĠ Ġ* Ġ@ param Ġres Id ĠĠ Ġres Id ĊĠĠĠĠ Ġ* Ġ@ return Ġshader ĠSource ĠCode ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġread Shader Source Code From Raw ( context : ĠContext , Ġres Id : ĠInt ): ĠString ? { ĊĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġcontext . resources . open Raw Resource ( res Id ) ĊĠĠĠĠĠĠĠ Ġval Ġinput StreamReader Ġ= ĠInputStreamReader ( inputStream ) ĊĠĠĠĠĠĠĠ Ġval Ġbuffered Reader Ġ= ĠBufferedReader ( input StreamReader ) ĊĠĠĠĠĠĠĠ Ġvar Ġnext Line : ĠString ? ĊĠĠĠĠĠĠĠ Ġval Ġbody Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( buffered Reader . readLine (). also Ġ{ Ġnext Line Ġ= Ġit Ġ} Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . append ( nextLine ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody . append ('\ n ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbody . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ç¼ĸè¯ĳ çĿĢ èī² åĻ¨ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġshader Type ĠĠ ĠShader Ġtype ï¼Į [ GLES 2 0 . GL _ VERTEX _ SHADER ] ĊĠĠĠĠ Ġ* Ġ@ param Ġshader Source ĠShader ĠSource ĠCode ĊĠĠĠĠ Ġ* Ġ@ return ĠAn ĠOpenGL Ġhandle Ġto Ġthe Ġshader . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcompile Shader ( shader Type : ĠInt , Ġshader Source : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠåĪĽå»º çĿĢ èī² åĻ¨ ĊĠĠĠĠĠĠĠ Ġvar Ġshader Handle Ġ= ĠGLES 2 0 . gl Create Shader ( shader Type ) ĊĠĠĠĠĠĠĠ Ġif Ġ( shader Handle Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæĽ ¿ æį¢ çĿĢ èī² åĻ¨ ä¸ŃçļĦ æºĲ ä»£çłģ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Shader Source ( shader Handle , Ġshader Source ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ç¼ĸè¯ĳ çĿĢ èī² åĻ¨ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Compile Shader ( shader Handle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġèİ·åıĸ ç¼ĸè¯ĳ çĿĢ èī² åĻ¨ çĬ¶æĢģ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcompile Status Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . glGet Shader iv ( shader Handle , ĠGLES 2 0 . GL _ COMPILE _ STATUS , Ġcompile Status , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ç¼ĸè¯ĳ çĿĢ èī² åĻ¨ å¤±è´¥ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compile Status [ 0 ] Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" compile Ġshader Ġerror : Ġ" Ġ+ ĠGLES 2 0 . glGet Shader Info Log ( shader Handle )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Delete Shader ( shader Handle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshader Handle Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( shader Handle Ġ== Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" create Ġshader Ġerror .") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġshader Handle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĽå»º Program ĊĠĠĠĠ Ġ* Ġ éĻĦ ä»¶ Shader åĪ° Program ĊĠĠĠĠ Ġ* ĠShader éĵ¾æİ¥ åĪ° Program ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate And Link Program ( vertex Shader Handle : ĠInt , Ġfragment Shader Handle : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġprogram Handle Ġ= ĠGLES 2 0 . gl Create Program () ĊĠĠĠĠĠĠĠ Ġif Ġ( program Handle Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Attach Shader ( program Handle , Ġvertex Shader Handle ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Attach Shader ( program Handle , Ġfragment Shader Handle ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Link Program ( program Handle ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġlink Ġstatus . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlink Status Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . glGet Program iv ( program Handle , ĠGLES 2 0 . GL _ LINK _ STATUS , Ġlink Status , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġlink Ġfailed , Ġdelete Ġthe Ġprogram . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link Status [ 0 ] Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" program Ġlink Ġerror : Ġ" Ġ+ ĠGLES 2 0 . glGet Program Info Log ( program Handle )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Delete Program ( program Handle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Handle Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( program Handle Ġ== Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" create Ġprogram Ġerror ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġprogram Handle ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠMatrix . set Identity M ( s Identity Matrix , Ġ 0 ) ĊĠĠĠ Ġ} Ċ }