package Ġcom . me lo dy . six star Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . res . Resources Ċ import Ġandroid . opengl . GLES 3 0 Ċ import Ġandroid . util . Log Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . nio . charset . Charset Ċ Ċ object ĠShader Util Ġ{ ĊĊĠĠĠ Ġ// è¿ĶåĽŀ çĿĢ èī² åĻ¨ èĦļæľ¬ åĨħå®¹ ĊĠĠĠ Ġfun Ġload From Assets File ( file : ĠString , Ġr : ĠResources ): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġresult : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġread Ġ= Ġr . assets . open ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġch Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġba os Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġch Ġ= Ġread . read () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ch Ġ<= 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġba os . write ( ch ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuff Ġ= Ġba os . toByteArray () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġba os . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġread . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= ĠString ( buff , ĠCharset . forName (" UTF - 8 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresult Ġ= Ġresult . replace ("\\ r \\ n ". to Regex (), Ġ"\ n ") ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// åĪĽå»º çĿĢ èī² åĻ¨ ç¨ĭåºı ĊĠĠĠ Ġfun Ġcreate Shader Program ( vertex Source : String , Ġfragment Source : String ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġvertex Shader Ġ= Ġload Shader ( GLES 3 0 . GL _ VERTEX _ SHADER , Ġvertex Source ) ĊĠĠĠĠĠĠĠ Ġif Ġ( vertex Shader Ġ== Ġ 0 ) Ġreturn Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġvar Ġfragment Shader Ġ= Ġload Shader ( GLES 3 0 . GL _ FRAGMENT _ SHADER , Ġfragment Source ) ĊĠĠĠĠĠĠĠ Ġif Ġ( fragment Shader Ġ== Ġ 0 ) Ġreturn Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġ// åĪĽå»º æ¸²æŁĵ ç¨ĭåºı ĊĠĠĠĠĠĠĠ Ġvar Ġprogram Ġ= ĠGLES 3 0 . gl Create Program () ĊĊĠĠĠĠĠĠĠ Ġ// èĭ¥ ç¨ĭåºı åĪĽå»º æĪĲåĬŁ åĲĳ ç¨ĭåºı ä¸Ń åĬłåħ¥ é¡¶ çĤ¹ ä½ķ çīĩ åħĥ çĿĢ èī² åĻ¨ ĊĠĠĠĠĠĠĠ Ġif Ġ( program Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĲĳ ç¨ĭåºı ä¸Ń åĬłåħ¥ é¡¶ çĤ¹ çĿĢ èī² åĻ¨ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Attach Shader ( program , Ġvertex Shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Gl Error (" gl Attach Shader ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĲĳ ç¨ĭåºı ä¸Ń åĬłåħ¥ çīĩ åħĥ çĿĢ èī² åĻ¨ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Attach Shader ( program , Ġfragment Shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Gl Error (" gl Attach Shader ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// éĵ¾æİ¥ ç¨ĭåºı ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Link Program ( program ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åŃĺ æĶ¾ éĵ¾æİ¥ æĪĲåĬŁ program æķ°éĩı çļĦ æķ°ç»Ħ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlink Status Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . glGet Program iv ( program , ĠGLES 3 0 . GL _ LINK _ STATUS , Ġlink Status , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// èĭ¥ éĵ¾æİ¥ å¤±è´¥ åĪĻ æĬ¥éĶĻ å¹¶ åĪłéĻ¤ ç¨ĭåºı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( link Status Ġ!= Ġnull Ġ&& Ġlink Status [ 0 ] Ġ!= ĠGLES 3 0 . GL _ TRUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" ES 2 0 _ ERROR ", Ġ" Could Ġnot Ġlink Ġprogram : Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" ES 2 0 _ ERROR ", ĠGLES 3 0 . glGet Program Info Log ( program )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Delete Program ( program ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprogram Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġprogram ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// åĬłè½½ çĿĢ èī² åĻ¨ ĊĠĠĠ Ġfun Ġload Shader ( shader Type : Int , Ġsource : String ): Int Ġ{ ĊĠĠĠĠĠĠĠ Ġ// åĪĽå»º æĸ°çļĦ çĿĢ èī² åĻ¨ ĊĠĠĠĠĠĠĠ Ġvar Ġshader Ġ= ĠGLES 3 0 . gl Create Shader ( shader Type ) ĊĠĠĠĠĠĠĠ Ġ// èĭ¥ åĪĽå»º æĪĲåĬŁ åĪĻ åĬłè½½ shader ĊĠĠĠĠĠĠĠ Ġif Ġ( shader Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĬłè½½ shader çļĦ æºĲ ä»£çłģ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Shader Source ( shader , Ġsource ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ç¼ĸè¯ĳ shader ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Compile Shader ( shader ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcompiled Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// èİ·åıĸ shader çļĦ ç¼ĸè¯ĳ æĥħåĨµ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . glGet Shader iv ( shader , ĠGLES 3 0 . GL _ COMPILE _ STATUS , Ġcompiled , Ġ 0 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compiled Ġ!= Ġnull Ġ&& Ġcompiled [ 0 ] Ġ== Ġ 0 ) Ġ{// èĭ¥ ç¼ĸè¯ĳ å¤±è´¥ åĪĻ æĺ¾ç¤º éĶĻè¯¯ æĹ¥å¿Ĺ å¹¶ åĪłéĻ¤ æŃ¤ shader ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" ES 2 0 _ ERROR ", Ġ" Could Ġnot Ġcompile Ġshader Ġ$ shader Type :") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" ES 2 0 _ ERROR ", ĠGLES 3 0 . glGet Shader Info Log ( shader )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Delete Shader ( shader ); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshader Ġ= Ġ 0 ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġshader ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// æ£ĢæŁ¥ æ¯ı ä¸ĢæŃ¥ æĵįä½ľ æĺ¯åĲ¦ æľī éĶĻè¯¯ çļĦæĸ¹æ³ķ ĊĠĠĠ Ġ@ Suppress Lint (" New Api ") ĊĠĠĠ Ġfun Ġcheck Gl Error ( op : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġerror Ġ= ĠGLES 3 0 . glGet Error () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( error Ġ!= ĠGLES 3 0 . GL _ NO _ ERROR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" ES 2 0 _ ERROR ", Ġ"$ op : Ġgl Error Ġ$ error ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException ("$ op : Ġgl Error Ġ$ error ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }