Skip to content

Commit fa10e95

Browse files
committed
feat(glsl): merge multiple main functions in js sim
1 parent a644585 commit fa10e95

File tree

2 files changed

+49
-0
lines changed

2 files changed

+49
-0
lines changed

src/jssim.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,15 @@ export function sim(func, { BuiltIn, ...options } = {}, extras) {
2424
let result;
2525
if (extras) {
2626
result = func(readOnlyView({ ...global, ...extras }));
27+
28+
const rm = result.main;
29+
const em = extras.main;
30+
if (rm && em) {
31+
result.main = () => {
32+
em();
33+
rm();
34+
};
35+
}
2736
} else {
2837
result = func(gl);
2938
}

test/glsl/sim.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -572,4 +572,44 @@ vec4 bar(vec2 x) {
572572
const resultOrg = min(Number(150), Number(120));
573573
assert.equal(resultOrg, 120);
574574
});
575+
576+
it('works fine with merging multiple mains', () => {
577+
const shader1 = ({ output, vec2 }) => {
578+
let foo = output(vec2(0.0));
579+
let getFoo = vec2(() => {
580+
return foo;
581+
})
582+
let main = () => {
583+
foo = vec2(1.0);
584+
}
585+
return { getFoo, main };
586+
};
587+
const shader2 = ({ output, vec2 }) => {
588+
let bar = output(vec2(0.0));
589+
let getBar = vec2(() => {
590+
return bar;
591+
})
592+
let main = () => {
593+
bar = vec2(3.0);
594+
}
595+
return { getBar, main };
596+
};
597+
const one = buildGLSL(shader1, { glsl: false });
598+
const two = buildGLSL(shader2, { glsl: false });
599+
const mixed = joinGLSL([one, two], { js: true, glsl: false });
600+
const { js } = mixed;
601+
602+
const { main, getFoo, getBar } = js;
603+
604+
main();
605+
606+
const bar = getBar();
607+
assert.closeTo(bar.x, 3.0, 0.00001);
608+
assert.closeTo(bar.y, 3.0, 0.00001);
609+
610+
const foo = getFoo();
611+
assert.closeTo(foo.x, 1.0, 0.00001);
612+
assert.closeTo(foo.y, 1.0, 0.00001);
613+
614+
});
575615
});

0 commit comments

Comments
 (0)