@@ -26,53 +26,36 @@ SimpleTriangleMesh* registerSimpleTriangleMesh(std::string name, const V& vertex
2626template <class V >
2727void SimpleTriangleMesh::updateVertices (const V& newPositions) {
2828 validateSize (newPositions, vertices.size (), " newPositions" );
29- auto d = standardizeVectorArray<glm::vec3, 3 >(newPositions);
30- vertices.resize (d.size ());
31- vertices.setDataHost (d);
32- vertices.markHostBufferUpdated ();
29+ vertices.setDataHost (standardizeVectorArray<glm::vec3, 3 >(newPositions));
3330}
3431
3532template <class V , class F >
3633void SimpleTriangleMesh::update (const V& newPositions, const F& newFaces) {
37- {
38- auto d = standardizeVectorArray<glm::vec3, 3 >(newPositions);
39- vertices.resize (d.size ());
40- vertices.setDataHost (d);
41- }
42- vertices.markHostBufferUpdated ();
34+ auto vertsStd = standardizeVectorArray<glm::vec3, 3 >(newPositions);
35+ vertices.resize (vertsStd.size ()); // ManagedBuffer internally does amortized doubling to make this efficient
36+ vertices.setDataHost (vertsStd);
4337
44- {
45- auto d = standardizeVectorArray<glm::uvec3, 3 >(newFaces);
46- faces.resize (d.size ());
47- faces.setDataHost (d);
48- }
49- faces.markHostBufferUpdated ();
38+ auto facesStd = standardizeVectorArray<glm::uvec3, 3 >(newFaces);
39+ faces.resize (facesStd.size ());
40+ faces.setDataHost (facesStd);
5041}
5142
5243template <class V >
5344void SimpleTriangleMesh::updateVertexPositions (const V& newPositions) {
5445 validateSize (newPositions, nVertices (), " newPositions" );
55- verticesData = standardizeVectorArray<glm::vec3, 3 >(newPositions);
56- vertices.markHostBufferUpdated ();
46+ vertices.setDataHost (standardizeVectorArray<glm::vec3, 3 >(newPositions));
5747 updateObjectSpaceBounds ();
5848}
5949
6050template <class V , class F >
6151void SimpleTriangleMesh::updateMesh (const V& newVerts, const F& newFaces) {
62- std::vector<glm::vec3> vertsStd = standardizeVectorArray<glm::vec3, 3 >(newVerts);
63- if (vertsStd.size () > verticesData.capacity ()) {
64- // amortized doubling on the CPU-side backing vectors.
65- verticesData.reserve (std::max (vertsStd.size (), 2 * verticesData.capacity ()));
66- }
67- verticesData = std::move (vertsStd);
68- vertices.markHostBufferUpdated ();
52+ auto vertsStd = standardizeVectorArray<glm::vec3, 3 >(newVerts);
53+ vertices.resize (vertsStd.size ()); // amortized doubling handled by ManagedBuffer
54+ vertices.setDataHost (vertsStd);
6955
70- std::vector<glm::uvec3> facesStd = standardizeVectorArray<glm::uvec3, 3 >(newFaces);
71- if (facesStd.size () > facesData.capacity ()) {
72- facesData.reserve (std::max (facesStd.size (), 2 * facesData.capacity ()));
73- }
74- facesData = std::move (facesStd);
75- faces.markHostBufferUpdated ();
56+ auto facesStd = standardizeVectorArray<glm::uvec3, 3 >(newFaces);
57+ faces.resize (facesStd.size ());
58+ faces.setDataHost (facesStd);
7659
7760 updateObjectSpaceBounds ();
7861}
0 commit comments