package Ġcom . she ve lev . wizard _ camera . camera . renderer . utils Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . opengl . GLES 3 1 Ċ import Ġandroid . opengl . GL Exception Ċ import Ġandroidx . annotation . Raw Res Ċ import Ġcom . she ve lev . wizard _ camera . utils . resources . getRaw String Ċ import Ġtim ber . log . Tim ber Ċ Ċ object ĠShader Utils Ġ{ ĊĠĠĠ Ġfun Ġbuild Program ( context : ĠContext , Ġ@ Raw Res Ġvertex Source Raw Id : ĠInt , Ġ@ Raw Res Ġfragment Source Raw Id : ĠInt ): ĠInt Ġ= ĊĠĠĠĠĠĠĠ Ġbuild Program ( context . getRaw String ( vertex Source Raw Id ), Ġcontext . getRaw String ( fragment Source Raw Id )) ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Program ( vertex Source : ĠString , Ġfragment Source : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvertex Shader Ġ= Ġbuild Shader ( GLES 3 1 . GL _ VERTEX _ SHADER , Ġvertex Source ) ĊĠĠĠĠĠĠĠ Ġval Ġfragment Shader Ġ= Ġbuild Shader ( GLES 3 1 . GL _ FRAGMENT _ SHADER , Ġfragment Source ) ĊĊĠĠĠĠĠĠĠ Ġval Ġprogram Ġ= ĠGLES 3 1 . gl Create Program () ĊĠĠĠĠĠĠĠ Ġif Ġ( program Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠGL Exception ( 0 , Ġ" Can 't Ġcreate Ġa Ġprogram !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠGLES 3 1 . gl Attach Shader ( program , Ġvertex Shader ) ĊĠĠĠĠĠĠĠ ĠGLES 3 1 . gl Attach Shader ( program , Ġfragment Shader ) ĊĠĠĠĠĠĠĠ ĠGLES 3 1 . gl Link Program ( program ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġprogram ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbuild Shader ( type : ĠInt , Ġshader Source : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġshader Ġ= ĠGLES 3 1 . gl Create Shader ( type ) ĊĊĠĠĠĠĠĠĠ Ġif ( shader Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠGL Exception ( 0 , Ġ" Can 't Ġcreate Ġshader Ġ( type Ġis : Ġ$ type ) !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠGLES 3 1 . gl Shader Source ( shader , Ġshader Source ) ĊĠĠĠĠĠĠĠ ĠGLES 3 1 . gl Compile Shader ( shader ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= ĠInt Array ( 1 ) ĊĠĠĠĠĠĠĠ ĠGLES 3 1 . glGet Shader iv ( shader , ĠGLES 3 1 . GL _ COMPILE _ STATUS , Ġstatus , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( status [ 0 ] Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . tag (" SHADER _ ERROR "). e ( GLES 3 1 . glGet Shader Info Log ( shader )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 1 . gl Delete Shader ( shader ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠGL Exception ( 0 , Ġ" Can 't Ġcreate Ġshader Ġ( type Ġis : Ġ$ type ) !") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġshader ĊĠĠĠ Ġ} Ċ }