@@ -33,87 +33,88 @@ const innerHeight = 1080;
3333const innerWidth = 1920 ;
3434camera . position . z = 500 ;
3535
36- const canvas = { }
37- canvas . addEventListener = function ( ) { }
38- canvas . style = { }
39- canvas . getContext = function ( kind ) {
40- return {
41- getExtension ( extension ) {
42- if ( extension == 'EXT_blend_minmax' ) {
43- return { MIN_EXT : 32775 , MAX_EXT : 32776 }
44- }
45- if ( extension == 'OES_vertex_array_object' ) {
46- return {
47- createVertexArrayOES ( ) { return 1 } ,
48- bindVertexArrayOES ( ) { } ,
49- deleteVertexArrayOES ( ) { } ,
50- }
51- }
52- } ,
53- createTexture ( ) { } ,
54- bindTexture ( ) { } ,
55- texImage2D ( ) { } ,
56- texParameteri ( ) { } ,
57- uniform1i ( ) { } ,
58- uniform1f ( ) { } ,
59- uniform2f ( ) { } ,
60- uniform3f ( ) { } ,
61- uniform4f ( ) { } ,
62- clearColor ( ) { } ,
63- clear ( ) { } ,
64- clearDepth ( ) { } ,
65- clearStencil ( ) { } ,
66- enable ( ) { } ,
67- disable ( ) { } ,
68- depthFunc ( ) { } ,
69- depthMask ( ) { } ,
70- frontFace ( ) { } ,
71- cullFace ( ) { } ,
72- getContextAttributes ( ) { } ,
73- createBuffer ( ) { } ,
74- bindBuffer ( ) { } ,
75- bufferData ( ) { } ,
76- createProgram ( ) { } ,
77- attachShader ( ) { } ,
78- linkProgram ( ) { } ,
79- useProgram ( ) { } ,
80- getAttribLocation ( ) { } ,
81- getUniformLocation ( ) { } ,
82- createShader ( ) { } ,
83- shaderSource ( ) { } ,
84- compileShader ( ) { } ,
85- getShaderParameter ( ) { } ,
86- getProgramInfoLog ( ) { return "" } ,
87- getShaderInfoLog ( ) { return "" } ,
88- getProgramParameter ( ) { } ,
89- deleteShader ( ) { } ,
90- colorMask ( ) { } ,
91- drawElements ( ) { } ,
92- lineWidth ( ) { } ,
93- drawArrays ( ) { } ,
94- viewport ( ) { } ,
95- getParameter ( param ) {
96- if ( param == 34930 ) { return 16 }
97- if ( param == 35660 ) { return 16 }
98- if ( param == 3379 ) { return 8192 }
99- if ( param == 36347 ) { return 1024 }
100- if ( param == 36348 ) { return 32 }
101- if ( param == 36349 ) { return 1024 }
102- if ( param == 35661 ) { return 80 }
103- if ( param == 7938 ) { return "WebGL 2.0" }
104- if ( param == 3088 ) { return [ 0 , 0 , 1024 , 480 ] }
105- if ( param == 2978 ) { return [ 0 , 0 , 1024 , 480 ] }
106- } ,
107- MAX_TEXTURE_IMAGE_UNITS : 34930 ,
108- MAX_VERTEX_TEXTURE_IMAGE_UNITS : 35660 ,
109- MAX_TEXTURE_SIZE : 3379 ,
110- MAX_VERTEX_UNIFORM_VECTORS : 36347 ,
111- MAX_VARYING_VECTORS : 36348 ,
112- MAX_FRAGMENT_UNIFORM_VECTORS : 36349 ,
113- MAX_COMBINED_TEXTURE_IMAGE_UNITS : 35661 ,
114- VERSION : 7938 ,
115- SCISSOR_BOX : 3088 ,
116- VIEWPORT : 2978
36+ const canvas = {
37+ addEventListener ( ) { } ,
38+ style : { } ,
39+ getContext ( kind ) {
40+ return {
41+ getExtension ( extension ) {
42+ if ( extension == 'EXT_blend_minmax' ) {
43+ return { MIN_EXT : 32775 , MAX_EXT : 32776 }
44+ }
45+ if ( extension == 'OES_vertex_array_object' ) {
46+ return {
47+ createVertexArrayOES ( ) { return 1 } ,
48+ bindVertexArrayOES ( ) { } ,
49+ deleteVertexArrayOES ( ) { } ,
50+ }
51+ }
52+ } ,
53+ createTexture ( ) { } ,
54+ bindTexture ( ) { } ,
55+ texImage2D ( ) { } ,
56+ texParameteri ( ) { } ,
57+ uniform1i ( ) { } ,
58+ uniform1f ( ) { } ,
59+ uniform2f ( ) { } ,
60+ uniform3f ( ) { } ,
61+ uniform4f ( ) { } ,
62+ clearColor ( ) { } ,
63+ clear ( ) { } ,
64+ clearDepth ( ) { } ,
65+ clearStencil ( ) { } ,
66+ enable ( ) { } ,
67+ disable ( ) { } ,
68+ depthFunc ( ) { } ,
69+ depthMask ( ) { } ,
70+ frontFace ( ) { } ,
71+ cullFace ( ) { } ,
72+ getContextAttributes ( ) { } ,
73+ createBuffer ( ) { } ,
74+ bindBuffer ( ) { } ,
75+ bufferData ( ) { } ,
76+ createProgram ( ) { } ,
77+ attachShader ( ) { } ,
78+ linkProgram ( ) { } ,
79+ useProgram ( ) { } ,
80+ getAttribLocation ( ) { } ,
81+ getUniformLocation ( ) { } ,
82+ createShader ( ) { } ,
83+ shaderSource ( ) { } ,
84+ compileShader ( ) { } ,
85+ getShaderParameter ( ) { } ,
86+ getProgramInfoLog ( ) { return "" } ,
87+ getShaderInfoLog ( ) { return "" } ,
88+ getProgramParameter ( ) { } ,
89+ deleteShader ( ) { } ,
90+ colorMask ( ) { } ,
91+ drawElements ( ) { } ,
92+ lineWidth ( ) { } ,
93+ drawArrays ( ) { } ,
94+ viewport ( ) { } ,
95+ getParameter ( param ) {
96+ if ( param == 34930 ) { return 16 }
97+ if ( param == 35660 ) { return 16 }
98+ if ( param == 3379 ) { return 8192 }
99+ if ( param == 36347 ) { return 1024 }
100+ if ( param == 36348 ) { return 32 }
101+ if ( param == 36349 ) { return 1024 }
102+ if ( param == 35661 ) { return 80 }
103+ if ( param == 7938 ) { return "WebGL 2.0" }
104+ if ( param == 3088 ) { return [ 0 , 0 , 1024 , 480 ] }
105+ if ( param == 2978 ) { return [ 0 , 0 , 1024 , 480 ] }
106+ } ,
107+ MAX_TEXTURE_IMAGE_UNITS : 34930 ,
108+ MAX_VERTEX_TEXTURE_IMAGE_UNITS : 35660 ,
109+ MAX_TEXTURE_SIZE : 3379 ,
110+ MAX_VERTEX_UNIFORM_VECTORS : 36347 ,
111+ MAX_VARYING_VECTORS : 36348 ,
112+ MAX_FRAGMENT_UNIFORM_VECTORS : 36349 ,
113+ MAX_COMBINED_TEXTURE_IMAGE_UNITS : 35661 ,
114+ VERSION : 7938 ,
115+ SCISSOR_BOX : 3088 ,
116+ VIEWPORT : 2978
117+ }
117118 }
118119}
119120
@@ -161,28 +162,32 @@ const createGeometryParticle = (size) => {
161162} ;
162163
163164// Initialize particles
165+ var initialized = false ;
164166const particles = [ ] ;
165- for ( let i = 0 ; i < NUM_PARTICLES ; i ++ ) {
166- const size = 10 + Math . random ( ) * 80 ;
167- const particle =
168- createGeometryParticle ( size ) ;
169-
170- // Random initial position
171- const visibleWidth = 2 * Math . tan ( 75 * Math . PI / 360 ) * 500 * camera . aspect ;
172- particle . position . set (
173- THREE . MathUtils . randFloatSpread ( visibleWidth ) ,
174- THREE . MathUtils . randFloatSpread ( visibleWidth / camera . aspect ) ,
175- 0
176- ) ;
177167
178- // Velocity storage
179- particle . velocity = new THREE . Vector2 (
180- ( Math . random ( ) - 0.5 ) * 8 ,
181- ( Math . random ( ) - 0.5 ) * 8
182- ) ;
168+ function initialize ( ) {
169+ for ( let i = 0 ; i < NUM_PARTICLES ; i ++ ) {
170+ const size = 10 + Math . random ( ) * 80 ;
171+ const particle = createGeometryParticle ( size ) ;
172+
173+ // Random initial position
174+ const visibleWidth = 2 * Math . tan ( 75 * Math . PI / 360 ) * 500 * camera . aspect ;
175+ particle . position . set (
176+ THREE . MathUtils . randFloatSpread ( visibleWidth ) ,
177+ THREE . MathUtils . randFloatSpread ( visibleWidth / camera . aspect ) ,
178+ 0
179+ ) ;
183180
184- scene . add ( particle ) ;
185- particles . push ( particle ) ;
181+ // Velocity storage
182+ particle . velocity = new THREE . Vector2 (
183+ ( Math . random ( ) - 0.5 ) * 8 ,
184+ ( Math . random ( ) - 0.5 ) * 8
185+ ) ;
186+
187+ scene . add ( particle ) ;
188+ particles . push ( particle ) ;
189+ }
190+ initialized = true ;
186191}
187192
188193// Metrics and animation
@@ -206,6 +211,9 @@ function animate() {
206211
207212class Benchmark {
208213 runIteration ( ) {
214+ if ( ! initialized ) {
215+ initialize ( ) ;
216+ }
209217 animate ( ) ;
210218 }
211219}
0 commit comments