/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠAnt on ĠTr ush kov Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . ks df v . the le ma . mesh Ċ Ċ import Ġorg . ks df v . the le ma . data . I Byte Data Ċ import Ġorg . ks df v . the le ma . gl .* Ċ Ċ /** Ċ Ġ* ĠIn ĠIndex Buffer Object Ġwraps ĠOpenGL 's Ġindex Ġbuffer Ġfunctionality Ġto Ġbe Ġused Ġin Ġconjunction Ġwith ĠV BO s . Ċ Ġ* Ċ Ġ* Ġ@ author Ġm zech ner , ĠTh or sten ĠSch le in zer , Ġz eg an styl Ċ Ġ*/ Ċ class ĠIndex Buffer Object Ġconstructor ( ĊĠĠĠ Ġoverride Ġvar Ġbytes : ĠI Byte Data , ĊĠĠĠ Ġtype : ĠInt Ġ= ĠGL _ UNSIGNED _ SHORT , ĊĠĠĠ Ġvar Ġusage : ĠInt Ġ= ĠGL _ STATIC _ DRAW , ĊĠĠĠ Ġinit Gpu Objects : ĠBoolean Ġ= Ġtrue Ċ ): ĠI Index Buffer Object Ġ{ ĊĠĠĠ Ġ/** ĠHandle Ġwill Ġbe Ġset Ġafter Ġ[ init Gpu Objects ] Ġexecuted Ġ*/ ĊĠĠĠ Ġoverride Ġvar Ġhandle : ĠInt Ġ= Ġ 0 ĊĊĠĠĠ Ġprivate Ġvar Ġis Buffer Need Reload Ġ= Ġtrue ĊĊĠĠĠ Ġoverride Ġval Ġbytes Per Index : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGL _ UNSIGNED _ BYTE Ġ-> Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGL _ UNSIGNED _ SHORT Ġ-> Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGL _ UNSIGNED _ INT Ġ-> Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġvar Ġtype : ĠInt Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ!= ĠGL _ UNSIGNED _ BYTE Ġ&& Ġvalue Ġ!= ĠGL _ UNSIGNED _ SHORT Ġ&& Ġvalue Ġ!= ĠGL _ UNSIGNED _ INT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Incorrect Ġtype . ĠMust Ġbe Ġone Ġof ĠGL _ UNSIGNED _ BYTE , ĠGL _ UNSIGNED _ SHORT , Ġor ĠGL _ UNSIGNED _ INT ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . type Ġ= Ġtype ĊĠĠĠĠĠĠĠ Ġif Ġ( init Gpu Objects ) Ġinit Gpu Objects () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Gpu Objects () Ġ{ ĊĠĠĠĠĠĠĠ Ġhandle Ġ= ĠGL . gl Gen Buffer () ĊĠĠĠĠĠĠĠ Ġis Buffer Need Reload Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Buffer To Gpu () Ġ{ ĊĠĠĠĠĠĠĠ ĠGL . gl BufferData ( GL _ ELEMENT _ ARRAY _ BUFFER , Ġbytes . size , Ġbytes , Ġusage ) ĊĠĠĠĠĠĠĠ Ġis Buffer Need Reload Ġ= Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠBind s Ġthis ĠIndex Buffer Object Ġfor Ġrendering Ġwith Ġgl Draw Elements . Ġ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġbind () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( handle Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGL . glBind Buffer ( GL _ ELEMENT _ ARRAY _ BUFFER , Ġhandle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Buffer Need Reload ) Ġload Buffer To Gpu () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠDis poses Ġthis ĠIndex Buffer Object Ġand Ġall Ġits Ġassociated ĠOpenGL Ġresources . Ġ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġdestroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġbytes . destroy () ĊĠĠĠĠĠĠĠ Ġif Ġ( handle Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( GL . element ArrayBuffer Ġ== Ġhandle ) ĠGL . glBind Buffer ( GL _ ELEMENT _ ARRAY _ BUFFER , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGL . gl Delete Buffer ( handle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ