package Ġcom . lin roid . air h ock ey Ċ Ċ import Ġandroid . opengl . GLES 2 0 .* Ċ import Ġandroid . opengl . GL Surface View Ċ import Ġcom . lin roid . air h ock ey . utils . GL Loader Ċ import Ġjava . nio . Float Buffer Ċ import Ġjavax . micro edition . kh ronos . e gl . EGL Config Ċ import Ġjavax . micro edition . kh ronos . openg les . GL 1 0 Ċ import Ġandroid . opengl . GLES 2 0 . gl Uniform 4 f Ċ import Ġandroid . opengl . Matrix Ċ import Ġcom . lin roid . air h ock ey . utils . Size of ĊĊ Ċ /** Ċ Ġ* Ġ@ author Ġlin roid Ġ< lin roid @ gmail . com > Ċ Ġ* Ġ* Ċ Ġ* Ġ@ since Ġ 1 1 / 0 5 / 2 0 1 7 Ċ Ġ*/ Ċ class ĠGL Render ( val Ġsurface View : ĠGL Surface View ) Ġ: ĠGL Surface View . Renderer Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠPOINT _ COMPONENT _ COUNT Ġ= Ġ 4 ĊĠĠĠ Ġprivate Ġval ĠCOLOR _ COMPONENT _ COUNT Ġ= Ġ 3 ĊĠĠĠ Ġprivate Ġval ĠSTR IDE Ġ= Ġ( POINT _ COMPONENT _ COUNT Ġ+ ĠCOLOR _ COMPONENT _ COUNT ) Ġ* ĠSize of . FLOAT ĊĊĠĠĠ Ġprivate Ġvar Ġfrag Shader : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġvertex Shader : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġa Position Location : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġa Color Location : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġu Matrix Location : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġvertex Data : ĠFloat Buffer ĊĊĠĠĠ Ġprivate Ġval ĠV ERT EX _ DATA _ ARRAY Ġ= Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOrder Ġof Ġcoordinates : ĠX , ĠY , ĠZ , ĠW , ĠR , ĠG , ĠB ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTriangle ĠF an ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , Ġ 0 f , Ġ 0 f , Ġ 1 . 5 f , Ġ 1 f , Ġ 1 f , Ġ 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ- 0 . 8 f , Ġ 0 f , Ġ 1 f , Ġ 0 . 7 f , Ġ 0 . 7 f , Ġ 0 . 7 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ- 0 . 8 f , Ġ 0 f , Ġ 1 f , Ġ 0 . 7 f , Ġ 0 . 7 f , Ġ 0 . 7 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ 0 . 8 f , Ġ 0 f , Ġ 2 f , Ġ 0 . 7 f , Ġ 0 . 7 f , Ġ 0 . 7 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ 0 . 8 f , Ġ 0 f , Ġ 2 f , Ġ 0 . 7 f , Ġ 0 . 7 f , Ġ 0 . 7 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ- 0 . 8 f , Ġ 0 f , Ġ 1 f , Ġ 0 . 7 f , Ġ 0 . 7 f , Ġ 0 . 7 f , ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLine Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ 0 f , Ġ 0 f , Ġ 1 . 5 f , Ġ 1 f , Ġ 0 f , Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ 0 f , Ġ 0 f , Ġ 1 . 5 f , Ġ 1 f , Ġ 0 f , Ġ 0 f , ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠM allet s ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , Ġ- 0 . 4 f , Ġ 0 f , Ġ 1 . 2 5 f , Ġ 0 f , Ġ 0 f , Ġ 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , Ġ 0 . 4 f , Ġ 0 f , Ġ 1 . 7 5 f , Ġ 1 f , Ġ 0 f , Ġ 0 f ) ĊĊĠĠĠ Ġprivate Ġval Ġprojection Matrix Ġ= ĠFloat Array ( 1 6 ) ĊĠĠĠ Ġprivate Ġval Ġmodel Matrix Ġ= ĠFloat Array ( 1 6 ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġsurface View . set EGL Context Client Version ( 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Created ( gl : ĠGL 1 0 , Ġconfig : ĠE GL Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgl Clear Color ( 0 F , Ġ 0 F , Ġ 0 F , Ġ 0 F ) ĊĊĠĠĠĠĠĠĠ Ġvertex Data Ġ= ĠGL Loader . vertex ( VERTEX _ DATA _ ARRAY ) ĊĊĠĠĠĠĠĠĠ Ġvertex Shader Ġ= ĠGL Loader . shader ( R . raw . simple _ vertex _ shader , ĠGL _ VERTEX _ SHADER ) ĊĠĠĠĠĠĠĠ Ġfrag Shader Ġ= ĠGL Loader . shader ( R . raw . simple _ fragment _ shader , ĠGL _ FRAGMENT _ SHADER ) ĊĠĠĠĠĠĠĠ Ġval Ġprogram Ġ= ĠGL Loader . program ( vertex Shader , Ġfrag Shader ) ĊĠĠĠĠĠĠĠ Ġgl Use Program ( program ) ĊĊĠĠĠĠĠĠĠ Ġa Position Location Ġ= ĠglGet Attrib Location ( program , Ġ" a _ Position ") ĊĠĠĠĠĠĠĠ Ġa Color Location Ġ= ĠglGet Attrib Location ( program , Ġ" a _ Color ") ĊĠĠĠĠĠĠĠ Ġu Matrix Location Ġ= ĠglGet UniformLocation ( program , Ġ" u _ Matrix ") ĊĊĠĠĠĠĠĠĠ Ġvertex Data . position ( 0 ) ĊĠĠĠĠĠĠĠ ĠglVertex Attrib Pointer ( a Position Location , ĠPOINT _ COMPONENT _ COUNT , ĠGL _ FLOAT , Ġfalse , ĠSTR IDE , Ġvertex Data ) ĊĊĠĠĠĠĠĠĠ Ġvertex Data . position ( POINT _ COMPONENT _ COUNT ) ĊĠĠĠĠĠĠĠ ĠglVertex Attrib Pointer ( a Color Location , ĠCOLOR _ COMPONENT _ COUNT , ĠGL _ FLOAT , Ġfalse , ĠSTR IDE , Ġvertex Data ) ĊĊĠĠĠĠĠĠĠ Ġgl Enable VertexAttrib Array ( a Position Location ) ĊĠĠĠĠĠĠĠ Ġgl Enable VertexAttrib Array ( a Color Location ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Changed ( gl : ĠGL 1 0 , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġaspect Radio : ĠFloat Ċ // Ċ // ĠĠĠĠĠĠĠ Ġif Ġ( width Ġ> Ġheight ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġaspect Radio Ġ= Ġwidth . toFloat () Ġ/ Ġheight . toFloat () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠMatrix . orth o M ( projection Matrix , Ġ 0 , Ġ- aspect Radio , Ġaspect Radio , Ġ- 1 f , Ġ 1 f , Ġ- 1 f , Ġ 1 f ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġaspect Radio Ġ= Ġheight . toFloat () Ġ/ Ġwidth . toFloat () Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠMatrix . orth o M ( projection Matrix , Ġ 0 , Ġ- 1 f , Ġ 1 f , Ġ- aspect Radio , Ġaspect Radio , Ġ- 1 f , Ġ 1 f ) Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠMatrix . set Identity M ( model Matrix , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠMatrix . translate M ( model Matrix , Ġ 0 , Ġ 0 f , Ġ 0 f , Ġ- 3 f ) ĊĠĠĠĠĠĠĠ ĠMatrix . rotate M ( model Matrix , Ġ 0 , Ġ- 3 0 f , Ġ 1 f , Ġ 0 f , Ġ 0 f ) Ċ Ċ // ĠĠĠĠĠĠĠ Ġval Ġperspective Matrix Ġ= ĠFloat Array ( 1 6 ) ĊĠĠĠĠĠĠĠ ĠMatrix . perspective M ( projection Matrix , Ġ 0 , Ġ 4 5 f , Ġwidth . toFloat () Ġ/ Ġheight . toFloat (), Ġ 1 f , Ġ 1 0 f ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= ĠFloat Array ( 1 6 ) ĊĠĠĠĠĠĠĠ ĠMatrix . multiply MM ( temp , Ġ 0 , Ġprojection Matrix , Ġ 0 , Ġmodel Matrix , Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠSystem . arraycopy ( temp , Ġ 0 , Ġprojection Matrix , Ġ 0 , Ġtemp . size ) ĊĊĠĠĠĠĠĠĠ Ġgl Viewport ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw Frame ( gl : ĠGL 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgl Clear ( GL _ COLOR _ BUFFER _ BIT ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġor tho graphic Ġprojection ĊĠĠĠĠĠĠĠ Ġgl Uniform Matrix 4 fv ( u Matrix Location , Ġ 1 , Ġfalse , Ġprojection Matrix , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġdraw Ġtwo Ġtriangles ĊĠĠĠĠĠĠĠ Ġgl Draw Arrays ( GL _ TRI ANGLE _ F AN , Ġ 0 , Ġ 6 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġdraw Ġlines ĊĠĠĠĠĠĠĠ Ġgl Draw Arrays ( GL _ LINES , Ġ 6 , Ġ 2 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġdraw Ġfirst Ġm allet ĊĠĠĠĠĠĠĠ Ġgl Draw Arrays ( GL _ POINTS , Ġ 8 , Ġ 1 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġdraw Ġsecond Ġm allet ĊĠĠĠĠĠĠĠ Ġgl Draw Arrays ( GL _ POINTS , Ġ 9 , Ġ 1 ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ