package Ġcom . ye unge ek . videos ample . opengl . shape . triangle Ċ Ċ import Ġandroid . opengl . GLES 2 0 Ċ import Ġandroid . util . Log Ċ import Ġcom . ye unge ek . videos ample . opengl . base . Base GLSL Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . nio . Byte Order Ċ import Ġjava . nio . Float Buffer Ċ Ċ open Ġclass ĠRotate Triangle Ġ: ĠBase GLSL () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġvertex Shader Code Ġ= Ġ" uniform Ġmat 4 Ġu M VP Matrix ;" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" attribute Ġvec 4 Ġv Position ;" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" void Ġmain () Ġ{" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ Ġgl _ Position Ġ= Ġu M VP Matrix Ġ* Ġv Position ;" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" ĊĊĠĠĠ Ġprivate Ġval Ġfragment Shader Code Ġ= Ġ" precision Ġmedi ump Ġfloat ;" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" uniform Ġvec 4 Ġv Color ;" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" void Ġmain () Ġ{" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ Ġgl _ Frag Color Ġ= Ġv Color ;" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" }" ĊĊĠĠĠ Ġvar Ġvertex Buffer : ĠFloat Buffer ĊĠĠĠ Ġprivate Ġvar Ġm Program Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Position Handle Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm Color Handle Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġm M VP Matrix Handle Ġ= Ġ 0 ĊĊĠĠĠ Ġ// Ġnumber Ġof Ġcoordinates Ġper Ġvertex Ġin Ġthis Ġarray ĊĠĠĠ Ġvar Ġtriangle Coords Ġ= Ġfloat ArrayOf ( Ġ// Ġin Ġcounter clock wise Ġorder : ĊĠĠĠĠĠĠĠĠ 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 ĊĠĠĠ Ġ) ĊĠĠĠ Ġprivate Ġval Ġvertex Count Ġ= Ġtriangle Coords . size Ġ/ ĠCO ORD S _ PER _ VERTEX Ċ // ĠĠĠ Ġprivate Ġoverride Ġval Ġvertex Stride Ġ= ĠCO ORD S _ PER _ VERTEX Ġ* Ġ 4 Ġ// Ġ 4 Ġbytes Ġper Ġvertex ĊĊĊĠĠĠ Ġvar Ġcolor Ġ= Ġfloat ArrayOf ( 0 . 6 3 6 7 1 8 7 5 f , Ġ 0 . 7 6 9 5 3 1 2 5 f , Ġ 0 . 2 2 2 6 5 6 2 5 f , Ġ 0 . 0 f ) ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d (" DEBUG ", Ġ" ##### Ġinit ĠRotate ĠTriangle ") ĊĠĠĠĠĠĠĠ Ġ// Ġinitialize Ġvertex Ġbyte Ġbuffer Ġfor Ġshape Ġcoordinates ĊĠĠĠĠĠĠĠ Ġval Ġbb Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠByteBuffer . allocate Direct ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtriangle Coords . 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 Coords ) ĊĠĠĠĠĠĠĠ Ġ// Ġset Ġthe Ġbuffer Ġto Ġread Ġthe Ġfirst Ġcoordinate ĊĠĠĠĠĠĠĠ Ġvertex Buffer . position ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġm Program Ġ= Ġcreate OpenGL Program ( vertex Shader Code , Ġfragment Shader Code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġdraw ( mvp Matrix : ĠFloat Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAdd Ġprogram Ġto ĠOpenGL Ġenvironment ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Use Program ( m Program ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġhandle Ġto Ġvertex Ġshader 's Ġv Position Ġmember ĊĠĠĠĠĠĠĠ Ġm Position Handle Ġ= ĠGLES 2 0 . glGet Attrib Location ( m Program , Ġ" v Position ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠEnable Ġa Ġhandle Ġto Ġthe Ġtriangle Ġvertices ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Enable VertexAttrib Array ( m Position Handle ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠPrepare Ġthe Ġtriangle Ġcoordinate Ġdata ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . glVertex Attrib Pointer ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Position Handle , ĠCO ORD S _ PER _ VERTEX , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGLES 2 0 . GL _ FLOAT , Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertex Stride , Ġvertex Buffer ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġhandle Ġto Ġfragment Ġshader 's Ġv Color Ġmember ĊĠĠĠĠĠĠĠ Ġm Color Handle Ġ= ĠGLES 2 0 . glGet UniformLocation ( m Program , Ġ" v Color ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġcolor Ġfor Ġdrawing Ġthe Ġtriangle ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Uniform 4 fv ( m Color Handle , Ġ 1 , Ġcolor , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġhandle Ġto Ġshape 's Ġtransformation Ġmatrix ĊĠĠĠĠĠĠĠ Ġm M VP Matrix Handle Ġ= ĠGLES 2 0 . glGet UniformLocation ( m Program , Ġ" u M VP Matrix ") ĊĊĠĠĠĠĠĠĠ Ġ// ĠApply Ġthe Ġprojection Ġand Ġview Ġtransformation ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Uniform Matrix 4 fv ( m M VP Matrix Handle , Ġ 1 , Ġfalse , Ġm vp Matrix , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġthe Ġtriangle ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Draw Arrays ( GLES 2 0 . GL _ TRI ANG LES , Ġ 0 , Ġvertex Count ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDisable Ġvertex Ġarray ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Disable VertexAttrib Array ( m Position Handle ) ĊĠĠĠ Ġ} Ċ }