|
| 1 | +import { suite } from 'vitest'; |
1 | 2 | import p5 from '../../../src/app.js';
|
2 | 3 | import '../../js/chai_helpers';
|
3 | 4 | const toArray = (typedArray) => Array.from(typedArray);
|
@@ -2704,6 +2705,108 @@ suite('p5.RendererGL', function() {
|
2704 | 2705 | );
|
2705 | 2706 | });
|
2706 | 2707 |
|
| 2708 | + suite('Stencil Test Tracking', function() { |
| 2709 | + test('Stencil test is disabled by default', |
| 2710 | + function() { |
| 2711 | + myp5.createCanvas(50, 50, myp5.WEBGL); |
| 2712 | + const gl = myp5._renderer.GL; |
| 2713 | + const isEnabled = gl.isEnabled(gl.STENCIL_TEST); |
| 2714 | + |
| 2715 | + assert.equal(isEnabled, false); |
| 2716 | + assert.equal(myp5._renderer._userEnabledStencil, false); |
| 2717 | + } |
| 2718 | + ); |
| 2719 | + |
| 2720 | + test('Tracks when user manually enables stencil test', |
| 2721 | + function() { |
| 2722 | + myp5.createCanvas(50, 50, myp5.WEBGL); |
| 2723 | + const gl = myp5._renderer.GL; |
| 2724 | + |
| 2725 | + gl.enable(gl.STENCIL_TEST); |
| 2726 | + assert.equal(myp5._renderer._userEnabledStencil, true); |
| 2727 | + assert.equal(gl.isEnabled(gl.STENCIL_TEST), true); |
| 2728 | + } |
| 2729 | + ); |
| 2730 | + |
| 2731 | + test('Tracks when user manually disables stencil test', |
| 2732 | + function() { |
| 2733 | + myp5.createCanvas(50, 50, myp5.WEBGL); |
| 2734 | + const gl = myp5._renderer.GL; |
| 2735 | + |
| 2736 | + gl.enable(gl.STENCIL_TEST); |
| 2737 | + gl.disable(gl.STENCIL_TEST); |
| 2738 | + |
| 2739 | + assert.equal(myp5._renderer._userEnabledStencil, false); |
| 2740 | + assert.equal(gl.isEnabled(gl.STENCIL_TEST), false); |
| 2741 | + } |
| 2742 | + ); |
| 2743 | + |
| 2744 | + test('Maintains stencil test state across draw cycles when user enabled', |
| 2745 | + function() { |
| 2746 | + let drawCalled = false; |
| 2747 | + |
| 2748 | + myp5.createCanvas(50, 50, myp5.WEBGL); |
| 2749 | + const originalDraw = myp5.draw; |
| 2750 | + |
| 2751 | + myp5.draw = function() { |
| 2752 | + drawCalled = true; |
| 2753 | + if (originalDraw) originalDraw.call(myp5); |
| 2754 | + }; |
| 2755 | + |
| 2756 | + const gl = myp5._renderer.GL; |
| 2757 | + gl.enable(gl.STENCIL_TEST); |
| 2758 | + assert.equal(gl.isEnabled(gl.STENCIL_TEST), true) |
| 2759 | + myp5.redraw(); |
| 2760 | + |
| 2761 | + assert.equal(gl.isEnabled(gl.STENCIL_TEST), true); |
| 2762 | + assert.equal(myp5._renderer._userEnabledStencil, true); |
| 2763 | + |
| 2764 | + myp5.draw = originalDraw; |
| 2765 | + } |
| 2766 | + ); |
| 2767 | + |
| 2768 | + test('Internal clip operations preserve user stencil test setting', |
| 2769 | + function() { |
| 2770 | + myp5.createCanvas(50, 50, myp5.WEBGL); |
| 2771 | + const gl = myp5._renderer.GL; |
| 2772 | + |
| 2773 | + gl.enable(gl.STENCIL_TEST); |
| 2774 | + |
| 2775 | + myp5.push(); |
| 2776 | + myp5.clip(() => { |
| 2777 | + myp5.rect(0, 0, 10, 10); |
| 2778 | + }); |
| 2779 | + assert.equal(gl.isEnabled(gl.STENCIL_TEST), true) |
| 2780 | + myp5.pop(); |
| 2781 | + |
| 2782 | + assert.equal(myp5._renderer._userEnabledStencil, true); |
| 2783 | + assert.equal(gl.isEnabled(gl.STENCIL_TEST), true); |
| 2784 | + } |
| 2785 | + ); |
| 2786 | + |
| 2787 | + test('Internal clip operations do not enable stencil test for future draw cycles', |
| 2788 | + function() { |
| 2789 | + myp5.createCanvas(50, 50, myp5.WEBGL); |
| 2790 | + const gl = myp5._renderer.GL; |
| 2791 | + |
| 2792 | + gl.disable(gl.STENCIL_TEST); |
| 2793 | + assert.equal(myp5._renderer._userEnabledStencil, false); |
| 2794 | + |
| 2795 | + myp5.push(); |
| 2796 | + myp5.clip(() => { |
| 2797 | + myp5.rect(0, 0, 10, 10); |
| 2798 | + }); |
| 2799 | + assert.equal(gl.isEnabled(gl.STENCIL_TEST), true) |
| 2800 | + myp5.pop(); |
| 2801 | + |
| 2802 | + myp5.redraw(); |
| 2803 | + |
| 2804 | + assert.equal(myp5._renderer._userEnabledStencil, false); |
| 2805 | + assert.equal(gl.isEnabled(gl.STENCIL_TEST), false); |
| 2806 | + } |
| 2807 | + ); |
| 2808 | + }); |
| 2809 | + |
2707 | 2810 | suite('Matrix getters', function() {
|
2708 | 2811 | test('uModelMatrix', function() {
|
2709 | 2812 | p5.registerAddon(function (p5, fn) {
|
|
0 commit comments