package Ġde . fab max . k ool . platform Ċ Ċ import Ġde . fab max . k ool . Js Impl Ċ import Ġde . fab max . k ool . K ool Context Ċ import Ġde . fab max . k ool . K ool Exception Ċ import Ġde . fab max . k ool . pipeline . Off screen RenderPass Ċ import Ġde . fab max . k ool . pipeline . Off screen RenderPass 2 d Ċ import Ġde . fab max . k ool . pipeline . Off screen RenderPass 2 d Ping P ong Ċ import Ġde . fab max . k ool . pipeline . Off screen RenderPass Cube Ċ import Ġde . fab max . k ool . pipeline . shader model . Shader Generator Ċ import Ġde . fab max . k ool . platform . webgl . Queue Renderer Web Gl Ċ import Ġde . fab max . k ool . platform . webgl . Shader Generator Impl Web Gl Ċ import Ġde . fab max . k ool . scene . Scene Ċ import Ġde . fab max . k ool . util . Viewport Ċ import Ġde . fab max . k ool . util . log E Ċ import Ġkotlinx . browser . document Ċ import Ġkotlinx . browser . window Ċ import Ġorg . kh ronos . webgl . ArrayBuffer View Ċ import Ġorg . kh ronos . webgl . Float 3 2 Array Ċ import Ġorg . kh ronos . webgl . Web GL Rendering Context Ċ import Ġorg . kh ronos . webgl . Web GL Rendering Context . Companion . MAX _ TEXTURE _ IMAGE _ UNITS Ċ import Ġorg . w 3 c . dom . Element Ċ import Ġorg . w 3 c . dom . HTML Canvas Element Ċ import Ġorg . w 3 c . dom . HTML Image Element Ċ import Ġorg . w 3 c . dom . ImageData Ċ import Ġorg . w 3 c . dom . events . Event Ċ import Ġorg . w 3 c . dom . events . UI Event Ċ Ċ /** Ċ Ġ* Ġ@ author Ġfab max Ċ Ġ*/ Ċ @ Suppress (" Unsafe Cast From Dynamic ") Ċ class ĠJs Context Ġinternal Ġconstructor ( val Ġprops : ĠInit Props ) Ġ: ĠK ool Context () Ġ{ ĊĠĠĠ Ġoverride Ġval Ġasset Mgr Ġ= ĠJs Asset Manager ( props . assets Base Dir , Ġthis ) ĊĠĠĠ Ġoverride Ġval Ġinput Mgr : ĠJs Input Manager ĊĊĠĠĠ Ġoverride Ġval Ġshader Generator : ĠShader Generator Ġ= ĠShader Generator Impl Web Gl () ĊĠĠĠ Ġinternal Ġval Ġqueue Renderer Ġ= ĠQueue Renderer Web Gl ( this ) ĊĠĠĠ Ġinternal Ġval Ġafter Render Actions Ġ= Ġmutable ListOf < () Ġ-> ĠUnit >() ĊĊĠĠĠ Ġoverride Ġvar Ġwindow Width Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġoverride Ġvar Ġwindow Height Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġset ĊĊĠĠĠ Ġprivate Ġval Ġcanvas : ĠHTML Canvas Element ĊĠĠĠ Ġinternal Ġval Ġgl : ĠWebGL 2 Rendering Context ĊĠĠĠ Ġprivate Ġval Ġsys Info Ġ= Ġmutable ListOf < String >() ĊĊĠĠĠ Ġprivate Ġvar Ġanimation Millis Ġ= Ġ 0 . 0 ĊĊĠĠĠ Ġval Ġgl Capabilities Ġ= ĠGl Capabilities () ĊĊĠĠĠ Ġprivate Ġval Ġopen Render P asses Ġ= Ġmutable ListOf < Off screen RenderPass >() ĊĠĠĠ Ġprivate Ġval Ġdone Render P asses Ġ= Ġmutable Set Of < Off screen RenderPass >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġcanvas Ġ= Ġdocument . getElementById ( props . canvas Name ) Ġas ĠHTML Canvas Element ĊĠĠĠĠĠĠĠ Ġ// Ġtry Ġto Ġget Ġa ĠWebGL 2 Ġcontext Ġfirst Ġand Ġuse ĠWebGL Ġversion Ġ 1 Ġas Ġfallback ĊĠĠĠĠĠĠĠ Ġvar Ġweb Gl Ctx Ġ= Ġcanvas . getContext (" webgl 2 ") ĊĠĠĠĠĠĠĠ Ġif Ġ( web Gl Ctx Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweb Gl Ctx Ġ= Ġcanvas . getContext (" experimental - webgl 2 ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( web Gl Ctx Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Ġ= Ġweb Gl Ctx Ġas ĠWebGL 2 Rendering Context ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsys Info Ġ+= Ġ" Web GL Ġ 2 . 0 " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Capabilities . max Tex Units Ġ= Ġgl . getParameter ( MAX _ TEXTURE _ IMAGE _ UNITS ). as Dynamic () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Capabilities . has Float Textures Ġ= Ġgl . getExtension (" EXT _ color _ buffer _ float ") Ġ!= Ġnull ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjs (" alert (\" Unable Ġto Ġinitialize ĠWebGL 2 Ġcontext . ĠYour Ġbrowser Ġmay Ġnot Ġsupport Ġit .\ ") ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠK ool Exception (" Web GL 2 Ġcontext Ġrequired ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġext An isot ropic Ġ= Ġgl . getExtension (" EXT _ texture _ filter _ an isot ropic ") Ġ?: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgl . getExtension (" MO Z _ EXT _ texture _ filter _ an isot ropic ") Ġ?: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgl . getExtension (" WEB KIT _ EXT _ texture _ filter _ an isot ropic ") ĊĠĠĠĠĠĠĠ Ġif Ġ( ext An isot ropic Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Capabilities . max An isot ropy Ġ= Ġgl . getParameter ( ext An isot ropic . MAX _ TEXTURE _ MAX _ AN IS OT RO PY _ EXT ) Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Capabilities . gl Texture Max An isot ropy Ext Ġ= Ġext An isot ropic . TEXTURE _ MAX _ AN IS OT RO PY _ EXT ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġscreen D pi Ġ= ĠJs Impl . dpi ĊĠĠĠĠĠĠĠ Ġwindow Width Ġ= Ġcanvas . client Width ĊĠĠĠĠĠĠĠ Ġwindow Height Ġ= Ġcanvas . client Height ĊĊĠĠĠĠĠĠĠ Ġ// Ġsuppress Ġcontext Ġmenu ĊĠĠĠĠĠĠĠ Ġcanvas . on context menu Ġ= ĠEvent :: preventDefault ĊĊĠĠĠĠĠĠĠ Ġinput Mgr Ġ= ĠJs Input Manager ( canvas , Ġprops ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender Frame ( time : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġdetermine Ġdelta Ġtime ĊĠĠĠĠĠĠĠ Ġval Ġdt Ġ= Ġ( time Ġ- Ġanimation Millis ) Ġ/ Ġ 1 0 0 0 . 0 ĊĠĠĠĠĠĠĠ Ġanimation Millis Ġ= Ġtime ĊĊĠĠĠĠĠĠĠ Ġ// Ġupdate Ġviewport Ġsize ĊĠĠĠĠĠĠĠ Ġwindow Width Ġ= Ġcanvas . client Width ĊĠĠĠĠĠĠĠ Ġwindow Height Ġ= Ġcanvas . client Height ĊĠĠĠĠĠĠĠ Ġif Ġ( window Width Ġ!= Ġcanvas . width Ġ|| Ġwindow Height != Ġcanvas . height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġresize Ġcanvas Ġto Ġviewport ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . width Ġ= Ġwindow Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcanvas . height Ġ= Ġwindow Height ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġrender Ġframe ĊĠĠĠĠĠĠĠ Ġrender ( dt ) ĊĠĠĠĠĠĠĠ Ġdraw () ĊĠĠĠĠĠĠĠ Ġgl . finish () ĊĊĠĠĠĠĠĠĠ Ġ// Ġrequest Ġnext Ġframe ĊĠĠĠĠĠĠĠ Ġwindow . request AnimationFrame Ġ{ Ġt Ġ-> Ġrender Frame ( t ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( dis posable P ipelines . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Renderer . dispose P ipelines ( dis posable P ipelines ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdis posable P ipelines . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġengine Stats . reset Per Frame Counts () ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġbackground P asses . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( background P asses [ j ]. isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Off screen ( background P asses [ j ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbackground P asses [ j ]. after Draw ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġscenes . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġscene Ġ= Ġscenes [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( scene . isVisible ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Off screen P asses ( scene , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqueue Renderer . render Queue ( scene . main RenderPass . draw Queue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscene . main RenderPass . after Draw ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( after Render Actions . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter Render Actions . forEach Ġ{ Ġit () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġafter Render Actions . clear () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo Off screen P asses ( scene : ĠScene , Ġctx : ĠK ool Context ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġscene . off screen P asses . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrp Ġ= Ġscene . off screen P asses [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( rp . isEnabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Render P asses Ġ+= Ġrp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdone Render P asses . clear () ĊĠĠĠĠĠĠĠ Ġwhile Ġ( open Render P asses . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġany Draw n Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġopen Render P asses . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpass Ġ= Ġopen Render P asses [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġskip Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( j Ġin Ġpass . dependencies . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdep Ġ= Ġpass . dependencies [ j ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dep Ġ! in Ġdone Render P asses ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskip Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! skip ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġany Draw n Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Render P asses Ġ-= Ġpass ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdone Render P asses Ġ+= Ġpass ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Off screen ( pass ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpass . after Draw ( ctx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! any Draw n ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog E Ġ{ Ġ" Failed Ġto Ġrender Ġall Ġoff screen Ġpasses , Ġremaining :" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Render P asses . forEach Ġ{ Ġlog E Ġ{ Ġ" Ġ Ġ${ it . name }" Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Render P asses . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Off screen ( off screen Pass : ĠOff screen RenderPass ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( off screen Pass ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOff screen RenderPass 2 d Ġ-> Ġoff screen Pass . impl . draw ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOff screen RenderPass Cube Ġ-> Ġoff screen Pass . impl . draw ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOff screen RenderPass 2 d Ping P ong Ġ-> Ġdraw Off screen Ping P ong ( off screen Pass ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalArgumentException (" Off screen Ġpass Ġtype Ġnot Ġimplemented : Ġ$ off screen Pass ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Off screen Ping P ong ( off screen Pass : ĠOff screen RenderPass 2 d Ping P ong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġoff screen Pass . ping P ong P asses ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoff screen Pass . on Draw Ping ?. invoke ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoff screen Pass . ping . impl . draw ( this ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoff screen Pass . on Draw P ong ?. invoke ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoff screen Pass . p ong . impl . draw ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġopen Url ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . open ( url ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠ Ġwindow . request AnimationFrame Ġ{ Ġt Ġ-> Ġrender Frame ( t ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġnothing Ġto Ġdo Ġhere ... ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Sys Infos (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsys Info ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Window Viewport ( result : ĠView port ) Ġ{ ĊĠĠĠĠĠĠĠ Ġresult . set ( 0 , Ġ 0 , Ġwindow Width , Ġwindow Height ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠInit Props Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġcanvas Name Ġ= Ġ" gl Canvas " ĊĠĠĠĠĠĠĠ Ġval Ġexcluded Key Codes : ĠMutable Set < String > Ġ= Ġmutable Set Of (" F 5 ", Ġ" F 1 1 ") ĊĊĠĠĠĠĠĠĠ Ġvar Ġassets Base Dir Ġ= Ġ"./ assets " ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠGl Capabilities Ġ{ ĊĠĠĠ Ġvar Ġmax Tex Units Ġ= Ġ 1 6 ĊĠĠĠĠĠĠĠ Ġinternal Ġset ĊĠĠĠ Ġvar Ġhas Float Textures Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġinternal Ġset ĊĠĠĠ Ġvar Ġmax An isot ropy Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġinternal Ġset ĊĠĠĠ Ġvar Ġgl Texture Max An isot ropy Ext Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġinternal Ġset Ċ } Ċ Ċ external Ġclass ĠTouch Event : ĠUI Event Ġ{ ĊĠĠĠ Ġval Ġalt Key : ĠBoolean ĊĠĠĠ Ġval Ġchanged Tou ches : ĠTouch List ĊĠĠĠ Ġval Ġctrl Key : ĠBoolean ĊĠĠĠ Ġval Ġmeta Key : ĠBoolean ĊĠĠĠ Ġval Ġshift Key : ĠBoolean ĊĠĠĠ Ġval Ġtarget Tou ches : ĠTouch List ĊĠĠĠ Ġval Ġto uches : ĠTouch List Ċ } Ċ Ċ external Ġclass ĠTouch List Ġ{ ĊĠĠĠ Ġval Ġlength : ĠInt ĊĠĠĠ Ġfun Ġitem ( index : ĠInt ): ĠTouch Ċ } Ċ Ċ external Ġclass ĠTouch Ġ{ ĊĠĠĠ Ġval Ġidentifier : ĠInt ĊĠĠĠ Ġval Ġscreen X : ĠDouble ĊĠĠĠ Ġval Ġscreen Y : ĠDouble ĊĠĠĠ Ġval Ġclient X : ĠDouble ĊĠĠĠ Ġval Ġclient Y : ĠDouble ĊĠĠĠ Ġval Ġpage X : ĠDouble ĊĠĠĠ Ġval Ġpage Y : ĠDouble ĊĠĠĠ Ġval Ġtarget : ĠElement ĊĠĠĠ Ġval Ġradius X : ĠDouble ĊĠĠĠ Ġval Ġradius Y : ĠDouble ĊĠĠĠ Ġval Ġrotation Angle : ĠDouble ĊĠĠĠ Ġval Ġforce : ĠDouble Ċ } Ċ Ċ abstract Ġexternal Ġclass ĠWebGL 2 Rendering Context Ġ: ĠWebGL Rendering Context Ġ{ ĊĠĠĠ Ġfun Ġbuffer Data ( target : ĠInt , Ġsrc Data : ĠArray Buffer View , Ġusage : ĠInt , Ġsrc Offset : ĠInt , Ġlength : ĠInt ) ĊĠĠĠ Ġfun Ġclear Buffer fv ( buffer : ĠInt , Ġdraw Buffer : ĠInt , Ġvalues : ĠFloat 3 2 Array ) ĊĠĠĠ Ġfun Ġdraw Buffers ( buffers : ĠInt Array ) ĊĠĠĠ Ġfun Ġdraw Elements Inst anced ( mode : ĠInt , Ġcount : ĠInt , Ġtype : ĠInt , Ġoffset : ĠInt , Ġinstance Count : ĠInt ) ĊĠĠĠ Ġfun Ġread Buffer ( src : ĠInt ) ĊĠĠĠ Ġfun Ġrender buffer Storage Mult is ample ( target : ĠInt , Ġsamples : ĠInt , Ġinternal format : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt ) ĊĠĠĠ Ġfun Ġtex Image 3 D ( target : ĠInt , Ġlevel : ĠInt , Ġinternal format : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt , Ġdepth : ĠInt , Ġborder : ĠInt , Ġformat : ĠInt , Ġtype : ĠInt , Ġsrc Data : ĠArray Buffer View ?) ĊĠĠĠ Ġfun Ġtex Image 3 D ( target : ĠInt , Ġlevel : ĠInt , Ġinternal format : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt , Ġdepth : ĠInt , Ġborder : ĠInt , Ġformat : ĠInt , Ġtype : ĠInt , Ġsource : ĠHTML Image Element ?) ĊĠĠĠ Ġfun Ġtex Sub Image 3 D ( target : ĠInt , Ġlevel : ĠInt , Ġx offset : ĠInt , Ġy offset : ĠInt , Ġz offset : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt , Ġdepth : ĠInt , Ġformat : ĠInt , Ġtype : ĠInt , Ġpixels : ĠImage Data ?) ĊĠĠĠ Ġfun Ġtex Storage 2 D ( target : ĠInt , Ġlevels : ĠInt , Ġinternal format : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt ) ĊĠĠĠ Ġfun Ġtex Storage 3 D ( target : ĠInt , Ġlevels : ĠInt , Ġinternal format : ĠInt , Ġwidth : ĠInt , Ġheight : ĠInt , Ġdepth : ĠInt ) ĊĠĠĠ Ġfun Ġvertex Attrib Div isor ( index : ĠInt , Ġdivisor : ĠInt ) ĊĠĠĠ Ġfun Ġvertex Attrib IP o inter ( index : ĠInt , Ġsize : ĠInt , Ġtype : ĠInt , Ġstride : ĠInt , Ġoffset : ĠInt ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠCOLOR : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠDEP TH : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠST ENCIL : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠDEP TH _ STENCIL : ĠInt ĊĊĠĠĠĠĠĠĠ Ġval ĠDEP TH _ COMPONENT 2 4 : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠDEP TH _ COMPONENT 3 2 F : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠTEXT URE _ 3 D : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠTEXT URE _ WRAP _ R : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠTEXT URE _ COMPARE _ MODE : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠCOMP ARE _ REF _ TO _ TEXTURE : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠTEXT URE _ COMPARE _ FUNC : ĠInt ĊĊĠĠĠĠĠĠĠ Ġval ĠRED : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠR G : ĠInt ĊĊĠĠĠĠĠĠĠ Ġval ĠR 8 : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠR G 8 : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠRGB 8 : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠRGBA 8 : ĠInt ĊĊĠĠĠĠĠĠĠ Ġval ĠR 1 6 F : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠR G 1 6 F : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠRGB 1 6 F : ĠInt ĊĠĠĠĠĠĠĠ Ġval ĠRGBA 1 6 F : ĠInt ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠTouch . element X : ĠDouble ĊĠĠĠ Ġget () Ġ= Ġclient X Ġ- Ġ(( target Ġas ? ĠHTML Canvas Element )?. client Left ?. toDouble () Ġ?: Ġ 0 . 0 ) Ċ Ċ val ĠTouch . element Y : ĠDouble ĊĠĠĠ Ġget () Ġ= Ġclient Y Ġ- Ġ(( target Ġas ? ĠHTML Canvas Element )?. client Top ?. toDouble () Ġ?: Ġ 0 . 0 ) Ċ