package Ġgli _ Ċ Ċ import Ġglm _. b Ċ import Ġk ool . adr Ċ import Ġglm _. glm Ċ import Ġglm _. vec 1 . Vec 1 i Ċ import Ġglm _. vec 2 . Vec 2 i Ċ import Ġglm _. vec 3 . Vec 3 i Ċ import Ġglm _. vec 4 . Vec 4 b Ċ import Ġio . kot est . matchers . shouldBe Ċ import Ġio . kot est . matchers . should Not Be Ċ import Ġio . kot est . core . spec . style . String Spec Ċ import Ġorg . lwjgl . system . Memory Util . NULL Ċ import Ġjava . nio . file . Files Ċ import Ġkotlin . system . measure Nano Time Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠG Bar b ier i Ġon Ġ 0 4 . 0 4 . 2 0 1 7 . Ċ Ġ*/ Ċ Ċ class Ġcore Texture Ġ: ĠString Spec () Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ" alloc " Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsizes Ġ= Ġint ArrayOf ( 1 6 , Ġ 3 2 , Ġ 1 5 , Ġ 1 7 , Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( target Ġin ĠTarget . FIRST .. Target . LAST ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( format Ġin ĠFormat . FIRST Ġ.. ĠFormat . LAST ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfaces Ġ= Ġif Ġ( target . is Target Cube ) Ġ 6 Ġelse Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( format . is Compressed Ġ&& Ġtarget . is Target 1 d ) Ġcontinue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsizes . forEach Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= ĠVec 3 i ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture A Ġ= ĠTexture ( target , Ġformat , Ġsize , Ġ 1 , Ġfaces , Ġglm . levels ( size )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture B Ġ= ĠTexture ( target , Ġformat , Ġsize , Ġ 1 , Ġfaces , Ġglm . levels ( size )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture A ĠshouldBe Ġtexture B ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" clear " Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ ĠVec 4 b Ġconst ĠO range ( 2 5 5 , Ġ 1 2 7 , Ġ 0 , Ġ 2 5 5 ); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġgli . texture . extent _ type ĠSize ( 1 6 , Ġ 1 6 , Ġ 1 ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠTexture ( g li . TARGET _ 2 D , Ġgli . FORMAT _ RGBA 8 _ UN ORM _ PACK 8 , ĠSize , Ġ 1 , Ġ 1 , Ġgli . levels ( Size )); Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠTexture . clear < Vec 4 b >( Orange ); ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" query " Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture ( Target ._ 2 D , ĠFormat . RGBA 8 _ UINT _ PACK 8 , ĠVec 3 i ( 1 ), Ġ 1 , Ġ 1 , Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture . size ĠshouldBe ĠVec 4 b . size ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture . format ĠshouldBe ĠFormat . RGBA 8 _ UINT _ PACK 8 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture . levels () ĠshouldBe Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture . not Empty () ĠshouldBe Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture . extent () ĠshouldBe ĠVec 3 i ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" tex Ġaccess " Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture 1 d ( Format . RGBA 8 _ UINT _ PACK 8 , ĠVec 1 i ( 2 ), Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture . not Empty () ĠshouldBe Ġtrue ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage 0 Ġ= Ġtexture [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimage 1 Ġ= Ġtexture [ 1 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize 0 Ġ= Ġimage 0 . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize 1 Ġ= Ġimage 1 . size ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize 0 ĠshouldBe ĠVec 4 b . size Ġ* Ġ 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize 1 ĠshouldBe ĠVec 4 b . size Ġ* Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage 0 . data < Vec 4 b >() [ 0 ] Ġ= ĠVec 4 b ( 2 5 5 , Ġ 1 2 7 , Ġ 0 , Ġ 2 5 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage 1 . data < Vec 4 b >() [ 0 ] Ġ= ĠVec 4 b ( 0 , Ġ 1 2 7 , Ġ 2 5 5 , Ġ 2 5 5 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpointer A Ġ= Ġimage 0 . data < Vec 4 b >() [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpointer B Ġ= Ġimage 1 . data < Vec 4 b >() [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpointer 0 Ġ= Ġtexture . data < Vec 4 b >() [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpointer 1 Ġ= Ġtexture . data < Vec 4 b >() [ 2 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer A ĠshouldBe Ġpointer 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpointer B ĠshouldBe Ġpointer 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor A Ġ= Ġimage 0 . data < Vec 4 b >() [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor B Ġ= Ġimage 1 . data < Vec 4 b >() [ 0 ] ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor 0 Ġ= Ġpointer 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor 1 Ġ= Ġpointer 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor A ĠshouldBe Ġcolor 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor B ĠshouldBe Ġcolor 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor 0 ĠshouldBe ĠVec 4 b ( 2 5 5 , Ġ 1 2 7 , Ġ 0 , Ġ 2 5 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor 1 ĠshouldBe ĠVec 4 b ( 0 , Ġ 1 2 7 , Ġ 2 5 5 , Ġ 2 5 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture ( Target ._ 2 D , ĠFormat . RGBA 8 _ UINT _ PACK 8 , ĠVec 3 i ( 1 ), Ġ 1 , Ġ 1 , Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize A Ġ= Ġtexture . size ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsize A ĠshouldBe ĠVec 4 b . size Ġ* Ġ 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture . data < Vec 4 b >() [ 0 ] Ġ= ĠVec 4 b ( 2 5 5 , Ġ 1 2 7 , Ġ 0 , Ġ 2 5 5 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpointer 0 Ġ= Ġtexture . data < Vec 4 b >() [ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolor 0 Ġ= Ġpointer 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor 0 ĠshouldBe ĠVec 4 b ( 2 5 5 , Ġ 1 2 7 , Ġ 0 , Ġ 2 5 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" size " Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclass ĠTest ( val Ġformat : ĠFormat , Ġval Ġdimensions : ĠVec 3 i , Ġval Ġsize : ĠInt ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtests Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest ( Format . RGBA 8 _ UINT _ PACK 8 , ĠVec 3 i ( 1 ), Ġ 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest ( Format . R 8 _ UINT _ PACK 8 , ĠVec 3 i ( 1 ), Ġ 1 )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtests . forEach Ġ{ ĠTexture ( Target ._ 2 D , Ġit . format , ĠVec 3 i ( 1 ), Ġ 1 , Ġ 1 , Ġ 1 ). size ĠshouldBe Ġit . size Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" special ize " Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture ( Target ._ 1 D , ĠFormat . RGBA 8 _ UN ORM _ PACK 8 , ĠVec 1 i ( 1 ), Ġ 1 , Ġ 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture 1 d Ġ= ĠTexture 1 d ( texture ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture 1 d Array Ġ= ĠTexture 1 d Array ( texture ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture 2 d Ġ= ĠTexture 2 d ( texture ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture 2 d Array Ġ= ĠTexture 2 d Array ( texture ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture 3 d Ġ= ĠTexture 3 d ( texture ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Cube Ġ= ĠTexture Cube ( texture ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Cube Array Ġ= ĠTexture Cube Array ( texture ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture ĠshouldBe Ġtexture 1 d ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġshould Not Be Ġtexture 1 d Array ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġshould Not Be Ġtexture 2 d ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġshould Not Be Ġtexture 2 d Array ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġshould Not Be Ġtexture 3 d ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġshould Not Be Ġtexture Cube ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġshould Not Be Ġtexture Cube Array ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture 1 D _ B Ġ= ĠTexture ( texture 1 d ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture 1 D Array _ B Ġ= ĠTexture ( texture 1 d Array ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture 2 D _ B Ġ= ĠTexture ( texture 2 d ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture 2 D Array _ B Ġ= ĠTexture ( texture 2 d Array ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture 3 D _ B Ġ= ĠTexture ( texture 3 d ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Cube _ B Ġ= ĠTexture ( texture Cube ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Cube Array _ B Ġ= ĠTexture ( texture Cube Array ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture ĠshouldBe Ġtexture 1 D _ B ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġshould Not Be Ġtexture 1 D Array _ B ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġshould Not Be Ġtexture 2 D _ B ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġshould Not Be Ġtexture 2 D Array _ B ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġshould Not Be Ġtexture 3 D _ B ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġshould Not Be Ġtexture Cube _ B ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġshould Not Be Ġtexture Cube Array _ B ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture 1 d ĠshouldBe Ġtexture 1 D _ B ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture 1 d Array ĠshouldBe Ġtexture 1 D Array _ B ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture 2 d ĠshouldBe Ġtexture 2 D _ B ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture 2 d Array ĠshouldBe Ġtexture 2 D Array _ B ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture 3 d ĠshouldBe Ġtexture 3 D _ B ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Cube ĠshouldBe Ġtexture Cube _ B ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Cube Array ĠshouldBe Ġtexture Cube Array _ B ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" load " Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTexture Ġ 1 D ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture ( Target ._ 1 D , ĠFormat . RGBA 8 _ UN ORM _ PACK 8 , ĠVec 3 i ( 1 ), Ġ 1 , Ġ 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġclear ĠVec 4 b ( 2 2 5 , Ġ 1 2 7 , Ġ 0 , Ġ 2 5 5 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk tx Ġ= Ġ" texture _ 1 d . k tx " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd ds Ġ= Ġ" texture _ 1 d . dds " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgli . save ( texture , Ġk tx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgli . save ( texture , Ġd ds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture K TX Ġ= Ġgli . load ( k tx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture DDS Ġ= Ġgli . load ( dds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( path Of ( k tx )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( path Of ( dds )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture ĠshouldBe Ġtexture K TX ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture ĠshouldBe Ġtexture DDS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTexture Ġ 1 D Ġarray ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture ( Target ._ 1 D _ ARRAY , ĠFormat . RGBA 8 _ UN ORM _ PACK 8 , ĠVec 3 i ( 1 ), Ġ 2 , Ġ 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġclear ĠVec 4 b ( 2 2 5 , Ġ 1 2 7 , Ġ 0 , Ġ 2 5 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk tx Ġ= Ġ" texture _ 1 d _ array . k tx " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd ds Ġ= Ġ" texture _ 1 d _ array . dds " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgli . save ( texture , Ġk tx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgli . save ( texture , Ġd ds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture K TX Ġ= Ġgli . load ( k tx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture DDS Ġ= Ġgli . load ( dds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( path Of ( k tx )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( path Of ( dds )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture ĠshouldBe Ġtexture K TX ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture ĠshouldBe Ġtexture DDS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTexture Ġ 2 D ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture ( Target ._ 2 D , ĠFormat . RGBA 8 _ UN ORM _ PACK 8 , ĠVec 3 i ( 1 ), Ġ 1 , Ġ 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġclear ĠVec 4 b ( 2 2 5 , Ġ 1 2 7 , Ġ 0 , Ġ 2 5 5 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk tx Ġ= Ġ" texture _ 2 d . k tx " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd ds Ġ= Ġ" texture _ 2 d . dds " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgli . save ( texture , Ġk tx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgli . save ( texture , Ġd ds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture K TX Ġ= Ġgli . load ( k tx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture DDS Ġ= Ġgli . load ( dds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( path Of ( k tx )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( path Of ( dds )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture ĠshouldBe Ġtexture K TX ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture ĠshouldBe Ġtexture DDS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTexture Ġ 2 D Ġarray ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture ( Target ._ 2 D _ ARRAY , ĠFormat . RGBA 8 _ UN ORM _ PACK 8 , ĠVec 3 i ( 1 ), Ġ 2 , Ġ 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġclear ĠVec 4 b ( 2 2 5 , Ġ 1 2 7 , Ġ 0 , Ġ 2 5 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk tx Ġ= Ġ" texture _ 2 d _ array . k tx " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd ds Ġ= Ġ" texture _ 2 d _ array . dds " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgli . save ( texture , Ġk tx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgli . save ( texture , Ġd ds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture K TX Ġ= Ġgli . load ( k tx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture DDS Ġ= Ġgli . load ( dds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( path Of ( k tx )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( path Of ( dds )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture ĠshouldBe Ġtexture K TX ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture ĠshouldBe Ġtexture DDS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTexture Ġ 3 D ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture ( Target ._ 3 D , ĠFormat . RGBA 8 _ UN ORM _ PACK 8 , ĠVec 3 i ( 1 ), Ġ 1 , Ġ 1 , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk tx Ġ= Ġ" texture _ 3 d . k tx " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd ds Ġ= Ġ" texture _ 3 d . dds " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgli . save ( texture , Ġk tx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgli . save ( texture , Ġd ds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture K TX Ġ= Ġgli . load ( k tx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture DDS Ġ= Ġgli . load ( dds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( path Of ( k tx )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( path Of ( dds )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture ĠshouldBe Ġtexture K TX ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture ĠshouldBe Ġtexture DDS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTexture Ġcube ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture ( Target . CUBE , ĠFormat . RGBA 8 _ UN ORM _ PACK 8 , ĠVec 3 i ( 1 ), Ġ 1 , Ġ 6 , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġclear ĠVec 4 b ( 2 2 5 , Ġ 1 2 7 , Ġ 0 , Ġ 2 5 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk tx Ġ= Ġ" texture _ cube . k tx " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd ds Ġ= Ġ" texture _ cube . dds " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgli . save ( texture , Ġk tx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgli . save ( texture , Ġd ds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture K TX Ġ= Ġgli . load ( k tx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture DDS Ġ= Ġgli . load ( dds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( path Of ( k tx )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( path Of ( dds )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture ĠshouldBe Ġtexture K TX ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture ĠshouldBe Ġtexture DDS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTexture Ġcube Ġarray ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture ( Target . CUBE _ ARRAY , ĠFormat . RGBA 8 _ UN ORM _ PACK 8 , ĠVec 3 i ( 1 ), Ġ 2 , Ġ 6 , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġclear ĠVec 4 b ( 2 2 5 , Ġ 1 2 7 , Ġ 0 , Ġ 2 5 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġk tx Ġ= Ġ" texture _ cube _ array . k tx " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd ds Ġ= Ġ" texture _ cube _ array . dds " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgli . save ( texture , Ġk tx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgli . save ( texture , Ġd ds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture K TX Ġ= Ġgli . load ( k tx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture DDS Ġ= Ġgli . load ( dds ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( path Of ( k tx )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFiles . delete ( path Of ( dds )) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture ĠshouldBe Ġtexture K TX ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture ĠshouldBe Ġtexture DDS ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ" data " Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture ( Target ._ 2 D _ ARRAY , ĠFormat . RGBA 8 _ UN ORM _ PACK 8 , ĠVec 3 i ( 1 ), Ġ 2 , Ġ 1 , Ġ 1 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠTexture 2 d Array ( texture )[ 0 ]. data () ĠshouldBe Ġtexture . data ( 0 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTexture 2 d Array ( texture )[ 1 ]. data () ĠshouldBe Ġtexture . data ( 1 , Ġ 0 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ" perf " Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtexture Load ( extent : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture 2 d ( Format . R 8 _ UN ORM _ PACK 8 , ĠVec 2 i ( extent )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġclear Ġ 2 5 5 . b ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġerror Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġns Ġ= Ġmeasure Nano Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( level Index Ġin Ġ 0 Ġuntil Ġtexture . levels ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextend _ Ġ= Ġtexture . extent ( level Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( y Ġin Ġ 0 Ġuntil Ġextend _. y ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( x Ġin Ġ 0 Ġuntil Ġextend _. x ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtex el Ġ= Ġtexture . load < Byte >( Vec 2 i ( x , Ġy ), Ġlevel Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( tex el Ġ== Ġ 2 5 5 . b ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" 2 D Ġtexture Ġload Ġperformance Ġtest : Ġ$ ns Ġns ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtexture Fetch ( extent : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture 2 d ( Format . R 8 _ UN ORM _ PACK 8 , ĠVec 2 i ( extent )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Ġclear Ġ 2 5 5 . b ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// g li :: sampler 2 d < float > ĠSampler Ġ( texture , Ġgli :: WRAP _ CLAMP _ TO _ EDGE ) ĠTODO Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstd :: clock _ t ĠTime Begin Ġ= Ġstd Ġ:: clock () Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( g li :: Ġtexture 2 d :: size _ type ĠLevel Index Ġ= Ġ 0 , ĠLevel Count Ġ= ĠTexture . levels (); ĠLevel Index Ġ< ĠLevel Count ; Ġ++ Level Index ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgli :: texture 2 d :: extent _ type Ġconst Ġextent Ġ= Ġtexture . extent ( Level Index ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( g li :: Ġsize _ t Ġy Ġ= Ġ 0 ; Ġy Ġ< Ġextent . y ; Ġ++ y ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( g li :: Ġsize _ t Ġx Ġ= Ġ 0 ; Ġx Ġ< Ġextent . x ; Ġ++ x ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgli :: vec 4 Ġconst Ġ& ĠTex el Ġ= ĠSampler Ġ. Ġtex el _ fetch Ġ( g li :: texture 2 d :: extent _ type ( x , Ġy ), ĠLevel Index ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError Ġ+= Ġgli :: all ( g li :: epsilon Equal ( Tex el , Ġgli :: vec 4 ( 1 , Ġ 0 , Ġ 0 , Ġ 1 ), Ġ 0 . 0 0 1 f )) Ġ? Ġ 0 Ġ: Ġ 1 Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġassert (! Error ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstd :: clock _ t ĠTime End Ġ= Ġstd Ġ:: clock () Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintf (" 2 D Ġtexture Ġfetch Ġperformance Ġtest : Ġ% d \ n ", ĠTime End Ġ- ĠTime Begin ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġtexture 2 d Access ( iterations : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġerror Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtextures Ġ= ĠArrayList < Texture 2 d >( Format . COUNT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( format Ġin ĠFormat . FIRST Ġ.. ĠFormat . LAST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( Texture 2 d ( format , ĠVec 2 i ( 4 ), Ġ 9 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtextures Ġ+= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( this . empty ()) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġns Ġ= Ġmeasure Nano Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġiterations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtextures . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( layer Index Ġin Ġ 0 Ġuntil Ġit . layers ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( level Index Ġin Ġ 0 Ġuntil Ġit . levels ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Address Ġ= Ġit . data ( layer Index , Ġ 0 , Ġlevel Index ). adr ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( base Address Ġ!= ĠNULL ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" 2 d Ġtexture Ġdata Ġaccess Ġperformance Ġtest : Ġ$ ns Ġns ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġns Ġ= Ġmeasure Nano Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġiterations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtextures . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( layer Index Ġin Ġ 0 Ġuntil Ġit . layers ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( level Index Ġin Ġ 0 Ġuntil Ġit . levels ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġit . size ( level Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( size Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" 2 d Ġtexture Ġsize Ġperformance Ġtest : Ġ$ ns Ġns ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġns Ġ= Ġmeasure Nano Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġiterations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtextures . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( layer Index Ġin Ġ 0 Ġuntil Ġit . layers ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( level Index Ġin Ġ 0 Ġuntil Ġit . levels ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextent Ġ= Ġit . extent ( level Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( extent . x Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( extent . y Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" 2 d Ġtexture Ġextent Ġaccess Ġperformance Ġtest : Ġ$ ns Ġns ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġns Ġ= Ġmeasure Nano Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġiterations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtextures . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( layer Index Ġin Ġ 0 Ġuntil Ġit . layers ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( level Index Ġin Ġ 0 Ġuntil Ġit . levels ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextent Ġ= Ġit . extent ( level Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġit . size ( level Index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( extent . x Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( extent . y Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( size Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" 2 d Ġtexture Ġextent Ġand Ġsize Ġaccess Ġperformance Ġtest : Ġ$ ns Ġns ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġns Ġ= Ġmeasure Nano Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġiterations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtextures . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( layer Index Ġin Ġ 0 Ġuntil Ġit . layers ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( level Index Ġin Ġ 0 Ġuntil Ġit . levels ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextent Ġ= Ġit . extent ( level Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġit . size ( level Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Address Ġ= Ġit . data ( layer Index , Ġ 0 , Ġlevel Index ). adr ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( extent . x Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( extent . y Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( size Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( base Address Ġ!= ĠNULL ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" 2 d Ġtexture Ġall Ġaccess Ġperformance Ġtest : Ġ$ ns Ġns ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcube Array Access ( iterations : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġerror Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtextures Ġ= ĠArrayList < Texture Cube Array >( Format . COUNT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( format Ġin ĠFormat . FIRST Ġ.. ĠFormat . LAST ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( Texture Cube Array ( format , ĠVec 2 i ( 4 ), Ġ 3 , Ġ 3 )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtextures Ġ+= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( this . empty ()) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġns Ġ= Ġmeasure Nano Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġiterations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtextures . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( layer Index Ġin Ġ 0 Ġuntil Ġit . layers ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( level Index Ġin Ġ 0 Ġuntil Ġit . levels ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Address Ġ= Ġit . data ( layer Index , Ġ 0 , Ġlevel Index ). adr ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( base Address Ġ!= ĠNULL ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Cube Ġarray Ġtexture Ġdata Ġaccess Ġperformance Ġtest : Ġ$ ns Ġns ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġns Ġ= Ġmeasure Nano Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġiterations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtextures . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( layer Index Ġin Ġ 0 Ġuntil Ġit . layers ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( level Index Ġin Ġ 0 Ġuntil Ġit . levels ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġit . size ( level Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( size Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Cube Ġarray Ġtexture Ġsize Ġperformance Ġtest : Ġ$ ns Ġns ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġns Ġ= Ġmeasure Nano Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġiterations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtextures . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( layer Index Ġin Ġ 0 Ġuntil Ġit . layers ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( level Index Ġin Ġ 0 Ġuntil Ġit . levels ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextent Ġ= Ġit . extent ( level Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( extent . x Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( extent . y Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Cube Ġarray Ġtexture Ġextent Ġaccess Ġperformance Ġtest : Ġ$ ns Ġns ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġns Ġ= Ġmeasure Nano Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġiterations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtextures . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( layer Index Ġin Ġ 0 Ġuntil Ġit . layers ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( level Index Ġin Ġ 0 Ġuntil Ġit . levels ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextent Ġ= Ġit . extent ( level Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġit . size ( level Index ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( extent . x Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( extent . y Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( size Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Cube Ġarray Ġtexture Ġextent Ġand Ġsize Ġaccess Ġperformance Ġtest : Ġ$ ns Ġns ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġns Ġ= Ġmeasure Nano Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġiterations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtextures . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( layer Index Ġin Ġ 0 Ġuntil Ġit . layers ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( level Index Ġin Ġ 0 Ġuntil Ġit . levels ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġextent Ġ= Ġit . extent ( level Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsize Ġ= Ġit . size ( level Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbase Address Ġ= Ġit . data ( layer Index , Ġ 0 , Ġlevel Index ). adr ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( extent . x Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( extent . y Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( size Ġ!= Ġ 0 ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( base Address Ġ!= ĠNULL ) Ġ 0 Ġelse Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Cube Ġarray Ġtexture Ġall Ġaccess Ġperformance Ġtest : Ġ$ ns Ġns ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġgeneric Creation ( iterations : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġerror Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġns Ġ= Ġmeasure Nano Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġiterations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( format Ġin ĠFormat . FIRST Ġ.. ĠFormat . LAST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture ( Target ._ 2 D _ ARRAY , Ġformat , ĠVec 3 i ( 4 , Ġ 4 , Ġ 1 ), Ġ 1 , Ġ 1 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( texture . empty ()) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Generic Ġtexture Ġcreation Ġperformance Ġtest : Ġ$ ns Ġns ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ_ 2 d Array Creation ( iterations : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġerror Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġns Ġ= Ġmeasure Nano Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġiterations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( format Ġin ĠFormat . FIRST Ġ.. ĠFormat . LAST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture 2 d Array ( format , ĠVec 2 i ( 4 ), Ġ 1 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( texture . empty ()) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" 2 D Ġarray Ġtexture Ġcreation Ġperformance Ġtest : Ġ$ ns Ġns ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġ_ 2 d Creation ( iterations : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġerror Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġns Ġ= Ġmeasure Nano Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġiterations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( format Ġin ĠFormat . FIRST Ġ.. ĠFormat . LAST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture 2 d ( format , ĠVec 2 i ( 4 ), Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( texture . empty ()) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" 2 D Ġtexture Ġcreation Ġperformance Ġtest : Ġ$ ns Ġns ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfun Ġcube Array Creation ( iterations : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġerror Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġns Ġ= Ġmeasure Nano Time Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( index Ġin Ġ 0 Ġuntil Ġiterations ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( format Ġin ĠFormat . FIRST Ġ.. ĠFormat . LAST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtexture Ġ= ĠTexture Cube Array ( format , ĠVec 2 i ( 4 ), Ġ 1 , Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Ġ+= Ġif Ġ( texture . empty ()) Ġ 1 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Cube Ġarray Ġtexture Ġcreation Ġperformance Ġtest : Ġ$ ns Ġns ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror ĠshouldBe Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠDO _ PERF _ TEST Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠPER F _ TEST _ ACCESS _ ITER ATION Ġ= Ġif Ġ( DO _ PERF _ TEST ) Ġ 1 0 0 0 0 0 Ġelse Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠPER F _ TEST _ CRE ATION _ ITER ATION Ġ= Ġif Ġ( DO _ PERF _ TEST ) Ġ 1 0 0 0 Ġelse Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Load ( if Ġ( DO _ PERF _ TEST ) Ġ 8 1 9 2 Ġelse Ġ 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Fetch ( if Ġ( DO _ PERF _ TEST ) Ġ 8 1 9 2 Ġelse Ġ 1 0 2 4 ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġtexture Lod _ nearest :: main ( DO _ PERF _ TEST Ġ? Ġ 8 1 9 2 Ġ: Ġ 1 0 2 4 ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠError Ġ+= Ġperf _ texture _ lod _ linear :: main ( DO _ PERF _ TEST Ġ? Ġ 8 1 9 2 Ġ: Ġ 1 0 2 4 ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠError Ġ+= Ġperf _ generate _ mip maps _ nearest :: main ( DO _ PERF _ TEST Ġ? Ġ 8 1 9 2 Ġ: Ġ 1 0 2 4 ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠError Ġ+= Ġperf _ generate _ mip maps _ linear :: main ( DO _ PERF _ TEST Ġ? Ġ 8 1 9 2 Ġ: Ġ 1 0 2 4 ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture 2 d Access ( PERF _ TEST _ ACCESS _ ITER ATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcube Array Access ( PERF _ TEST _ ACCESS _ ITER ATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgeneric Creation ( PERF _ TEST _ CRE ATION _ ITER ATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ 2 d Array Creation ( PERF _ TEST _ CRE ATION _ ITER ATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ 2 d Creation ( PERF _ TEST _ CRE ATION _ ITER ATION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcube Array Creation ( PERF _ TEST _ CRE ATION _ ITER ATION ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }