From 45b02f807449f562dac734af03b85e6d07c46aeb Mon Sep 17 00:00:00 2001 From: Dave Pagurek Date: Wed, 22 Jan 2025 17:51:07 -0500 Subject: [PATCH] Fix p5.Geometry absorbing the ambient fill color --- src/webgl/p5.RendererGL.js | 7 ++--- test/unit/visual/cases/webgl.js | 24 ++++++++++++++++++ .../000.png | Bin 0 -> 450 bytes .../metadata.json | 3 +++ 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 test/unit/visual/screenshots/WebGL/buildGeometry()/only fills set in buildGeometry are kept/000.png create mode 100644 test/unit/visual/screenshots/WebGL/buildGeometry()/only fills set in buildGeometry are kept/metadata.json diff --git a/src/webgl/p5.RendererGL.js b/src/webgl/p5.RendererGL.js index 3ae2afc935..d890e8d830 100644 --- a/src/webgl/p5.RendererGL.js +++ b/src/webgl/p5.RendererGL.js @@ -46,6 +46,7 @@ import filterInvertFrag from "./shaders/filters/invert.frag"; import filterThresholdFrag from "./shaders/filters/threshold.frag"; import filterShaderVert from "./shaders/filters/default.vert"; import { PrimitiveToVerticesConverter } from "../shape/custom_shapes"; +import { Color } from "../color/p5.Color"; const STROKE_CAP_ENUM = {}; const STROKE_JOIN_ENUM = {}; @@ -438,8 +439,8 @@ class RendererGL extends Renderer { ); } this.geometryBuilder = new GeometryBuilder(this); - this.geometryBuilder.prevFillColor = [...this.states.curFillColor]; - this.states.curFillColor = [-1, -1, -1, -1]; + this.geometryBuilder.prevFillColor = this.states.fillColor; + this.fill(new Color([-1, -1, -1, -1])); } /** @@ -458,7 +459,7 @@ class RendererGL extends Renderer { ); } const geometry = this.geometryBuilder.finish(); - this.states.curFillColor = this.geometryBuilder.prevFillColor; + this.fill(this.geometryBuilder.prevFillColor); this.geometryBuilder = undefined; return geometry; } diff --git a/test/unit/visual/cases/webgl.js b/test/unit/visual/cases/webgl.js index b6e990f165..bf112aab2a 100644 --- a/test/unit/visual/cases/webgl.js +++ b/test/unit/visual/cases/webgl.js @@ -581,5 +581,29 @@ visualSuite('WebGL', function() { p5.model(geom); screenshot(); }); + + visualTest('only fills set in buildGeometry are kept', (p5, screenshot) => { + p5.createCanvas(50, 50, p5.WEBGL); + + const geom = p5.buildGeometry(() => { + p5.push(); + p5.translate(-p5.width*0.2, 0); + p5.scale(0.15); + p5.sphere(); + p5.pop(); + + p5.push(); + p5.fill('red'); + p5.translate(p5.width*0.2, 0); + p5.scale(0.15); + p5.sphere(); + p5.pop(); + }); + + p5.fill('blue'); + p5.noStroke(); + p5.model(geom); + screenshot(); + }); }); }); diff --git a/test/unit/visual/screenshots/WebGL/buildGeometry()/only fills set in buildGeometry are kept/000.png b/test/unit/visual/screenshots/WebGL/buildGeometry()/only fills set in buildGeometry are kept/000.png new file mode 100644 index 0000000000000000000000000000000000000000..24ac9849880e6b810f0d5c5e1d3a79e604342972 GIT binary patch literal 450 zcmV;z0X_bSP)Px$d`Uz>RA@u(munJ&FbssZHy$y8h+btcE2{M2|x0sAMt@O z@@*u8NDy&KAdZ$(ux8mHVvf#fVGwZ&)+`%D%+Wb53?fd!nq`ed@@=(a52W5)0e}p= z=_Np|r!+DexK@fLL!HLZWT2{-0I{CXNWK7g2#Ta6?;N2FsPrU+q(;aDZ7%#$Q#Zdt z5$h%J|6~P5vTD=GDN$LU`y~LaiCJ$bw5T@=ONQY>+B_oIQ!pLx(k0jV_+b}aXIKo}44gbq!r;toks#D%brRS!+fXHY@ z(=yqoin0Z>Ca6NG5t_pECX!6!-QCz8{;3U%^*;DSnM-L-`RX*U-C}0S-??eN))f-j zWlCgLbjr^Wt_>~mytEcQjRD0IMOx0ezcUg!x9HODVdUGG1d$-(lt3IUr(n&pLBt%L s)50L)6s%b`h?t{uS{Ou}f;G!N0oA)&GsBjf@~ literal 0 HcmV?d00001 diff --git a/test/unit/visual/screenshots/WebGL/buildGeometry()/only fills set in buildGeometry are kept/metadata.json b/test/unit/visual/screenshots/WebGL/buildGeometry()/only fills set in buildGeometry are kept/metadata.json new file mode 100644 index 0000000000..2d4bfe30da --- /dev/null +++ b/test/unit/visual/screenshots/WebGL/buildGeometry()/only fills set in buildGeometry are kept/metadata.json @@ -0,0 +1,3 @@ +{ + "numScreenshots": 1 +} \ No newline at end of file