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 0000000000..777ade92ce Binary files /dev/null and b/test/unit/visual/screenshots/WebGL/buildGeometry()/can draw models/000.png differ 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