Changeset 688

Show
Ignore:
Timestamp:
09/05/03 12:53:10 (5 years ago)
Author:
sholloway
Message:

*** empty log message ***

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/RBRapier/RBRapier/Renderer/AttributeMgr.py

    r345 r688  
    3131#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3232 
    33 class AttributeChangeElement(ChangeElementBase): 
     33class AttributeChangeElement(BitmaskChangeElement): 
    3434    """Encapsulates a single collection of attribute changes""" 
    3535 
    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): 
     36class DynamicAttributeChangeElement(DynamicBitmaskChangeElement): 
    5037    """Encapsulates a single collection of attribute changes""" 
    5138 
    52     _Bitmask = 0 
     39class AttributeTrackerBase(DynamicBitmaskChangeTracker): 
     40    pass 
    5341 
    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): 
     42class AttributeTracker(AttributeTrackerBase): 
    12543    _ElementAttributeName = 'AttributeChange' 
    12644 
    127 class ClientAttributeTracker(AttributeTrackerBaseElement): 
     45class ClientAttributeTracker(AttributeTrackerBase): 
    12846    _ElementAttributeName = 'ClientAttributeChange' 
    12947 
  • trunk/RBRapier/RBRapier/Renderer/BufferMgr.py

    r345 r688  
    3131#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    3232 
    33 class BufferChangeElement(ChangeElementBase): 
     33class BufferChangeElement(BitmaskChangeElement): 
     34    """Encapsulates a single collection of buffer attribute changes""" 
     35 
     36class DynamicBufferChangeElement(DynamicBitmaskChangeElement): 
    3437    """Encapsulates a single collection of attribute changes""" 
    3538 
    36     Bitmask = 0 
     39class BufferTracker(BitmaskChangeTracker): 
     40    _ElementAttributeName = 'BufferClear' 
     41     
     42class DynamicBufferTracker(DynamicBitmaskChangeTracker): 
     43    _ElementAttributeName = 'BufferClear' 
    3744 
    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): 
     45class BufferEffector(BufferTracker): 
    12546    def Execute(self, context): 
    12647        GL.glClear(self.Bitmask) 
    12748    Draw = Execute 
    12849 
     50class DynamicBufferEffector(DynamicBufferTracker): 
     51    def Execute(self, context): 
     52        GL.glClear(self.Bitmask) 
     53    Draw = Execute 
     54 
  • trunk/RBRapier/RBRapier/Renderer/ChangeBaseMgr.py

    r528 r688  
    4040 
    4141class ChangeTrackerBase(object): 
    42     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    43     #~ Public Methods  
    44     #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    45  
    4642    def __init__(self): 
    4743        self.TrackedElements = {} 
     
    6662                Change.RemoveTracker(self.OnTrackedChange) 
    6763     
     64#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    6865 
     66class 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 
     83class 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 
     124class 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 
     158class DynamicBitmaskChangeTracker(BitmaskChangeTracker, DynamicBitmaskChangeElement): 
     159    def SequenceAdd(self, Sequence): 
     160        result = BitmaskChangeTracker.SequenceAdd(self, Sequence) 
     161        setattr(Sequence, self._ElementAttributeName, self) 
     162        return result 
     163