From 03cfda8107259bbcf4110470b6a5bad8b3b48acb Mon Sep 17 00:00:00 2001 From: Paul Melnikow Date: Fri, 20 Feb 2026 14:27:54 -0500 Subject: [PATCH 1/2] Match the types and call buf.release() --- python/bindings.cc | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/python/bindings.cc b/python/bindings.cc index e7e6c951..cab804fb 100644 --- a/python/bindings.cc +++ b/python/bindings.cc @@ -47,30 +47,35 @@ PYBIND11_MODULE(tinyobjloader, tobj_module) auto ret = py::array_t(instance.vertices.size()); py::buffer_info buf = ret.request(); memcpy(buf.ptr, instance.vertices.data(), instance.vertices.size() * sizeof(real_t)); + buf.release(); return ret; }) .def("numpy_vertex_weights", [] (attrib_t &instance) { auto ret = py::array_t(instance.vertex_weights.size()); py::buffer_info buf = ret.request(); memcpy(buf.ptr, instance.vertex_weights.data(), instance.vertex_weights.size() * sizeof(real_t)); + buf.release(); return ret; }) .def("numpy_normals", [] (attrib_t &instance) { auto ret = py::array_t(instance.normals.size()); py::buffer_info buf = ret.request(); memcpy(buf.ptr, instance.normals.data(), instance.normals.size() * sizeof(real_t)); + buf.release(); return ret; }) .def("numpy_texcoords", [] (attrib_t &instance) { auto ret = py::array_t(instance.texcoords.size()); py::buffer_info buf = ret.request(); memcpy(buf.ptr, instance.texcoords.data(), instance.texcoords.size() * sizeof(real_t)); + buf.release(); return ret; }) .def("numpy_colors", [] (attrib_t &instance) { auto ret = py::array_t(instance.colors.size()); py::buffer_info buf = ret.request(); memcpy(buf.ptr, instance.colors.data(), instance.colors.size() * sizeof(real_t)); + buf.release(); return ret; }) ; @@ -149,9 +154,10 @@ PYBIND11_MODULE(tinyobjloader, tobj_module) .def(py::init<>()) .def_readonly("num_face_vertices", &mesh_t::num_face_vertices) .def("numpy_num_face_vertices", [] (mesh_t &instance) { - auto ret = py::array_t(instance.num_face_vertices.size()); + auto ret = py::array_t(instance.num_face_vertices.size()); py::buffer_info buf = ret.request(); - memcpy(buf.ptr, instance.num_face_vertices.data(), instance.num_face_vertices.size() * sizeof(unsigned char)); + memcpy(buf.ptr, instance.num_face_vertices.data(), instance.num_face_vertices.size() * sizeof(unsigned int)); + buf.release(); return ret; }) .def("vertex_indices", [](mesh_t &self) { @@ -204,6 +210,7 @@ PYBIND11_MODULE(tinyobjloader, tobj_module) auto ret = py::array_t(instance.indices.size() * 3); py::buffer_info buf = ret.request(); memcpy(buf.ptr, instance.indices.data(), instance.indices.size() * 3 * sizeof(int)); + buf.release(); return ret; }) .def_readonly("material_ids", &mesh_t::material_ids) @@ -211,6 +218,7 @@ PYBIND11_MODULE(tinyobjloader, tobj_module) auto ret = py::array_t(instance.material_ids.size()); py::buffer_info buf = ret.request(); memcpy(buf.ptr, instance.material_ids.data(), instance.material_ids.size() * sizeof(int)); + buf.release(); return ret; }); From 22967827cff5fc1f0fc83f2285bfe29d6be59d8e Mon Sep 17 00:00:00 2001 From: Paul Melnikow Date: Fri, 20 Feb 2026 14:32:32 -0500 Subject: [PATCH 2/2] Rm buf.release() --- python/bindings.cc | 8 -------- 1 file changed, 8 deletions(-) diff --git a/python/bindings.cc b/python/bindings.cc index cab804fb..d710b65f 100644 --- a/python/bindings.cc +++ b/python/bindings.cc @@ -47,35 +47,30 @@ PYBIND11_MODULE(tinyobjloader, tobj_module) auto ret = py::array_t(instance.vertices.size()); py::buffer_info buf = ret.request(); memcpy(buf.ptr, instance.vertices.data(), instance.vertices.size() * sizeof(real_t)); - buf.release(); return ret; }) .def("numpy_vertex_weights", [] (attrib_t &instance) { auto ret = py::array_t(instance.vertex_weights.size()); py::buffer_info buf = ret.request(); memcpy(buf.ptr, instance.vertex_weights.data(), instance.vertex_weights.size() * sizeof(real_t)); - buf.release(); return ret; }) .def("numpy_normals", [] (attrib_t &instance) { auto ret = py::array_t(instance.normals.size()); py::buffer_info buf = ret.request(); memcpy(buf.ptr, instance.normals.data(), instance.normals.size() * sizeof(real_t)); - buf.release(); return ret; }) .def("numpy_texcoords", [] (attrib_t &instance) { auto ret = py::array_t(instance.texcoords.size()); py::buffer_info buf = ret.request(); memcpy(buf.ptr, instance.texcoords.data(), instance.texcoords.size() * sizeof(real_t)); - buf.release(); return ret; }) .def("numpy_colors", [] (attrib_t &instance) { auto ret = py::array_t(instance.colors.size()); py::buffer_info buf = ret.request(); memcpy(buf.ptr, instance.colors.data(), instance.colors.size() * sizeof(real_t)); - buf.release(); return ret; }) ; @@ -157,7 +152,6 @@ PYBIND11_MODULE(tinyobjloader, tobj_module) auto ret = py::array_t(instance.num_face_vertices.size()); py::buffer_info buf = ret.request(); memcpy(buf.ptr, instance.num_face_vertices.data(), instance.num_face_vertices.size() * sizeof(unsigned int)); - buf.release(); return ret; }) .def("vertex_indices", [](mesh_t &self) { @@ -210,7 +204,6 @@ PYBIND11_MODULE(tinyobjloader, tobj_module) auto ret = py::array_t(instance.indices.size() * 3); py::buffer_info buf = ret.request(); memcpy(buf.ptr, instance.indices.data(), instance.indices.size() * 3 * sizeof(int)); - buf.release(); return ret; }) .def_readonly("material_ids", &mesh_t::material_ids) @@ -218,7 +211,6 @@ PYBIND11_MODULE(tinyobjloader, tobj_module) auto ret = py::array_t(instance.material_ids.size()); py::buffer_info buf = ret.request(); memcpy(buf.ptr, instance.material_ids.data(), instance.material_ids.size() * sizeof(int)); - buf.release(); return ret; });