From dcd91b6ca51a55c746ba9ec3ded159407cb5a5db Mon Sep 17 00:00:00 2001 From: Dave Pagurek <davepagurek@gmail.com> Date: Sat, 18 Jan 2025 11:41:40 -0500 Subject: [PATCH 1/2] Fix usage of model() in buildGeometry() --- src/webgl/loading.js | 14 +----------- src/webgl/p5.RendererGL.js | 15 +++++++++++++ test/unit/visual/cases/webgl.js | 20 ++++++++++++++++++ .../buildGeometry()/can draw models/000.png | Bin 0 -> 802 bytes .../can draw models/metadata.json | 3 +++ 5 files changed, 39 insertions(+), 13 deletions(-) create mode 100644 test/unit/visual/screenshots/WebGL/buildGeometry()/can draw models/000.png create mode 100644 test/unit/visual/screenshots/WebGL/buildGeometry()/can draw models/metadata.json diff --git a/src/webgl/loading.js b/src/webgl/loading.js index 3ada682900..8997ef63e5 100755 --- a/src/webgl/loading.js +++ b/src/webgl/loading.js @@ -1087,19 +1087,7 @@ function loading(p5, fn){ fn.model = function (model, count = 1) { this._assert3d('model'); // p5._validateParameters('model', arguments); - if (model.vertices.length > 0) { - if (!this._renderer.geometryInHash(model.gid)) { - - if (model.edges.length === 0) { - model._makeTriangleEdges(); - } - - model._edgesToVertices(); - this._renderer._getOrMakeCachedBuffers(model); - } - - this._renderer._drawGeometry(model, { count }); - } + this._renderer.model(model, count); }; } diff --git a/src/webgl/p5.RendererGL.js b/src/webgl/p5.RendererGL.js index b6b90984af..f9220ee817 100644 --- a/src/webgl/p5.RendererGL.js +++ b/src/webgl/p5.RendererGL.js @@ -586,6 +586,21 @@ class RendererGL extends Renderer { this.updateShapeVertexProperties(); } + model(model, count = 1) { + if (model.vertices.length > 0) { + if (this.geometryBuilder) { + this.geometryBuilder.addRetained(model); + } else { + if (!this.geometryInHash(model.gid)) { + model._edgesToVertices(); + this._getOrMakeCachedBuffers(model); + } + + this._drawGeometry(model, { count }); + } + } + } + ////////////////////////////////////////////// // Rendering ////////////////////////////////////////////// diff --git a/test/unit/visual/cases/webgl.js b/test/unit/visual/cases/webgl.js index 14d354d500..b6e990f165 100644 --- a/test/unit/visual/cases/webgl.js +++ b/test/unit/visual/cases/webgl.js @@ -562,4 +562,24 @@ visualSuite('WebGL', function() { screenshot(); }); }); + + visualSuite('buildGeometry()', () => { + visualTest('can draw models', (p5, screenshot) => { + p5.createCanvas(50, 50, p5.WEBGL); + + const sphere = p5.buildGeometry(() => { + p5.scale(0.25); + p5.sphere(); + }); + + const geom = p5.buildGeometry(() => { + p5.model(sphere); + }); + + p5.background(255); + p5.lights(); + p5.model(geom); + screenshot(); + }); + }); }); diff --git a/test/unit/visual/screenshots/WebGL/buildGeometry()/can draw models/000.png b/test/unit/visual/screenshots/WebGL/buildGeometry()/can draw models/000.png new file mode 100644 index 0000000000000000000000000000000000000000..777ade92ce9f37d0cd9b4c4a9ffd8c5c8a660ef5 GIT binary patch literal 802 zcmV+-1Ks?IP)<h;3K|Lk000e1NJLTq001%o001%w1^@s69zTe&00001b5ch_0Itp) z=>Px%+(|@1RA@u(nAy$hFc5_u(F-r^J8wW6lmHSf04*Rv3A6#cvG2Ul3*zcn8sy|A z1dkK+3po->FtM4>=Zrmx^L##^;s*}Lg8VTRts;L+5MdRuio`Sn)><)5EPGh12z%;c z>KM5q^Z8sX77KwhK6EsjO?lbx_vM+sN5vHx$Z$B6F%1TTk75G|prQhb1OyPD0(dFW zk5u|-1_Ev}1~Gw9Z8w|EOgPL+lvb<d$^%4_%jLxBbkYvWR2jA+NMwM79i>u9>~=fX zZG}QX91e&7x|+bSK)evyY*w7lXIEh5a#?J*TiK>w`+=z)xiBmcKTA<C2-I;L2~nw3 zWb<aTaa|J(l);ns@pu%eR7%`#H@RqVl3yFd&r(5F3A0_$@0`~Nk$_M@un^RM0@Z3& zHsd>v)oS%>Td&vBZU`8k{eCaVp2=iVwA*cMRkT6g*@~-xw;wi1-Q}1Kl1`_^^?G&1 zfSiCDIBK<;Q~~FDy)Kr^rEG@+xNkfjzf{4hhGqNlc*rro0zy{t&LXW$uoUhAgbIY~ zUau!cqmgXybUI=(naFF(u}mf-E|<#-SVv)PMF@ocR84d>I5lWehrpl;<q0j(-k^08 zUK@mR1lCF<5^@(;m)vf*EA2(VWGk{6DW%$wAjqy?vDVKdJBq~VbSm!m`)kQ87K>5= z+6Zasg?(TvN^+dh1~p)vAX{O@(k<_`t)=b_I>{Jxuis|+H4rM@sjSH7^HL2If>eG4 zl_#_jdJ9Pc<>ZH)T+ZA0uxAjpFbpalDR6JW$x(w1f{sBjepU&qcnOLNVFdCHCM<XS z9=^DiqW@x9OAR!N<(ON#t8o~Em?(q3Q9u}5OPvusryy_CcUkW&MsHm>4^e*OMxuxp zh*ZMa`;rd1&}cNYH@vXCiyS2E599jXg2Xkm+;OcU+?k83pH(ETndOda72(cYT>Y#f gam_4u+@De8AF^gpiR@)Cu>b%707*qoM6N<$f_CX-^8f$< literal 0 HcmV?d00001 diff --git a/test/unit/visual/screenshots/WebGL/buildGeometry()/can draw models/metadata.json b/test/unit/visual/screenshots/WebGL/buildGeometry()/can draw models/metadata.json new file mode 100644 index 0000000000..2d4bfe30da --- /dev/null +++ b/test/unit/visual/screenshots/WebGL/buildGeometry()/can draw models/metadata.json @@ -0,0 +1,3 @@ +{ + "numScreenshots": 1 +} \ No newline at end of file From 0d5e383fdbbad950a895fc9d09e49dc002ba8454 Mon Sep 17 00:00:00 2001 From: Dave Pagurek <davepagurek@gmail.com> Date: Sat, 18 Jan 2025 11:43:50 -0500 Subject: [PATCH 2/2] Put back other changes from earlier PR --- src/webgl/loading.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/webgl/loading.js b/src/webgl/loading.js index 8997ef63e5..8c7019ccfb 100755 --- a/src/webgl/loading.js +++ b/src/webgl/loading.js @@ -441,6 +441,7 @@ function loading(p5, fn){ if (flipV) { model.flipV(); } + model._makeTriangleEdges(); if (successCallback) { return successCallback(model); @@ -464,6 +465,7 @@ function loading(p5, fn){ if (flipV) { model.flipV(); } + model._makeTriangleEdges(); if (successCallback) { return successCallback(model);