import Ġorg . kh ronos . webgl . Web GL Rendering Context Ġas ĠGL Ċ import Ġorg . kh ronos . webgl . Float 3 2 Array Ċ import Ġorg . kh ronos . webgl . Uint 1 6 Array Ċ import Ġkotlin . math .* Ċ Ċ class ĠCircle Geometry ( ĊĠĠĠ Ġval Ġgl Ġ: ĠWebGL 2 Rendering Context , ĊĠĠĠ Ġval Ġx Ġ: ĠFloat , ĊĠĠĠ Ġval Ġy Ġ: ĠFloat , ĊĠĠĠ Ġval Ġr Ġ: ĠFloat ĊĠĠĠ Ġ) Ġ{ ĊĊĠĠĠ Ġ// Ġ 3 6 0 Ġtriangle Ġcircle ĊĠĠĠ Ġ// Ġ 1 / 3 Ġof Ġthose Ġvertices Ġwill Ġbe Ġthe Ġorigin ĊĠĠĠ Ġ// Ġ 2 / 3 Ġwill Ġbe Ġthe Ġouter Ġpoints Ġ( 1 / 2 Ġof Ġwhich Ġare Ġunique ) ĊĠĠĠ Ġval Ġvertex Buffer Ġ= Ġgl . create Buffer () ĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġpoints : ĠMutable List < Float > Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠ Ġpoints . add ( x ); Ġpoints . add ( y ); Ġpoints . add ( 0 f ) Ġ// Ġorigin ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 3 6 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrad ian Ġ: ĠDouble Ġ= Ġi Ġ* Ġ( PI Ġ/ Ġ 1 8 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcircle X Ġ: ĠFloat Ġ= Ġ( r Ġ* Ġcos ( rad ian ) Ġ+ Ġx ). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcircle Y Ġ: ĠFloat Ġ= Ġ( r Ġ* Ġsin ( rad ian ) Ġ+ Ġy ). toFloat () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . add ( circle X ); Ġpoints . add ( circle Y ); Ġpoints . add ( 0 f ) Ġ// Ġedge Ġpoint ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpoints _ array : ĠArray < Float > Ġ= Ġpoints . to Typed Array () ĊĊĠĠĠĠĠĠĠ Ġgl . bind Buffer ( GL . ARRAY _ BUFFER , Ġvertex Buffer ) ĠĊĠĠĠĠĠĠĠ Ġgl . buffer Data ( GL . ARRAY _ BUFFER , ĠFloat 3 2 Array ( points _ array ), ĠGL . STATIC _ DRAW ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġindex Buffer Ġ= Ġgl . create Buffer () ĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġgl . bind Buffer ( GL . ELEMENT _ ARRAY _ BUFFER , Ġindex Buffer ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtriangles : ĠMutable List < Short > Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 .. 3 6 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtriangles . add ( 0 ); Ġtriangles . add ( i . to Short ()); Ġtriangles . add (( i + 1 ). to Short ()); ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtriangles _ array : ĠArray < Short > Ġ= Ġtriangles . to Typed Array () ĊĊĠĠĠĠĠĠĠ Ġgl . buffer Data ( GL . ELEMENT _ ARRAY _ BUFFER , ĊĠĠĠĠĠĠĠ ĠUint 1 6 Array ( triangles _ array ), ĊĠĠĠĠĠĠĠ ĠGL . STATIC _ DRAW ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġinput Layout Ġ= Ġgl . create VertexArray () ĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġgl . bind VertexArray ( input Layout ) ĊĊĠĠĠĠĠĠĠ Ġgl . bind Buffer ( GL . ARRAY _ BUFFER , Ġvertex Buffer ) ĊĠĠĠĠĠĠĠ Ġgl . enable VertexAttrib Array ( 0 ) ĊĠĠĠĠĠĠĠ Ġgl . vertex Attrib Pointer ( 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 , ĠGL . FLOAT , Ġ// < Ġthree Ġpieces Ġof Ġfloat ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse , Ġ// < Ġdo Ġnot Ġnormalize Ġ( make Ġunit Ġlength ) ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 , Ġ// < Ġtight ly Ġpacked ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ// < Ġdata Ġstarts Ġat Ġarray Ġstart ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġgl . bind VertexArray ( null ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġgl . bind VertexArray ( input Layout ) ĊĠĠĠĠĠĠĠ Ġgl . bind Buffer ( GL . ELEMENT _ ARRAY _ BUFFER , Ġindex Buffer ) ĠĠĊĠĠĠĠĠĠĠ Ġgl . draw Elements ( GL . TRI ANG LES , Ġ 1 0 8 0 , ĠGL . UNSIGNED _ SHORT , Ġ 0 ) ĊĠĠĠ Ġ} Ċ }