diff --git a/direct/src/filter/CommonFilters.py b/direct/src/filter/CommonFilters.py index 97c6921f9b..107d6809fe 100644 --- a/direct/src/filter/CommonFilters.py +++ b/direct/src/filter/CommonFilters.py @@ -206,6 +206,13 @@ class CommonFilters: 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"): + 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 oldconfig = self.configuration.get("Bloom", None) fullrebuild = True diff --git a/direct/src/filter/FilterManager.py b/direct/src/filter/FilterManager.py index bbc96e79b6..8f3c219776 100644 --- a/direct/src/filter/FilterManager.py +++ b/direct/src/filter/FilterManager.py @@ -25,10 +25,11 @@ from pandac.PandaModules import Camera, DisplayRegion from pandac.PandaModules import OrthographicLens from pandac.PandaModules import AuxBitplaneAttrib from direct.directnotify.DirectNotifyGlobal import * +from direct.showbase.DirectObject import DirectObject __all__ = ["FilterManager"] -class FilterManager: +class FilterManager(DirectObject): notify = None @@ -70,6 +71,7 @@ class FilterManager: self.nextsort = self.win.getSort() - 1000 self.basex = 0 self.basey = 0 + self.accept("window-event", self.resizeBuffers) def getClears(self,region): @@ -255,7 +257,7 @@ class FilterManager: buffer.getDisplayRegion(0).setActive(1) self.buffers.append(buffer) - self.sizes.append((1, 1, 1)) + self.sizes.append((mul, div, align)) return quad @@ -274,7 +276,7 @@ class FilterManager: props.setAuxRgba(2) buffer=base.graphicsEngine.makeOutput( self.win.getPipe(), name, -1, - props, winprops, GraphicsPipe.BFRefuseWindow, + props, winprops, GraphicsPipe.BFRefuseWindow | GraphicsPipe.BFResizeable, self.win.getGsg(), self.win) if (buffer == None): return buffer @@ -292,6 +294,16 @@ class FilterManager: self.nextsort += 1 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): """ Restore everything to its original state, deleting any @@ -305,6 +317,7 @@ class FilterManager: self.setClears(self.win, self.wclears) self.setClears(self.region, self.rclears) self.camera.node().setInitialState(self.caminit) + self.region.setCamera(self.camera) self.nextsort = self.win.getSort() - 1000 self.basex = 0 self.basey = 0