/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . google . android . fil ament . t ung sten . ui . preview Ċ Ċ import Ġcom . google . android . fil ament . Engine Ċ import Ġcom . google . android . fil ament . Sky box Ċ import Ġcom . google . android . fil ament . Texture Ċ import Ġcom . google . android . fil ament . t ung sten . texture . Texture Cache Ċ import Ġcom . google . android . fil ament . t ung sten . texture . Texture Utils Ċ import Ġjava . io . InputStream Ċ import Ġjava . lang . RuntimeException Ċ import Ġjava . nio . ByteBuffer Ċ import Ġkotlin . math . log 2 Ċ Ċ private Ġconst Ġval Ġfloat Ġ= Ġ""" ([ 0 - 9 -. ]+) """ Ċ private Ġval Ġpattern Ġ= ĠRegex (""" \ (\ s *$ float \ s *, \ s *$ float \ s *, \ s *$ float \ s *\ ); """) Ċ Ċ internal Ġfun Ġparse Sphere Har mon ics ( har mon ics : ĠString ): ĠFloat Array Ġ{ ĊĠĠĠ Ġreturn Ġhar mon ics . lines (). fold ( Float Array ( 0 )) Ġ{ Ġacc , Ġline Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġmatch Ġ= Ġpattern . find ( line ) ĊĠĠĠĠĠĠĠ Ġval Ġfloats Ġ= Ġmatch ?. groups ?. map NotNull Ġ{ Ġgroup Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgroup ?. value ?. toFloat OrNull () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfloats ?. toFloat Array ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġacc Ġ+ Ġit ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġacc ĊĠĠĠ Ġ} Ċ } Ċ Ċ internal Ġclass ĠI bl ( val Ġengine : ĠEngine , Ġprivate Ġval Ġpath Prefix : ĠString ) Ġ{ ĊĊĠĠĠ Ġval Ġenvironment Map : ĠTexture ĊĠĠĠ Ġval Ġsky box Texture : ĠTexture ĊĠĠĠ Ġval Ġsky box : ĠSky box ĊĠĠĠ Ġval Ġir rad iance : ĠFloat Array ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġenvironment Map Ġ= Ġload Cub emap Level ( null , Ġ 0 , Ġ" m 0 _ ") ĊĠĠĠĠĠĠĠ ĠTexture Cache . add Texture For Removal ( environment Map ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 1 Ġuntil Ġenvironment Map . levels ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Loading Ġlevel Ġ$ i ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Cub emap Level ( environment Map , Ġi , Ġ" m ${ i }_ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠUse Ġnon - prefix ed Ġimages Ġas Ġsky box Ġtextures . ĊĠĠĠĠĠĠĠ Ġsky box Texture Ġ= Ġload Cub emap Level ( null , Ġ 0 , Ġ"") ĊĠĠĠĠĠĠĠ ĠTexture Cache . add Texture For Removal ( sky box Texture ) ĊĠĠĠĠĠĠĠ Ġsky box Ġ= Ġload Sky box () ĊĊĠĠĠĠĠĠĠ Ġir rad iance Ġ= Ġload Sphere Har mon ics () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Sky box (): ĠSky box Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠSky box . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. environment ( sky box Texture ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show Sun ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ( engine ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Sphere Har mon ics (): ĠFloat Array Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġ"$ path Prefix / sh . txt " ĊĠĠĠĠĠĠĠ Ġval Ġstream : ĠInputStream Ġ= Ġjava Class . class Loader . getResource AsStream ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRuntimeException (" Could Ġnot Ġget Ġstream Ġfor Ġsphere Ġhar mon ics Ġat Ġ$ path .") ĊĠĠĠĠĠĠĠ Ġval Ġcontents Ġ= Ġstream . buffered Reader (). use Ġ{ Ġit . read Text () Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġparse Sphere Har mon ics ( contents ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġload Cub emap Level ( texture : ĠTexture ?, Ġlevel : ĠInt , Ġface Prefix : ĠString ): ĠTexture Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( texture Ġ!= Ġnull Ġ|| Ġlevel Ġ== Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcub emap Faces Ġ= ĠlistOf (" px ", Ġ" nx ", Ġ" py ", Ġ" ny ", Ġ" pz ", Ġ" nz ") ĊĊĠĠĠĠĠĠĠ Ġval Ġface Offsets Ġ= ĠInt Array ( 6 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġraw Buffers Ġ= Ġcub emap Faces . map Ġ{ Ġface Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= Ġ"$ path Prefix /$ face Prefix $ face . rgb 3 2 f " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream : ĠInputStream Ġ= Ġjava Class . class Loader . getResource AsStream ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRuntimeException (" Could Ġnot Ġget Ġstream Ġfor Ġcub emap Ġface Ġ$ path .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer And Info Ġ= ĠTexture Utils . load Image Buffer From Stream ( stream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠRuntimeException (" Could Ġnot Ġload Ġcub emap Ġface Ġ$ path .") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġ(_, Ġinfo ) Ġ= Ġbuffer And Info ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( info . width Ġ!= Ġinfo . height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠRuntimeException (" Cub emap Ġface Ġ$ path Prefix Ġwidth Ġ!= Ġheight ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer And Info ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġfirst Face Ġ= Ġraw Buffers [ 0 ] ĊĠĠĠĠĠĠĠ Ġval Ġ(_, Ġfirst Face Info ) Ġ= Ġfirst Face ĊĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġfirst Face Info . width ĊĊĠĠĠĠĠĠĠ Ġ// ĠAss uming Ġthat Ġsize Ġis Ġa ĠPO 2 ĊĠĠĠĠĠĠĠ Ġval Ġlevels Ġ= Ġif Ġ( face Prefix Ġ!= Ġ"") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( log 2 ( size . toFloat ()) Ġ+ Ġ 1 ). toInt () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAllocate Ġa Ġbyte Ġbuffer Ġlarge Ġenough Ġto Ġhold Ġall Ġthe Ġfaces ĊĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteBuffer . allocate ( size Ġ* Ġsize Ġ* Ġ 4 Ġ* Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġfor Ġ(( raw Buffer , Ġ_) Ġin Ġraw Buffers ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuffer . put ( raw Buffer ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuffer . position ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbuffer Descriptor Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTexture . Pixel Buffer Descriptor ( buffer , ĠTexture . Format . RGB , ĠTexture . Type . UINT _ 1 0 F _ 1 1 F _ 1 1 F _ REV ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġtexture Ġhasn 't Ġbeen Ġcreated Ġyet , Ġcreate Ġit . ĊĠĠĠĠĠĠĠ Ġval Ġresult Texture Ġ= Ġtexture Ġ?: ĠTexture . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. width ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. height ( size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. levels ( levels ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. format ( Texture . Internal Format . R 1 1 F _ G 1 1 F _ B 1 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. sampler ( Texture . Sampler . SAMPLER _ CUBE MAP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ( engine ) ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġface Offsets [ i ] Ġ= Ġsize Ġ* Ġsize Ġ* Ġ 4 Ġ* Ġi ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġresult Texture . setImage ( engine , Ġlevel , Ġbuffer Descriptor , Ġface Offsets ) ĊĠĠĠĠĠĠĠ Ġreturn Ġresult Texture ĊĠĠĠ Ġ} Ċ } Ċ