BMesh: remove redundant mesh-backups from EDBM_op_* API
Using BMesh operators through the edit-mesh API created a full copy of the mesh so it was possible to restore the mesh in case one of the operators raised an error. Remove support for automatic backup/restore from the EDBM_op_* API's as it adds significant overhead and was rarely used. Operators that need this can use the BMBackup API to backup & restore the mesh in case of failure. Add warning levels to BMO_error_raise so operators can report problems without it being interpreted as a request to cancel the operation. For high-poly meshes creating and freeing a full copy is an expensive operation, removing this gives a speedup of ~1.77x for most operators except for "connect_verts" / "connect_vert_pair" which still uses this functionality.
This commit is contained in:
@@ -44,10 +44,10 @@ BLI_STATIC_ASSERT(sizeof(PyC_FlagSet) == sizeof(BMO_FlagSet), "size mismatch");
|
||||
|
||||
static int bpy_bm_op_as_py_error(BMesh *bm)
|
||||
{
|
||||
if (BMO_error_occurred(bm)) {
|
||||
if (BMO_error_occurred_at_level(bm, BMO_ERROR_FATAL)) {
|
||||
/* NOTE: we could have multiple errors. */
|
||||
const char *errmsg;
|
||||
if (BMO_error_get(bm, &errmsg, NULL)) {
|
||||
if (BMO_error_get(bm, &errmsg, NULL, NULL)) {
|
||||
PyErr_Format(PyExc_RuntimeError, "bmesh operator: %.200s", errmsg);
|
||||
BMO_error_clear(bm);
|
||||
return -1;
|
||||
|
||||
Reference in New Issue
Block a user