Changeset View
Changeset View
Standalone View
Standalone View
source/blender/modifiers/intern/MOD_armature.c
| Show First 20 Lines • Show All 101 Lines • ▼ Show 20 Lines | static void deformVerts( | ||||
| Mesh *mesh, | Mesh *mesh, | ||||
| float (*vertexCos)[3], | float (*vertexCos)[3], | ||||
| int numVerts) | int numVerts) | ||||
| { | { | ||||
| ArmatureModifierData *amd = (ArmatureModifierData *) md; | ArmatureModifierData *amd = (ArmatureModifierData *) md; | ||||
| MOD_previous_vcos_store(md, vertexCos); /* if next modifier needs original vertices */ | MOD_previous_vcos_store(md, vertexCos); /* if next modifier needs original vertices */ | ||||
| armature_deform_verts(DEG_get_evaluated_object(ctx->depsgraph, amd->object), ctx->object, mesh, vertexCos, NULL, | armature_deform_verts(amd->object, ctx->object, mesh, vertexCos, NULL, | ||||
| numVerts, amd->deformflag, (float(*)[3])amd->prevCos, amd->defgrp_name, NULL); | numVerts, amd->deformflag, (float(*)[3])amd->prevCos, amd->defgrp_name, NULL); | ||||
| /* free cache */ | /* free cache */ | ||||
| if (amd->prevCos) { | if (amd->prevCos) { | ||||
| MEM_freeN(amd->prevCos); | MEM_freeN(amd->prevCos); | ||||
| amd->prevCos = NULL; | amd->prevCos = NULL; | ||||
| } | } | ||||
| } | } | ||||
| static void deformVertsEM( | static void deformVertsEM( | ||||
| ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *em, | ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *em, | ||||
| Mesh *mesh, float (*vertexCos)[3], int numVerts) | Mesh *mesh, float (*vertexCos)[3], int numVerts) | ||||
| { | { | ||||
| ArmatureModifierData *amd = (ArmatureModifierData *) md; | ArmatureModifierData *amd = (ArmatureModifierData *) md; | ||||
| Mesh *mesh_src = MOD_deform_mesh_eval_get(ctx->object, em, mesh, NULL, numVerts, false, false); | Mesh *mesh_src = MOD_deform_mesh_eval_get(ctx->object, em, mesh, NULL, numVerts, false, false); | ||||
| MOD_previous_vcos_store(md, vertexCos); /* if next modifier needs original vertices */ | MOD_previous_vcos_store(md, vertexCos); /* if next modifier needs original vertices */ | ||||
| armature_deform_verts(DEG_get_evaluated_object(ctx->depsgraph, amd->object), ctx->object, mesh_src, vertexCos, NULL, | armature_deform_verts(amd->object, ctx->object, mesh_src, vertexCos, NULL, | ||||
| numVerts, amd->deformflag, (float(*)[3])amd->prevCos, amd->defgrp_name, NULL); | numVerts, amd->deformflag, (float(*)[3])amd->prevCos, amd->defgrp_name, NULL); | ||||
| /* free cache */ | /* free cache */ | ||||
| if (amd->prevCos) { | if (amd->prevCos) { | ||||
| MEM_freeN(amd->prevCos); | MEM_freeN(amd->prevCos); | ||||
| amd->prevCos = NULL; | amd->prevCos = NULL; | ||||
| } | } | ||||
| if (mesh_src != mesh) { | if (mesh_src != mesh) { | ||||
| BKE_id_free(NULL, mesh_src); | BKE_id_free(NULL, mesh_src); | ||||
| } | } | ||||
| } | } | ||||
| static void deformMatricesEM( | static void deformMatricesEM( | ||||
| ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *em, | ModifierData *md, const ModifierEvalContext *ctx, struct BMEditMesh *em, | ||||
| Mesh *mesh, float (*vertexCos)[3], | Mesh *mesh, float (*vertexCos)[3], | ||||
| float (*defMats)[3][3], int numVerts) | float (*defMats)[3][3], int numVerts) | ||||
| { | { | ||||
| ArmatureModifierData *amd = (ArmatureModifierData *) md; | ArmatureModifierData *amd = (ArmatureModifierData *) md; | ||||
| Mesh *mesh_src = MOD_deform_mesh_eval_get(ctx->object, em, mesh, NULL, numVerts, false, false); | Mesh *mesh_src = MOD_deform_mesh_eval_get(ctx->object, em, mesh, NULL, numVerts, false, false); | ||||
| armature_deform_verts(DEG_get_evaluated_object(ctx->depsgraph, amd->object), ctx->object, mesh_src, vertexCos, defMats, | armature_deform_verts(amd->object, ctx->object, mesh_src, vertexCos, defMats, | ||||
| numVerts, amd->deformflag, NULL, amd->defgrp_name, NULL); | numVerts, amd->deformflag, NULL, amd->defgrp_name, NULL); | ||||
| if (mesh_src != mesh) { | if (mesh_src != mesh) { | ||||
| BKE_id_free(NULL, mesh_src); | BKE_id_free(NULL, mesh_src); | ||||
| } | } | ||||
| } | } | ||||
| static void deformMatrices( | static void deformMatrices( | ||||
| ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, | ModifierData *md, const ModifierEvalContext *ctx, Mesh *mesh, | ||||
| float (*vertexCos)[3], float (*defMats)[3][3], int numVerts) | float (*vertexCos)[3], float (*defMats)[3][3], int numVerts) | ||||
| { | { | ||||
| ArmatureModifierData *amd = (ArmatureModifierData *) md; | ArmatureModifierData *amd = (ArmatureModifierData *) md; | ||||
| Mesh *mesh_src = MOD_deform_mesh_eval_get(ctx->object, NULL, mesh, NULL, numVerts, false, false); | Mesh *mesh_src = MOD_deform_mesh_eval_get(ctx->object, NULL, mesh, NULL, numVerts, false, false); | ||||
| armature_deform_verts(DEG_get_evaluated_object(ctx->depsgraph, amd->object), ctx->object, mesh_src, vertexCos, defMats, | armature_deform_verts(amd->object, ctx->object, mesh_src, vertexCos, defMats, | ||||
| numVerts, amd->deformflag, NULL, amd->defgrp_name, NULL); | numVerts, amd->deformflag, NULL, amd->defgrp_name, NULL); | ||||
| if (mesh_src != mesh) { | if (mesh_src != mesh) { | ||||
| BKE_id_free(NULL, mesh_src); | BKE_id_free(NULL, mesh_src); | ||||
| } | } | ||||
| } | } | ||||
| ModifierTypeInfo modifierType_Armature = { | ModifierTypeInfo modifierType_Armature = { | ||||
| Show All 34 Lines | |||||