4330
4330
gl . texParameteri ( gl . TEXTURE_2D , gl . TEXTURE_MAG_FILTER , gl . LINEAR ) ;
4331
4331
}
4332
4332
4333
- function draw_shader ( shaders , width , height ) {
4333
+ function draw_shader ( shaders , width , height , seed ) {
4334
4334
let result = Cache . get ( shaders ) ;
4335
4335
if ( result ) {
4336
4336
return Promise . resolve ( result ) ;
4351
4351
fragment = add_uniform ( fragment , 'uniform float u_time;' ) ;
4352
4352
fragment = add_uniform ( fragment , 'uniform float u_timeDelta;' ) ;
4353
4353
fragment = add_uniform ( fragment , 'uniform int u_frameIndex;' ) ;
4354
+ fragment = add_uniform ( fragment , 'uniform vec2 u_seed;' ) ;
4354
4355
// fragment = add_uniform(fragment, 'uniform vec4 u_mouse;');
4355
4356
4356
4357
// texture uniform
@@ -4408,14 +4409,17 @@ void main() {
4408
4409
gl . uniform1i ( gl . getUniformLocation ( program , n . name ) , i ) ;
4409
4410
} ) ;
4410
4411
4411
- // two triangles to form a rectangle
4412
- gl . drawArrays ( gl . TRIANGLES , 0 , 6 ) ;
4412
+ // vec2 u_seed, u_seed.x = hash(doodle.seed) / 1e16, u_seed.y = Math.random()
4413
+ const uSeed = gl . getUniformLocation ( program , "u_seed" ) ;
4414
+ if ( uSeed ) {
4415
+ gl . uniform2f ( uSeed , hash ( seed ) / 1e16 , Math . random ( ) ) ;
4416
+ }
4413
4417
4414
4418
// resolve image data in 72dpi :(
4415
4419
const uTimeLoc = gl . getUniformLocation ( program , "u_time" ) ;
4416
4420
const uFrameLoc = gl . getUniformLocation ( program , "u_frameIndex" ) ;
4417
4421
const uTimeDelta = gl . getUniformLocation ( program , "u_timeDelta" ) ;
4418
- if ( uTimeLoc || uFrameLoc ) {
4422
+ if ( uTimeLoc || uTimeDelta || uFrameLoc ) {
4419
4423
let frameIndex = 0 ;
4420
4424
let currentTime = 0 ;
4421
4425
return Promise . resolve ( Cache . set ( shaders , ( t ) => {
@@ -4430,6 +4434,7 @@ void main() {
4430
4434
return canvas . toDataURL ( ) ;
4431
4435
} ) ) ;
4432
4436
} else {
4437
+ gl . drawArrays ( gl . TRIANGLES , 0 , 6 ) ;
4433
4438
return Promise . resolve ( Cache . set ( shaders , canvas . toDataURL ( ) ) ) ;
4434
4439
}
4435
4440
}
@@ -5337,6 +5342,7 @@ void main() {
5337
5342
shader_to_image ( { shader, cell, id } , fn ) {
5338
5343
let parsed = typeof shader === 'string' ? parse$7 ( shader ) : shader ;
5339
5344
let element = this . doodle . getElementById ( cell ) ;
5345
+ const seed = this . seed ;
5340
5346
5341
5347
const set_shader_prop = ( v ) => {
5342
5348
element . style . setProperty ( id , `url(${ v } )` ) ;
@@ -5359,7 +5365,7 @@ void main() {
5359
5365
5360
5366
let ratio = window . devicePixelRatio || 1 ;
5361
5367
if ( ! parsed . textures . length || parsed . ticker ) {
5362
- draw_shader ( parsed , width , height ) . then ( tick ) . then ( fn ) ;
5368
+ draw_shader ( parsed , width , height , seed ) . then ( tick ) . then ( fn ) ;
5363
5369
}
5364
5370
// Need to bind textures first
5365
5371
else {
@@ -5376,7 +5382,7 @@ void main() {
5376
5382
} ) ;
5377
5383
Promise . all ( transforms ) . then ( textures => {
5378
5384
parsed . textures = textures ;
5379
- draw_shader ( parsed , width , height ) . then ( tick ) . then ( fn ) ;
5385
+ draw_shader ( parsed , width , height , seed ) . then ( tick ) . then ( fn ) ;
5380
5386
} ) ;
5381
5387
}
5382
5388
}
0 commit comments