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);