package Ġcom . example . gl cam er ain fo Ċ Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . nio . Byte Order Ċ import Ġjava . nio . Float Buffer Ċ import Ġandroid . opengl . GLES 3 0 Ċ Ċ /** Ċ Ġ* ĠA Ġtwo - dimensional Ġtriangle Ġfor Ġuse Ġas Ġa Ġdrawn Ġobject Ġin ĠOpenGL ĠES Ġ 2 . 0 . Ċ Ġ*/ Ċ class ĠTriangle ( private Ġval Ġm Renderer : ĠGL Renderer ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġvertex Buffer : ĠFloat Buffer ĊĠĠĠ Ġprivate Ġval Ġm Program : ĠInt ĊĠĠĠ Ġprivate Ġvar Ġm Position Handle : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Color Handle : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm M VP Matrix Handle : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġ// Ġthis Ġwill Ġbe Ġ 3 Ġfor Ġa Ġtriangle ĊĠĠĠ Ġprivate Ġval Ġvertex Count Ġ= Ġtriangle Coordinates . size Ġ/ ĠCO ORD IN ATES _ PER _ VERTEX ĊĊĠĠĠ Ġ// Ġ 4 Ġbytes Ġper Ġvertex ĊĠĠĠ Ġprivate Ġval Ġvertex Stride Ġ= ĠCO ORD IN ATES _ PER _ VERTEX Ġ* Ġ 4 ĊĊĠĠĠ Ġ// Ġthis Ġis Ġthe Ġaccent Ġtriangle Color Ġfrom Ġthe Ġapp Ġ< triangle Color Ġextension Name =" color Accent "># D 3 5 4 0 0 </ triangle Color > ĊĠĠĠ Ġprivate Ġval Ġred Ġ= Ġ" D 3 ". to Long ( 1 6 ) Ġ/ Ġ 2 5 5 f ĊĠĠĠ Ġprivate Ġval Ġgreen Ġ= Ġ" 5 4 ". to Long ( 1 6 ) Ġ/ Ġ 2 5 5 f ĊĠĠĠ Ġprivate Ġval Ġblue Ġ= Ġ" 0 0 ". to Long ( 1 6 ) Ġ/ Ġ 2 5 5 f ĊĠĠĠ Ġprivate Ġvar Ġtriangle Color Ġ= Ġfloat ArrayOf ( red , Ġgreen , Ġblue , Ġ 0 . 0 f ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSets Ġup Ġthe Ġdrawing Ġobject Ġdata Ġfor Ġuse Ġin Ġan ĠOpenGL ĠES Ġcontext . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Ġinitialize Ġvertex Ġbyte Ġbuffer Ġfor Ġshape Ġcoordinates ĊĠĠĠĠĠĠĠ Ġval Ġbb Ġ= ĠByteBuffer . allocate Direct ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ( number Ġof Ġcoordinate Ġvalues Ġ* Ġ 4 Ġbytes Ġper Ġfloat ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtriangle Coordinates . size Ġ* Ġ 4 ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġuse Ġthe Ġdevice Ġhardware 's Ġnative Ġbyte Ġorder ĊĠĠĠĠĠĠĠ Ġbb . order ( Byte Order . native Order ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcreate Ġa Ġfloating Ġpoint Ġbuffer Ġfrom Ġthe ĠByteBuffer ĊĠĠĠĠĠĠĠ Ġvertex Buffer Ġ= Ġbb . as Float Buffer () ĊĊĠĠĠĠĠĠĠ Ġ// Ġadd Ġthe Ġcoordinates Ġto Ġthe ĠFloat Buffer ĊĠĠĠĠĠĠĠ Ġvertex Buffer . put ( triangle Coordinates ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġset Ġthe Ġbuffer Ġto Ġread Ġthe Ġfirst Ġcoordinate ĊĠĠĠĠĠĠĠ Ġvertex Buffer . position ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġcompile Ġthe Ġvertex Ġand Ġfragment Ġshader Ġglsl Ġfiles ĊĠĠĠĠĠĠĠ Ġm Program Ġ= Ġm Renderer . create Program ( VERTEX _ SHADER , ĠFR AG MENT _ SHADER ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠEn caps ulates Ġthe ĠOpenGL ĠES Ġinstructions Ġfor Ġdrawing Ġthis Ġshape . ĊĠĠĠĠ Ġ* Ġ@ param Ġm vp Matrix Ġ- ĠThe ĠModel ĠView ĠProject Ġmatrix Ġin Ġwhich Ġto Ġdraw ĊĠĠĠĠ Ġ* Ġthis Ġshape . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdraw ( mvp Matrix : ĠFloat Array ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġprogram Ġto ĠOpenGL Ġenvironment ĊĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Use Program ( m Program ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġhandle Ġto Ġvertex Ġshader 's Ġv Position Ġmember ĊĠĠĠĠĠĠĠ Ġm Position Handle Ġ= ĠGLES 3 0 . glGet Attrib Location ( m Program , Ġ" v Position ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠEnable Ġa Ġhandle Ġto Ġthe Ġtriangle Ġvertices ĊĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Enable VertexAttrib Array ( m Position Handle ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPrepare Ġthe Ġtriangle Ġcoordinate Ġdata ĊĠĠĠĠĠĠĠ ĠGLES 3 0 . glVertex Attrib Pointer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Position Handle , ĠCO ORD IN ATES _ PER _ VERTEX , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 3 0 . GL _ FLOAT , Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertex Stride , Ġvertex Buffer ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġhandle Ġto Ġfragment Ġshader 's Ġv Color Ġmember ĊĠĠĠĠĠĠĠ Ġm Color Handle Ġ= ĠGLES 3 0 . glGet UniformLocation ( m Program , Ġ" v Color ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġtriangle Color Ġfor Ġdrawing Ġthe Ġtriangle ĊĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Uniform 4 fv ( m Color Handle , Ġ 1 , Ġtriangle Color , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġhandle Ġto Ġshape 's Ġtransformation Ġmatrix ĊĠĠĠĠĠĠĠ Ġm M VP Matrix Handle Ġ= ĠGLES 3 0 . glGet UniformLocation ( m Program , Ġ" u M VP Matrix ") ĊĠĠĠĠĠĠĠ Ġm Renderer . check Gl Error (" glGet UniformLocation ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠApply Ġthe Ġprojection Ġand Ġview Ġtransformation ĊĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Uniform Matrix 4 fv ( m M VP Matrix Handle , Ġ 1 , Ġfalse , Ġm vp Matrix , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġm Renderer . check Gl Error (" gl Uniform Matrix 4 fv ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġthe Ġtriangle ĊĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Draw Arrays ( GLES 3 0 . GL _ TRI ANG LES , Ġ 0 , Ġvertex Count ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDisable Ġvertex Ġarray ĊĠĠĠĠĠĠĠ ĠGLES 3 0 . gl Disable VertexAttrib Array ( m Position Handle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġgood Ġplace Ġfor Ġconstants ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠV ERT EX _ SHADER Ġ= Ġ" shaders / vertex _ shader . glsl " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠFR AG MENT _ SHADER Ġ= Ġ" shaders / fragment _ shader . glsl " ĊĊĠĠĠĠĠĠĠ Ġ// Ġnumber Ġof Ġcoordinates Ġper Ġvertex Ġin Ġthis Ġarray ĊĠĠĠĠĠĠĠ Ġinternal Ġconst Ġval ĠCO ORD IN ATES _ PER _ VERTEX Ġ= Ġ 3 ĊĊĠĠĠĠĠĠĠ Ġ// Ġin Ġcounter clock wise Ġorder ĊĠĠĠĠĠĠĠ Ġinternal Ġvar Ġtriangle Coordinates Ġ= Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 0 f , Ġ 0 . 6 2 2 0 0 8 4 5 9 f , Ġ 0 . 0 f , ĠĠ Ġ// Ġtop ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ- 0 . 5 f , Ġ- 0 . 3 1 1 0 0 4 2 4 3 f , Ġ 0 . 0 f , Ġ// Ġbottom Ġleft ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ- 0 . 3 1 1 0 0 4 2 4 3 f , Ġ 0 . 0 f ĠĠ Ġ// Ġbottom Ġright ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }