Changeset 688
- Timestamp:
- 09/05/03 12:53:10 (5 years ago)
- Files:
-
- trunk/RBRapier/RBRapier/Renderer/AttributeMgr.py (modified) (1 diff)
- trunk/RBRapier/RBRapier/Renderer/BufferMgr.py (modified) (1 diff)
- trunk/RBRapier/RBRapier/Renderer/ChangeBaseMgr.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/RBRapier/RBRapier/Renderer/AttributeMgr.py
r345 r688 31 31 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32 32 33 class AttributeChangeElement( ChangeElementBase):33 class AttributeChangeElement(BitmaskChangeElement): 34 34 """Encapsulates a single collection of attribute changes""" 35 35 36 Bitmask = 0 37 38 def __init__(self, Bitmask): 39 self.Bitmask |= Bitmask 40 41 def AddTracker(self, OnChange): 42 OnChange('add', self.Bitmask) 43 44 def RemoveTracker(self, OnChange): 45 OnChange('remove', self.Bitmask) 46 47 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 48 49 class DynamicAttributeChangeElement(DynamicChangeElementBase): 36 class DynamicAttributeChangeElement(DynamicBitmaskChangeElement): 50 37 """Encapsulates a single collection of attribute changes""" 51 38 52 _Bitmask = 0 39 class AttributeTrackerBase(DynamicBitmaskChangeTracker): 40 pass 53 41 54 def __init__(self, Bitmask): 55 self.Bitmask |= Bitmask 56 57 def AddTracker(self, OnChange): 58 self.Trackers.Add(OnChange) 59 OnChange('add', self.Bitmask) 60 61 def RemoveTracker(self, OnChange): 62 self.Trackers.Remove(OnChange) 63 OnChange('remove', self.Bitmask) 64 65 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 66 67 def _getBitmask(self): 68 return self._Bitmask 69 def _setBitmask(self, value): 70 self._Bitmask = value 71 self.Trackers.Update('update', self._Bitmask) 72 def _delBitmask(self): 73 del self._Bitmask 74 self.Trackers.Update('update', self._Bitmask) 75 76 Bitmask = property(_getBitmask, _setBitmask) 77 78 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 79 80 class AttributeTrackerBase(ChangeTrackerBase): 81 """Collects many attribute changes into a single change""" 82 83 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 84 #~ Constants / Variables / Etc. 85 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 86 87 Bitmask = 0 88 _ElementAttributeName = None # this needs to be set by derived classes 89 _NeedUpdate = 1 90 91 def __init__(self, BitmaskDefault=0): 92 ChangeTrackerBase.__init__(self) 93 self.Bitmask = self.BitmaskDefault = BitmaskDefault 94 95 def OnTrackedChange(self, ChangeType, Change): 96 if ChangeType == 'add': 97 self.Bitmask |= Change 98 elif ChangeType == 'update': 99 self.Bitmask |= Change # this might overestimate the needed attribute saves 100 # self._NeedsUpdate = 1 # this might force unneeded updates. life is so unfair ;) 101 elif ChangeType == 'remove': 102 self._NeedsUpdate = 1 103 else: 104 raise ValueError, "ChangeType is expected to be one of ['add', 'update', 'remove'], but is '%s'" % ChangeType 105 106 def UpdateAttributes(self): 107 if self._NeedUpdate: 108 self.Bitmask = self.BitmaskDefault 109 for each in self.TrackedELements: 110 self.Bitmask |= each.Bitmask 111 self._NeedUpdate = 0 112 113 def Execute(self, context): 114 pass 115 Draw = Execute 116 117 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 118 119 class AttributeTrackerBaseElement(AttributeTrackerBase, DynamicAttributeChangeElement): 120 def SequenceAdd(self, Sequence): 121 AttributeTrackerBase.SequenceAdd(self, Sequence) 122 setattr(Sequence, self._ElementAttributeName, self) 123 124 class AttributeTracker(AttributeTrackerBaseElement): 42 class AttributeTracker(AttributeTrackerBase): 125 43 _ElementAttributeName = 'AttributeChange' 126 44 127 class ClientAttributeTracker(AttributeTrackerBase Element):45 class ClientAttributeTracker(AttributeTrackerBase): 128 46 _ElementAttributeName = 'ClientAttributeChange' 129 47 trunk/RBRapier/RBRapier/Renderer/BufferMgr.py
r345 r688 31 31 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 32 32 33 class BufferChangeElement(ChangeElementBase): 33 class BufferChangeElement(BitmaskChangeElement): 34 """Encapsulates a single collection of buffer attribute changes""" 35 36 class DynamicBufferChangeElement(DynamicBitmaskChangeElement): 34 37 """Encapsulates a single collection of attribute changes""" 35 38 36 Bitmask = 0 39 class BufferTracker(BitmaskChangeTracker): 40 _ElementAttributeName = 'BufferClear' 41 42 class DynamicBufferTracker(DynamicBitmaskChangeTracker): 43 _ElementAttributeName = 'BufferClear' 37 44 38 def __init__(self, Bitmask): 39 self.Bitmask |= Bitmask 40 41 def AddTracker(self, OnChange): 42 OnChange('add', self.Bitmask) 43 44 def RemoveTracker(self, OnChange): 45 OnChange('remove', self.Bitmask) 46 47 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 48 49 class DynamicBufferChangeElement(DynamicChangeElementBase): 50 """Encapsulates a single collection of attribute changes""" 51 52 _Bitmask = 0 53 54 def __init__(self, Bitmask): 55 self.Bitmask |= Bitmask 56 57 def AddTracker(self, OnChange): 58 self.Trackers.Add(OnChange) 59 OnChange('add', self.Bitmask) 60 61 def RemoveTracker(self, OnChange): 62 self.Trackers.Remove(OnChange) 63 OnChange('remove', self.Bitmask) 64 65 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 66 67 def _getBitmask(self): 68 return self._Bitmask 69 def _setBitmask(self, value): 70 self._Bitmask = value 71 self.Trackers.Update('update', self._Bitmask) 72 def _delBitmask(self): 73 del self._Bitmask 74 self.Trackers.Update('update', self._Bitmask) 75 76 Bitmask = property(_getBitmask, _setBitmask) 77 78 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 79 80 class BufferTrackerBase(ChangeTrackerBase): 81 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 82 #~ Constants / Variables / Etc. 83 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 84 85 Bitmask = 0 86 _ElementAttributeName = 'BufferClear' 87 _NeedUpdate = 1 88 89 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 90 #~ Public Methods 91 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 92 93 def OnTrackedChange(self, ChangeType, Change): 94 if ChangeType == 'add': 95 self.Bitmask |= Change 96 elif ChangeType == 'update': 97 self.Bitmask |= Change # this might overestimate the needed attribute saves 98 # self._NeedsUpdate = 1 # this might force unneeded updates. life is so unfair ;) 99 elif ChangeType == 'remove': 100 self._NeedsUpdate = 1 101 else: 102 raise ValueError, "ChangeType is expected to be one of ['add', 'update', 'remove'], but is '%s'" % ChangeType 103 104 def UpdateBuffers(self): 105 if self._NeedUpdate: 106 self.Bitmask = 0 107 for each in self.TrackedELements: 108 self.Bitmask |= each.Bitmask 109 self._NeedUpdate = 0 110 111 def Execute(self, context): 112 pass 113 Draw = Execute 114 115 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 116 117 class BufferTracker(BufferTrackerBase, DynamicBufferChangeElement): 118 def SequenceAdd(self, Sequence): 119 BufferTrackerBase.SequenceAdd(self, Sequence) 120 setattr(Sequence, self._ElementAttributeName, self) 121 122 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 123 124 class BufferEffector(BufferTrackerBase): 45 class BufferEffector(BufferTracker): 125 46 def Execute(self, context): 126 47 GL.glClear(self.Bitmask) 127 48 Draw = Execute 128 49 50 class DynamicBufferEffector(DynamicBufferTracker): 51 def Execute(self, context): 52 GL.glClear(self.Bitmask) 53 Draw = Execute 54 trunk/RBRapier/RBRapier/Renderer/ChangeBaseMgr.py
r528 r688 40 40 41 41 class ChangeTrackerBase(object): 42 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~43 #~ Public Methods44 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~45 46 42 def __init__(self): 47 43 self.TrackedElements = {} … … 66 62 Change.RemoveTracker(self.OnTrackedChange) 67 63 64 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 68 65 66 class BitmaskChangeElement(ChangeElementBase): 67 """Encapsulates a single collection of bitmask changes""" 68 69 Bitmask = 0 70 71 def __init__(self, Bitmask=0): 72 if Bitmask: 73 self.Bitmask |= Bitmask 74 75 def AddTracker(self, OnChange): 76 OnChange('add', self.Bitmask) 77 78 def RemoveTracker(self, OnChange): 79 OnChange('remove', self.Bitmask) 80 81 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 82 83 class BitmaskChangeTracker(ChangeTrackerBase): 84 """Collects many attribute changes into a single change""" 85 86 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 87 #~ Constants / Variables / Etc. 88 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 89 90 Bitmask = 0 91 BitmaskDefault = 0 92 _BitmaskNeedUpdate = True 93 94 def __init__(self, BitmaskDefault=None): 95 ChangeTrackerBase.__init__(self) 96 if BitmaskDefault is not None: 97 self.Bitmask = self.BitmaskDefault = BitmaskDefault 98 99 def OnTrackedChange(self, ChangeType, Change): 100 if ChangeType == 'add': 101 self.Bitmask |= Change 102 elif ChangeType == 'update': 103 self.Bitmask |= Change # this might overestimate the needed attribute saves 104 # self._BitmaskNeedUpdate = True # this might force unneeded updates. life is so unfair ;) 105 elif ChangeType == 'remove': 106 self._BitmaskNeedUpdate = True 107 else: 108 raise ValueError, "ChangeType is expected to be one of ['add', 'update', 'remove'], but is '%s'" % ChangeType 109 110 def _UpdateBitmask(self, force=False): 111 if self._BitmaskNeedUpdate or force: 112 Bitmask = self.BitmaskDefault 113 for each in self.TrackedELements: 114 Bitmask |= each.Bitmask 115 self.Bitmask = Bitmask 116 self._BitmaskNeedUpdate = False 117 118 def Execute(self, context): 119 pass 120 Draw = Execute 121 122 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 123 124 class DynamicBitmaskChangeElement(DynamicChangeElementBase): 125 """Encapsulates a single collection of attribute changes""" 126 127 _Bitmask = 0 128 129 def __init__(self, Bitmask=0): 130 if Bitmask: 131 self.Bitmask |= Bitmask 132 133 def AddTracker(self, OnChange): 134 self.Trackers.Add(OnChange) 135 OnChange('add', self.Bitmask) 136 137 def RemoveTracker(self, OnChange): 138 self.Trackers.Remove(OnChange) 139 OnChange('remove', self.Bitmask) 140 141 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 142 143 def _getBitmask(self): 144 self._UpdateBitmask() 145 return self._Bitmask 146 def _setBitmask(self, value): 147 self._Bitmask = value 148 self.Trackers.Update('update', self._Bitmask) 149 def _delBitmask(self): 150 del self._Bitmask 151 self.Trackers.Update('update', self._Bitmask) 152 def _UpdateBitmask(self, force=False): 153 pass 154 Bitmask = property(_getBitmask, _setBitmask) 155 156 #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 157 158 class DynamicBitmaskChangeTracker(BitmaskChangeTracker, DynamicBitmaskChangeElement): 159 def SequenceAdd(self, Sequence): 160 result = BitmaskChangeTracker.SequenceAdd(self, Sequence) 161 setattr(Sequence, self._ElementAttributeName, self) 162 return result 163
