diff options
author | Julien Duroure <julien.duroure@gmail.com> | 2019-12-14 11:02:16 +0300 |
---|---|---|
committer | Julien Duroure <julien.duroure@gmail.com> | 2019-12-14 11:02:16 +0300 |
commit | f505743b2f9f75f53b1497796869f799aa16020e (patch) | |
tree | fbe03ab40c55f2146f4fe06c15522bf3615c839c /io_scene_gltf2/blender/exp/gltf2_blender_gather_cache.py | |
parent | 76fc4142b518189b602ff69b4c43ebbfb1b23441 (diff) |
glTF exporter: Basic SK driver export (driven by armature animation)
Diffstat (limited to 'io_scene_gltf2/blender/exp/gltf2_blender_gather_cache.py')
-rwxr-xr-x | io_scene_gltf2/blender/exp/gltf2_blender_gather_cache.py | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/io_scene_gltf2/blender/exp/gltf2_blender_gather_cache.py b/io_scene_gltf2/blender/exp/gltf2_blender_gather_cache.py index f514e913..4efd08f3 100755 --- a/io_scene_gltf2/blender/exp/gltf2_blender_gather_cache.py +++ b/io_scene_gltf2/blender/exp/gltf2_blender_gather_cache.py @@ -95,3 +95,48 @@ def bonecache(func): call_or_fetch = cached unique = cached +def skdriverdiscovercache(func): + + def reset_cache_skdriverdiscovercache(): + func.__current_armature_name = None + func.__skdriverdiscover = {} + + func.reset_cache = reset_cache_skdriverdiscovercache + + @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: + result = func(*args) + func.__skdriverdiscover[args[0]] = result + func.__current_armature_name = args[0] + return result + else: + return func.__skdriverdiscover[args[0]] + return wrapper_skdriverdiscover + +def skdrivervalues(func): + + def reset_cache_skdrivervalues(): + func.__skdrivervalues = {} + + func.reset_cache = reset_cache_skdrivervalues + + @functools.wraps(func) + def wrapper_skdrivervalues(*args, **kwargs): + if not hasattr(func, "__skdrivervalues") or func.__skdrivervalues is None: + func.reset_cache() + + if args[0].name not in func.__skdrivervalues.keys(): + func.__skdrivervalues[args[0].name] = {} + if args[1] not in func.__skdrivervalues[args[0].name]: + vals = func(*args) + func.__skdrivervalues[args[0].name][args[1]] = vals + return vals + else: + return func.__skdrivervalues[args[0].name][args[1]] + return wrapper_skdrivervalues + |