glTF exporter: fix bone caching issue

This commit is contained in:
Julien Duroure 2020-02-22 08:20:26 +01:00
parent 22424950a3
commit cc3e0cce4a
3 changed files with 12 additions and 5 deletions

View File

@ -15,7 +15,7 @@
bl_info = {
'name': 'glTF 2.0 format',
'author': 'Julien Duroure, Norbert Nopper, Urs Hanselmann, Moritz Becher, Benjamin Schmithüsen, Jim Eckerlein, and many external contributors',
"version": (1, 2, 24),
"version": (1, 2, 25),
'blender': (2, 82, 7),
'location': 'File > Import-Export',
'description': 'Import-Export as glTF 2.0',

View File

@ -21,6 +21,7 @@ from io_scene_gltf2.io.com import gltf2_io_debug
from io_scene_gltf2.blender.exp.gltf2_blender_gather_cache import cached
from io_scene_gltf2.blender.exp import gltf2_blender_gather_animation_samplers
from io_scene_gltf2.blender.exp import gltf2_blender_gather_animation_channel_target
from io_scene_gltf2.blender.exp import gltf2_blender_gather_animation_sampler_keyframes
from io_scene_gltf2.blender.exp import gltf2_blender_get
from io_scene_gltf2.blender.exp import gltf2_blender_gather_skins
from io_scene_gltf2.blender.exp import gltf2_blender_gather_drivers
@ -124,6 +125,8 @@ def gather_animation_channels(blender_action: bpy.types.Action,
# resetting driver caches
gltf2_blender_gather_drivers.get_sk_driver_values.reset_cache()
gltf2_blender_gather_drivers.get_sk_drivers.reset_cache()
# resetting bone caches
gltf2_blender_gather_animation_sampler_keyframes.get_bone_matrix.reset_cache()
return channels

View File

@ -69,6 +69,13 @@ def cached(func):
def bonecache(func):
def reset_cache_bonecache():
func.__current_action_name = None
func.__current_armature_name = None
func.__bonecache = {}
func.reset_cache = reset_cache_bonecache
@functools.wraps(func)
def wrapper_bonecache(*args, **kwargs):
if args[2] is None:
@ -78,9 +85,7 @@ def bonecache(func):
pose_bone_if_armature = args[0].pose.bones[args[2]]
if not hasattr(func, "__current_action_name"):
func.__current_action_name = None
func.__current_armature_name = None
func.__bonecache = {}
func.reset_cache()
if args[6] != func.__current_action_name or args[0] != func.__current_armature_name:
result = func(*args)
func.__bonecache = result
@ -106,7 +111,6 @@ def skdriverdiscovercache(func):
@functools.wraps(func)
def wrapper_skdriverdiscover(*args, **kwargs):
if not hasattr(func, "__current_armature_name") or func.__current_armature_name is None:
func.__current_armature_name = None
func.reset_cache()
if args[0] != func.__current_armature_name: