package Ġcom . cond uit . engine . gl Ċ Ċ import Ġcom . cond uit . engine . Node Ċ import Ġorg . j om l . Matrix 4 f Ċ import Ġorg . lwjgl . Buffer Utils Ċ import Ġorg . lwjgl . opengl . GL 4 6 .* Ċ import Ġjava . io . File Ċ import Ġjava . nio . Float Buffer Ċ import Ġjava . nio . file . Files Ċ import Ġjava . nio . file . Paths Ċ Ċ class ĠShader ( private Ġvar Ġvertex Shader : ĠFile , Ġprivate Ġvar Ġfragment Shader : ĠFile ) Ġ: ĠNode () Ġ{ ĊĊĊĠĠĠ Ġvar Ġshader Program Ġ: ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġvertex Shader Program Ġ: ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġfragment Shader Program Ġ: ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvertex Shader Source Ġ= ĠreadFile ( vertex Shader ) ĊĠĠĠĠĠĠĠ Ġval Ġfragment Shader Source Ġ= ĠreadFile ( fragment Shader ) ĊĊĠĠĠĠĠĠĠ Ġvertex Shader Program Ġ= Ġcreate Shader ( GL _ VERTEX _ SHADER , Ġvertex Shader Source ) ĊĊĊĠĠĠĠĠĠĠ Ġfragment Shader Program Ġ= Ġcreate Shader ( GL _ FRAGMENT _ SHADER , Ġfragment Shader Source ) ĊĊĠĠĠĠĠĠĠ Ġcreate Program ( vertex Shader Program , Ġfragment Shader Program ) ĊĊĠĠĠĠĠĠĠ Ġval Ġvertex Shader Log Ġ: ĠString Ġ= Ġ ĠglGet Shader Info Log ( vertex Shader Program ) ĊĠĠĠĠĠĠĠ Ġval Ġfragment Shader Log Ġ: ĠString Ġ= ĠglGet Shader Info Log ( fragment Shader Program ) ĊĊĠĠĠĠĠĠĠ Ġif (!( vertex Shader Log . isEmpty () Ġ&& Ġfragment Shader Log . isEmpty ())){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println ( vertex Shader Log ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . err . println ( fragment Shader Log ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Program ( vertex Shader Program Ġ: ĠInt , Ġfragment Shader Program Ġ: ĠInt ){ ĊĠĠĠĠĠĠĠ Ġshader Program Ġ= Ġgl Create Program () ĊĊĠĠĠĠĠĠĠ Ġgl Attach Shader ( shader Program , Ġvertex Shader Program ) ĊĠĠĠĠĠĠĠ Ġgl Attach Shader ( shader Program , Ġfragment Shader Program ) ĊĠĠĠĠĠĠĠ Ġgl Link Program ( shader Program ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Shader ( shader Type Ġ: ĠInt , Ġsource Ġ: ĠString ) Ġ: ĠInt { ĊĠĠĠĠĠĠĠ Ġval Ġprogram Ġ= Ġgl Create Shader ( shader Type ) ĊĠĠĠĠĠĠĠ Ġgl Shader Source ( program , Ġsource ) ĊĠĠĠĠĠĠĠ Ġgl Compile Shader ( program ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġprogram ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Uniform Matrix 4 f ( uniform Ġ: ĠString , Ġtranspose Ġ: ĠBoolean , Ġmatrix Ġ: ĠMatrix 4 f , Ġsize Ġ: ĠInt ){ ĊĠĠĠĠĠĠĠ Ġval Ġfloat Buffer Ġ: ĠFloat Buffer Ġ= ĠBuffer Utils . create Float Buffer ( size ) ĊĊĠĠĠĠĠĠĠ Ġval Ġuniform Location Ġ= ĠglGet UniformLocation ( shader Program , Ġuniform ) ĊĊĠĠĠĠĠĠĠ Ġgl Uniform Matrix 4 fv ( uniform Location , Ġtranspose , Ġmatrix . get ( float Buffer )) ĊĊĠĠĠĠĠĠĠ Ġfloat Buffer . clear () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġupdate () Ġ{ ĊĠĠĠĠĠĠĠ Ġgl Use Program ( shader Program ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠreadFile ( file : ĠFile ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlines : ĠList < String > Ġ= ĠFiles . read All Lines ( Paths . get ( file . absolute Path )) ĊĠĠĠĠĠĠĠ Ġvar Ġtext Ġ= Ġ"" ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( string Ġin Ġlines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ+= Ġstring Ġ+ Ġ"\ n " ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtext ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġgl Delete Shader ( vertex Shader Program ) ĊĠĠĠĠĠĠĠ Ġgl Delete Shader ( fragment Shader Program ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġvertex Attrib Layout ( location Ġ: ĠInt , Ġvertex Group Size Ġ: ĠInt , Ġnormalized Ġ: ĠBoolean , Ġstride Ġ: ĠInt , Ġpointer Ġ: ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ ĠglVertex Attrib Pointer ( location , Ġvertex Group Size , ĠGL _ FLOAT , Ġnormalized , Ġstride Ġ* Ġ 4 , Ġpointer Ġ* Ġ 4 ) ĊĊĠĠĠĠĠĠĠ Ġgl Enable VertexAttrib Array ( location ) ĊĠĠĠ Ġ} Ċ Ċ }