package Ġcom . cls rf ish . fish qr . gles . shader Ċ Ċ import Ġandroid . opengl . GLES 2 0 Ċ import Ġcom . cls rf ish . common . utils . log Error Ċ Ċ /** Ċ Ġ* Ġ@ author Ġcls rf ish Ċ Ġ* Ġ@ since Ġ 3 / 1 3 / 2 1 Ġ 1 6 : 1 8 Ċ Ġ* Ġ@ email Ġcls rf ish @ gmail . com Ċ Ġ*/ Ċ class ĠShader 2 Ġ: ĠShader () Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġget Attrib Location ( attrib Name : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcached Location Ġ= Ġvar Location Cache . get OrDefault ( attrib Name , ĠGLES 2 0 . GL _ INVALID _ VALUE ) ĊĠĠĠĠĠĠĠ Ġif Ġ( cached Location Ġ!= ĠGLES 2 0 . GL _ INVALID _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcached Location ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠGLES 2 0 . glGet Attrib Location ( shader Program , Ġattrib Name ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Location Cache [ attrib Name ] Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget UniformLocation ( uniform Name : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcached Location Ġ= Ġvar Location Cache . get OrDefault ( uniform Name , ĠGLES 2 0 . GL _ INVALID _ VALUE ) ĊĠĠĠĠĠĠĠ Ġif Ġ( cached Location Ġ!= ĠGLES 2 0 . GL _ INVALID _ VALUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcached Location ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠGLES 2 0 . glGet UniformLocation ( shader Program , Ġuniform Name ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Location Cache [ uniform Name ] Ġ= Ġit ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Uniform 1 i ( uniform Name : ĠString , Ġuniform Value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuniform Location Ġ= Ġget UniformLocation ( uniform Name ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Uniform 1 i ( uniform Location , Ġuniform Value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Uniform 1 f ( uniform Name : ĠString , Ġvalue : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuniform Location Ġ= Ġget UniformLocation ( uniform Name ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Uniform 1 f ( uniform Location , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Uniform 3 fv ( uniform Name : ĠString , Ġv : ĠFloat Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuniform Location Ġ= Ġget UniformLocation ( uniform Name ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Uniform 3 fv ( uniform Location , Ġ 1 , Ġv , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Uniform 4 f ( uniform Name : ĠString , Ġx : ĠFloat , Ġy : ĠFloat , Ġz : ĠFloat , Ġw : ĠFloat ): ĠUnit Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuniform Location Ġ= Ġget UniformLocation ( uniform Name ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Uniform 4 f ( uniform Location , Ġx , Ġy , Ġz , Ġw ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Uniform Matrix 4 fv ( uniform Name : ĠString , Ġmatrix : ĠFloat Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuniform Location Ġ= Ġget UniformLocation ( uniform Name ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Uniform Matrix 4 fv ( uniform Location , Ġ 1 , Ġfalse , Ġmatrix , Ġ 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġuse Program (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Use Program ( shader Program ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġbind Shader Source ( vertex Shader Source : ĠString , Ġfrag Shader Source : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġshader Program Ġ= Ġcreate Program ( vertex Shader Source , Ġfrag Shader Source ) ĊĠĠĠĠĠĠĠ Ġreturn Ġshader Program Ġ> Ġ 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Shader ( type : ĠInt , Ġsource : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠGLES 2 0 . gl Create Shader ( type ). also Ġ{ Ġshader Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Shader Source ( shader , Ġsource ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Compile Shader ( shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠInt Array ( 1 ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . glGet Shader iv ( shader , ĠGLES 2 0 . GL _ COMPILE _ STATUS , Ġit , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= ĠGLES 2 0 . GL _ TRUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Error ( TAG , ĠGLES 2 0 . glGet Shader Info Log ( shader )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Program ( v Source : ĠString , Ġf Source : ĠString ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvertex Shader Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Shader ( GLES 2 0 . GL _ VERTEX _ SHADER , Ġv Source ) ĊĠĠĠĠĠĠĠ Ġval Ġfragment Shader Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Shader ( GLES 2 0 . GL _ FRAGMENT _ SHADER , Ġf Source ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠGLES 2 0 . gl Create Program (). also Ġ{ Ġprogram Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Attach Shader ( program , Ġvertex Shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Attach Shader ( program , Ġfragment Shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Link Program ( program ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult Ġ= ĠInt Array ( 1 ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . glGet Program iv ( program , ĠGLES 2 0 . GL _ LINK _ STATUS , Ġit , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= ĠGLES 2 0 . GL _ TRUE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Error ( TAG , ĠGLES 2 0 . glGet Program Info Log ( program )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Delete Shader ( vertex Shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Delete Shader ( fragment Shader ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Shader 2 " ĊĠĠĠ Ġ} Ċ }