Skip to content

Commit 3323d7a

Browse files
authored
add vec2 u_seed to shader (css-doodle#80)
1 parent 8c20638 commit 3323d7a

File tree

4 files changed

+26
-98
lines changed

4 files changed

+26
-98
lines changed

css-doodle.js

+12-6
Original file line numberDiff line numberDiff line change
@@ -4330,7 +4330,7 @@
43304330
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
43314331
}
43324332

4333-
function draw_shader(shaders, width, height) {
4333+
function draw_shader(shaders, width, height, seed) {
43344334
let result = Cache.get(shaders);
43354335
if (result) {
43364336
return Promise.resolve(result);
@@ -4351,6 +4351,7 @@
43514351
fragment = add_uniform(fragment, 'uniform float u_time;');
43524352
fragment = add_uniform(fragment, 'uniform float u_timeDelta;');
43534353
fragment = add_uniform(fragment, 'uniform int u_frameIndex;');
4354+
fragment = add_uniform(fragment, 'uniform vec2 u_seed;');
43544355
// fragment = add_uniform(fragment, 'uniform vec4 u_mouse;');
43554356

43564357
// texture uniform
@@ -4408,14 +4409,17 @@ void main() {
44084409
gl.uniform1i(gl.getUniformLocation(program, n.name), i);
44094410
});
44104411

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+
}
44134417

44144418
// resolve image data in 72dpi :(
44154419
const uTimeLoc = gl.getUniformLocation(program, "u_time");
44164420
const uFrameLoc = gl.getUniformLocation(program, "u_frameIndex");
44174421
const uTimeDelta = gl.getUniformLocation(program, "u_timeDelta");
4418-
if(uTimeLoc || uFrameLoc) {
4422+
if(uTimeLoc || uTimeDelta || uFrameLoc) {
44194423
let frameIndex = 0;
44204424
let currentTime = 0;
44214425
return Promise.resolve(Cache.set(shaders, (t) => {
@@ -4430,6 +4434,7 @@ void main() {
44304434
return canvas.toDataURL();
44314435
}));
44324436
} else {
4437+
gl.drawArrays(gl.TRIANGLES, 0, 6);
44334438
return Promise.resolve(Cache.set(shaders, canvas.toDataURL()));
44344439
}
44354440
}
@@ -5337,6 +5342,7 @@ void main() {
53375342
shader_to_image({ shader, cell, id }, fn) {
53385343
let parsed = typeof shader === 'string' ? parse$7(shader) : shader;
53395344
let element = this.doodle.getElementById(cell);
5345+
const seed = this.seed;
53405346

53415347
const set_shader_prop = (v) => {
53425348
element.style.setProperty(id, `url(${v})`);
@@ -5359,7 +5365,7 @@ void main() {
53595365

53605366
let ratio = window.devicePixelRatio || 1;
53615367
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);
53635369
}
53645370
// Need to bind textures first
53655371
else {
@@ -5376,7 +5382,7 @@ void main() {
53765382
});
53775383
Promise.all(transforms).then(textures => {
53785384
parsed.textures = textures;
5379-
draw_shader(parsed, width, height).then(tick).then(fn);
5385+
draw_shader(parsed, width, height, seed).then(tick).then(fn);
53805386
});
53815387
}
53825388
}

0 commit comments

Comments
 (0)