diff --git a/direct/src/showbase/ShowBase.py b/direct/src/showbase/ShowBase.py index 2e49874da3..8a2d3fb629 100644 --- a/direct/src/showbase/ShowBase.py +++ b/direct/src/showbase/ShowBase.py @@ -321,6 +321,11 @@ class ShowBase(DirectObject.DirectObject): if self.camList.count(cam) != 0: self.camList.remove(cam) if not cam.isEmpty(): + camera = cam.getParent() + if self.cameraList.count(camera) != 0: + self.cameraList.remove(camera) + # Don't throw away self.camera; we want to + # preserve it for reopening the window. if cam == self.cam: self.cam = None cam.removeNode() @@ -578,10 +583,22 @@ class ShowBase(DirectObject.DirectObject): for i in range(chanConfig.getNumGroups()): # Create a top level camera node for this group - camera = self.render.attachNewNode(chanConfig.getGroupNode(i)) - self.cameraList.append(camera) + + camera = NodePath(chanConfig.getGroupNode(i)) # Extract camera cam = camera.find('**/+Camera') + + # A special case: if we have a camera but not a + # cameraList, we must have just reopened the window. Use + # that existing camera instead of creating a new one. + if self.camera != None and len(self.cameraList) == 0: + # Throw away the chancfg group in this special case. + camera = self.camera + cam.reparentTo(camera) + else: + camera.reparentTo(self.render) + + self.cameraList.append(camera) self.camList.append(cam) # Enforce our expected aspect ratio, overriding whatever # nonsense ChanConfig put in there.