[varLib.varStore] Cache scalars in VarStoreInstancer

This commit is contained in:
Behdad Esfahbod 2017-10-20 13:55:09 -04:00
parent 5fabd3eb32
commit e05ece2715

View File

@ -76,22 +76,26 @@ class VarStoreInstancer(object):
self._clearCaches()
def _clearCaches(self):
pass
#self._scalars = {}
self._scalars = {}
def _getScalar(self, regionIdx):
scalar = self._scalars.get(regionIdx)
if scalar is None:
support = VarRegion_get_support(self._regions[regionIdx], self.fvar_axes)
scalar = supportScalar(self.location, support)
self._scalars[regionIdx] = scalar
return scalar
def __getitem__(self, varidx):
major, minor = varidx >> 16, varidx & 0xFFFF
varData = self._varData
supports = [VarRegion_get_support(self._regions[ri], self.fvar_axes)
for ri in varData[major].VarRegionIndex]
scalars = [self._getScalar(ri) for ri in varData[major].VarRegionIndex]
deltas = varData[major].Item[minor]
delta = 0.
for d,s in zip(deltas, supports):
if not d: continue
scalar = supportScalar(self.location, s)
delta += d * scalar
for d,s in zip(deltas, scalars):
delta += d * s
return delta