Thanks for your response David.
I’ve made a little example with 3 models, and shareDepthBuffer.
There’s the main camera which have a cameramask of 0.
I create a camera for the two smiley.egg.pz which have a cameramask of 1. The two models are hidden for other cameras.
I create a camera for the frowney.egg.pz model which have a cameramask of 2. The model is hidden for other cameras.
Then I share the depth buffer of camera 1 with the camera 2.
Finally I render the camera 1 and camera 2 into cards in the main camera.
from pandac.PandaModules import *
import direct.directbase.DirectStart
base.cam.node().setCameraMask(BitMask32.bit(0))
# camera 1
buffer_1 = base.win.makeTextureBuffer('camera', 1024, 1024)
buffer_1.setClearColor(Vec4(0,0,0,0))
cam = base.makeCamera(buffer_1, lens=base.cam.node().getLens())
cam.reparentTo(base.cam)
cam.node().setCameraMask(BitMask32.bit(1))
card_maker = CardMaker('')
card_maker.setFrameFullscreenQuad()
filter_ = NodePath(card_maker.generate())
filter_.setTexture(buffer_1.getTexture())
filter_.setTransparency(True)
filter_.reparentTo(render2d)
# camera 2
buffer_2 = base.win.makeTextureBuffer('camera', 1024, 1024)
buffer_2.setClearColor(Vec4(0,0,0,0))
cam2 = base.makeCamera(buffer_2, lens=base.cam.node().getLens())
cam2.reparentTo(base.cam)
cam2.node().setCameraMask(BitMask32.bit(2))
card_maker2 = CardMaker('')
card_maker2.setFrameFullscreenQuad()
filter_2 = NodePath(card_maker2.generate())
filter_2.setTexture(buffer_2.getTexture())
filter_2.setTransparency(True)
filter_2.reparentTo(render2d)
# we share the depth buffer
foo = buffer_2.shareDepthBuffer(cam.node().getDisplayRegion(0).getWindow())
# debug
print 'shareDepthBuffer() returns', foo
print 'buffer_1 is a', buffer_1.getType()
print 'buffer_2 is a', buffer_2.getType()
print 'cam.node().getDisplayRegion(0).getWindow() is a', cam.node().getDisplayRegion(0).getWindow().getType()
# models
a = loader.loadModel('smiley.egg.pz')
a.reparentTo(render)
a.setPos(-2.0, 20.0, 2.0)
a.hide(~BitMask32.bit(1))
b = loader.loadModel('frowney.egg.pz')
b.reparentTo(render)
b.setPos(-1.0, 15.0, 1.0)
b.hide(~BitMask32.bit(2))
c = loader.loadModel('smiley.egg.pz')
c.reparentTo(render)
c.setPos(0.0, 10.0, 0.0)
c.hide(~BitMask32.bit(1))
run()
The output of this script is:
As we can see if we run this script, the blue smiley is not displayed between the two yellow smileys although he is between them.

