Changeset View
Changeset View
Standalone View
Standalone View
source/blender/modifiers/intern/MOD_meshsequencecache.c
| Show First 20 Lines • Show All 99 Lines • ▼ Show 20 Lines | |||||
| static void freeData(ModifierData *md) | static void freeData(ModifierData *md) | ||||
| { | { | ||||
| MeshSeqCacheModifierData *mcmd = (MeshSeqCacheModifierData *)md; | MeshSeqCacheModifierData *mcmd = (MeshSeqCacheModifierData *)md; | ||||
| if (mcmd->reader) { | if (mcmd->reader) { | ||||
| mcmd->reader_object_path[0] = '\0'; | mcmd->reader_object_path[0] = '\0'; | ||||
| BKE_cachefile_reader_free(mcmd->cache_file, &mcmd->reader); | BKE_cachefile_reader_free(mcmd->cache_file, &mcmd->reader); | ||||
| } | } | ||||
| if (mcmd->vertex_velocities) { | |||||
| MEM_freeN(mcmd->vertex_velocities); | |||||
| } | |||||
| } | } | ||||
| static bool isDisabled(const struct Scene *UNUSED(scene), | static bool isDisabled(const struct Scene *UNUSED(scene), | ||||
| ModifierData *md, | ModifierData *md, | ||||
| bool UNUSED(useRenderParams)) | bool UNUSED(useRenderParams)) | ||||
| { | { | ||||
| MeshSeqCacheModifierData *mcmd = (MeshSeqCacheModifierData *)md; | MeshSeqCacheModifierData *mcmd = (MeshSeqCacheModifierData *)md; | ||||
| ▲ Show 20 Lines • Show All 108 Lines • ▼ Show 20 Lines | if ((me->mvert == mvert) || (me->medge == medge) || (me->mpoly == mpoly)) { | ||||
| LIB_ID_CREATE_NO_MAIN | LIB_ID_CREATE_NO_USER_REFCOUNT | | LIB_ID_CREATE_NO_MAIN | LIB_ID_CREATE_NO_USER_REFCOUNT | | ||||
| LIB_ID_CREATE_NO_DEG_TAG | LIB_ID_COPY_NO_PREVIEW); | LIB_ID_CREATE_NO_DEG_TAG | LIB_ID_COPY_NO_PREVIEW); | ||||
| } | } | ||||
| } | } | ||||
| Mesh *result = NULL; | Mesh *result = NULL; | ||||
| switch (cache_file->type) { | switch (cache_file->type) { | ||||
| case CACHEFILE_TYPE_ALEMBIC: | case CACHEFILE_TYPE_ALEMBIC: { | ||||
| # ifdef WITH_ALEMBIC | # ifdef WITH_ALEMBIC | ||||
| result = ABC_read_mesh(mcmd->reader, ctx->object, mesh, time, &err_str, mcmd->read_flag); | /* Time (in frames or seconds) between two velocity samples. Automatically computed to | ||||
| * scale the velocity vectors at render time for generating proper motion blur data. */ | |||||
| float velocity_scale = mcmd->velocity_scale; | |||||
| if (mcmd->cache_file->velocity_unit == CACHEFILE_VELOCITY_UNIT_FRAME) { | |||||
| velocity_scale *= FPS; | |||||
| } | |||||
| result = ABC_read_mesh(mcmd->reader, | |||||
| ctx->object, | |||||
| mesh, | |||||
| time, | |||||
| &err_str, | |||||
| mcmd->read_flag, | |||||
| mcmd->cache_file->velocity_name, | |||||
| velocity_scale); | |||||
| # endif | # endif | ||||
| break; | break; | ||||
| } | |||||
| case CACHEFILE_TYPE_USD: | case CACHEFILE_TYPE_USD: | ||||
| # ifdef WITH_USD | # ifdef WITH_USD | ||||
| result = USD_read_mesh( | result = USD_read_mesh( | ||||
| mcmd->reader, ctx->object, mesh, time * FPS, &err_str, mcmd->read_flag); | mcmd->reader, ctx->object, mesh, time * FPS, &err_str, mcmd->read_flag); | ||||
| # endif | # endif | ||||
| break; | break; | ||||
| case CACHE_FILE_TYPE_INVALID: | case CACHE_FILE_TYPE_INVALID: | ||||
| break; | break; | ||||
| } | } | ||||
| mcmd->velocity_delta = 1.0f; | |||||
| if (mcmd->cache_file->velocity_unit == CACHEFILE_VELOCITY_UNIT_SECOND) { | |||||
| mcmd->velocity_delta /= FPS; | |||||
| } | |||||
| mcmd->last_lookup_time = time; | |||||
| if (result != NULL) { | |||||
| mcmd->num_vertices = result->totvert; | |||||
| } | |||||
| if (err_str) { | if (err_str) { | ||||
| BKE_modifier_set_error(ctx->object, md, "%s", err_str); | BKE_modifier_set_error(ctx->object, md, "%s", err_str); | ||||
| } | } | ||||
| if (!ELEM(result, NULL, mesh) && (mesh != org_mesh)) { | if (!ELEM(result, NULL, mesh) && (mesh != org_mesh)) { | ||||
| BKE_id_free(NULL, mesh); | BKE_id_free(NULL, mesh); | ||||
| mesh = org_mesh; | mesh = org_mesh; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 111 Lines • Show Last 20 Lines | |||||