fix a few bugs

This commit is contained in:
David Rose 2009-02-10 21:05:36 +00:00
parent a21091c9dc
commit 07aa73df98

View File

@ -164,7 +164,6 @@ class TexMemWatcher(DirectObject):
# Now start handling up the actual stuff in the scene.
self.background = None
self.overflowing = False
self.nextTexRecordKey = 0
self.rollover = None
self.isolate = None
@ -632,7 +631,6 @@ class TexMemWatcher(DirectObject):
# packing effectiveness.
texRecords.sort(key = lambda tr: (tr.tw, tr.th), reverse = True)
self.overflowing = False
for tr in texRecords:
self.placeTexture(tr)
self.texRecordsByTex[tr.tex] = tr
@ -726,7 +724,6 @@ class TexMemWatcher(DirectObject):
texRecords = self.texRecordsByTex.values()
texRecords.sort(key = lambda tr: (tr.tw, tr.th), reverse = True)
self.overflowing = False
for tr in texRecords:
self.placeTexture(tr)
@ -745,21 +742,26 @@ class TexMemWatcher(DirectObject):
def unplaceTexture(self, tr):
""" Removes the texture from its place on the canvas. """
for tp in tr.placements:
tp.clearBitmasks(self.bitmasks)
if not tp.overflowed:
self.placedQSize -= tp.area
del self.texPlacements[tp]
tr.placements = []
tr.clearCard(self)
if not tp.overflowed:
self.placedSize -= tr.size
if tr.placements:
for tp in tr.placements:
tp.clearBitmasks(self.bitmasks)
if not tp.overflowed:
self.placedQSize -= tp.area
assert self.placedQSize >= 0
del self.texPlacements[tp]
tr.placements = []
tr.clearCard(self)
if not tr.overflowed:
self.placedSize -= tr.size
assert self.placedSize >= 0
tr.overflowed = 0
def placeTexture(self, tr):
""" Places the texture somewhere on the canvas where it will
fit. """
tr.computePlacementSize(self)
tr.overflowed = 0
shouldFit = False
availableSize = self.limit - self.placedSize
@ -807,25 +809,17 @@ class TexMemWatcher(DirectObject):
return
# Just let it overflow.
self.overflowing = True
tr.overflowed = 1
tp = self.findOverflowHole(tr.area, tr.w, tr.h)
if tp:
if tp.p[1] > self.w or tp.p[3] > self.h:
tp.overflowed = 1
while len(self.bitmasks) <= tp.p[3]:
self.bitmasks.append(BitArray())
tr.placements = [tp]
tr.makeCard(self)
tp.setBitmasks(self.bitmasks)
if not tp.overflowed:
self.placedQSize += tp.area
self.placedSize += tr.size
self.texPlacements[tp] = tr
return
tp.overflowed = 1
while len(self.bitmasks) <= tp.p[3]:
self.bitmasks.append(BitArray())
tr.placements = [tp]
tr.makeCard(self)
tp.setBitmasks(self.bitmasks)
self.texPlacements[tp] = tr
# Something went wrong.
assert False
def findHole(self, area, w, h):
""" Searches for a rectangular hole that is at least area
@ -1044,7 +1038,7 @@ class TexMemWatcher(DirectObject):
t = b + 1
while t < b + h and \
(t > len(self.bitmasks) or (self.bitmasks[t] & mask).isZero()):
(t >= len(self.bitmasks) or (self.bitmasks[t] & mask).isZero()):
t += 1
if t < b + h:
@ -1089,6 +1083,7 @@ class TexRecord:
self.root = None
self.regions = []
self.placements = []
self.overflowed = 0
self.setSize(size)