Browse Source

Resize fixes

Josh Yelon 18 years ago
parent
commit
4669ea9486
2 changed files with 23 additions and 3 deletions
  1. 7 0
      direct/src/filter/CommonFilters.py
  2. 16 3
      direct/src/filter/FilterManager.py

+ 7 - 0
direct/src/filter/CommonFilters.py

@@ -206,6 +206,13 @@ class CommonFilters:
         return True
         return True
 
 
     def setBloom(self, blend=(0.3,0.4,0.3,0.0), mintrigger=0.6, maxtrigger=1.0, desat=0.6, intensity=1.0, size="medium"):
     def setBloom(self, blend=(0.3,0.4,0.3,0.0), mintrigger=0.6, maxtrigger=1.0, desat=0.6, intensity=1.0, size="medium"):
+        if   (size==0): size="off"
+        elif (size==1): size="small"
+        elif (size==2): size="medium"
+        elif (size==3): size="large"
+        if (size=="off"):
+            self.delBloom()
+            return
         if (maxtrigger==None): maxtrigger=mintrigger+0.8
         if (maxtrigger==None): maxtrigger=mintrigger+0.8
         oldconfig = self.configuration.get("Bloom", None)
         oldconfig = self.configuration.get("Bloom", None)
         fullrebuild = True
         fullrebuild = True

+ 16 - 3
direct/src/filter/FilterManager.py

@@ -25,10 +25,11 @@ from pandac.PandaModules import Camera, DisplayRegion
 from pandac.PandaModules import OrthographicLens
 from pandac.PandaModules import OrthographicLens
 from pandac.PandaModules import AuxBitplaneAttrib
 from pandac.PandaModules import AuxBitplaneAttrib
 from direct.directnotify.DirectNotifyGlobal import *
 from direct.directnotify.DirectNotifyGlobal import *
+from direct.showbase.DirectObject import DirectObject
 
 
 __all__ = ["FilterManager"]
 __all__ = ["FilterManager"]
 
 
-class FilterManager:
+class FilterManager(DirectObject):
 
 
     notify = None
     notify = None
 
 
@@ -70,6 +71,7 @@ class FilterManager:
         self.nextsort = self.win.getSort() - 1000
         self.nextsort = self.win.getSort() - 1000
         self.basex = 0
         self.basex = 0
         self.basey = 0
         self.basey = 0
+        self.accept("window-event", self.resizeBuffers)
 
 
 
 
     def getClears(self,region):
     def getClears(self,region):
@@ -255,7 +257,7 @@ class FilterManager:
         buffer.getDisplayRegion(0).setActive(1)
         buffer.getDisplayRegion(0).setActive(1)
 
 
         self.buffers.append(buffer)
         self.buffers.append(buffer)
-        self.sizes.append((1, 1, 1))
+        self.sizes.append((mul, div, align))
         
         
         return quad
         return quad
 
 
@@ -274,7 +276,7 @@ class FilterManager:
             props.setAuxRgba(2)
             props.setAuxRgba(2)
         buffer=base.graphicsEngine.makeOutput(
         buffer=base.graphicsEngine.makeOutput(
             self.win.getPipe(), name, -1,
             self.win.getPipe(), name, -1,
-            props, winprops, GraphicsPipe.BFRefuseWindow,
+            props, winprops, GraphicsPipe.BFRefuseWindow | GraphicsPipe.BFResizeable,
             self.win.getGsg(), self.win)
             self.win.getGsg(), self.win)
         if (buffer == None):
         if (buffer == None):
             return buffer
             return buffer
@@ -292,6 +294,16 @@ class FilterManager:
         self.nextsort += 1
         self.nextsort += 1
         return buffer
         return buffer
 
 
+    def windowEvent(self, win):
+        """ When the window changes size, automatically resize all buffers """
+        self.resizeBuffers()
+
+    def resizeBuffers(self, win):
+        """ Resize all buffers to match the size of the window. """
+        for i in range(len(self.buffers)):
+            (mul, div, align) = self.sizes[i]
+            (xsize, ysize) = self.getScaledSize(mul, div, align)
+            self.buffers[i].setSize(xsize, ysize)
 
 
     def cleanup(self):
     def cleanup(self):
         """ Restore everything to its original state, deleting any
         """ Restore everything to its original state, deleting any
@@ -305,6 +317,7 @@ class FilterManager:
         self.setClears(self.win, self.wclears)
         self.setClears(self.win, self.wclears)
         self.setClears(self.region, self.rclears)
         self.setClears(self.region, self.rclears)
         self.camera.node().setInitialState(self.caminit)
         self.camera.node().setInitialState(self.caminit)
+        self.region.setCamera(self.camera)
         self.nextsort = self.win.getSort() - 1000
         self.nextsort = self.win.getSort() - 1000
         self.basex = 0
         self.basex = 0
         self.basey = 0
         self.basey = 0