Hey everyone,
This bit of code replicates a problem that occurs in my game, switching back and forth from split screen to single screen. It worked well until I added glow to it. The glow seems to mess up the display regions.
from direct.showbase.DirectObject import DirectObject
import direct.directbase.DirectStart
from pandac.PandaModules import *
from direct.filter.CommonFilters import CommonFilters
class World(DirectObject):
def __init__(self):
self.accept('space', self.stepScreens)
self.screens = 1
self.model = loader.loadModel('model')
self.model.reparentTo(render)
def stepScreens(self):
if self.screens == 1:
self.addScreen()
self.screens = 2
elif self.screens == 2:
self.removeScreen()
self.screens = 1
def addScreen(self):
#stuff that works
cam2node = Camera('cam2')
self.cam2 = NodePath(cam2node)
self.cam2.reparentTo(base.cam)
self.cam2.setPos(0, 0, 0)
self.rtop = base.cam.node().getDisplayRegion(0)
self.rbottom = base.win.makeDisplayRegion(0, 1, 0, 0.5)
self.rbottom.setCamera(self.cam2)
self.rtop.setDimensions(0, 1, 0.5, 1)
base.cam.node().getLens().setAspectRatio(float(self.rtop.getPixelWidth()) / float(self.rtop.getPixelHeight()))
self.cam2.node().getLens().setAspectRatio(float(self.rbottom.getPixelWidth()) / float(self.rbottom.getPixelHeight()))
#stuff that doesn't
render.setShaderAuto()
self.filters = CommonFilters(base.win, base.cam)
self.filters.setBloom(blend=(0,0,0,1), desat=0, intensity=1.0, size="small")
self.filters2 = CommonFilters(base.win, self.cam2)
self.filters2.setBloom(blend=(0,0,0,1), desat=0, intensity=1.0, size="small")
def removeScreen(self):
#stuff that doesn't work
self.filters.cleanup()
self.filters2.cleanup()
render.setShaderOff()
#stuff that does
base.win.removeDisplayRegion(self.rbottom)
self.rtop.setDimensions(0, 1, 0, 1)
base.cam.node().getLens().setAspectRatio(float(self.rtop.getPixelWidth()) / float(self.rtop.getPixelHeight()))
self.cam2.removeNode()
w = World()
run()
To run the code you will need any model (it just has to be named “model”) in the same location as the program. The default camera controls are still enabled, so you can look around and see what is happening.
EDIT: I suppose I should clarify. While running the program, press space to switch from one display region to two display regions. After switching back and forth several times, the display regions start getting messed up.
Has anyone seen something like this before?
Thanks in advance.