package Ġcom . art ro intel . mood maker . k otes render engine . gl Ċ Ċ import Ġandroid . opengl . GLES 3 0 Ċ import Ġcom . art ro intel . mood maker . k otes render engine . utils . Debugger Ċ import Ġjava . nio . Int Buffer Ċ Ċ class ĠProgram ( v sh : ĠShader , Ġf sh : ĠShader ) Ġ: ĠI GL Object Ġ Ġ{ ĊĠĠĠ Ġprivate Ġval Ġv Shader : ĠShader Ġ= Ġv sh ĊĠĠĠ Ġprivate Ġval Ġf Shader : ĠShader Ġ= Ġf sh ĊĠĠĠ Ġprivate Ġvar Ġis Alive : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġinternal Ġvar Ġid : ĠInt Ġ= Ġ- 1 ĊĊĠĠĠ Ġoverride Ġfun Ġbind () Ġ{ ĊĠĠĠĠĠĠĠ ĠDebugger . assert IfNot ( is Alive , Ġ" GL ĠShader ĠProgram ĠNot Ġexists ") ĊĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Use Program ( id ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġis Alive Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġif (! v Shader . is Alive ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġv Shader . create () ĊĊĠĠĠĠĠĠĠ Ġif (! f Shader . is Alive ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġf Shader . create () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( v Shader . is Alive () Ġ&& Ġf Shader . is Alive ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠGLES 3 0 . gl Create Program () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Attach Shader ( id , Ġv Shader . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Attach Shader ( id , Ġf Shader . id ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Link Program ( id ); ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġsuccess : ĠInt Buffer Ġ= ĠInt Buffer . allocate ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . glGet Program iv ( id , ĠGLES 3 0 . GL _ LINK _ STATUS , Ġsuccess ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( success . get ( 0 ) Ġ== ĠGLES 3 0 . GL _ FALSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġerr Ġ= ĠGLES 3 0 . glGet Program Info Log ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDebugger . assert (" GL ĠShader ĠProgram ĠNot Ġexists : Ġ$ err ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Alive Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( is Alive ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Delete Program ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Alive Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }