I have found two strange things that I consider as… anomalies or potential bugs:
- bloom filter doesn’t work with render.setShaderAuto();
- bloom disables antialiasing.
Since I don’t use shader generator often, I am not sure why this happens.
Here is the code sample, tested on ATI X1600 (driver 9.3) with Panda 1.6.0:
from direct.filter.CommonFilters import CommonFilters
from direct.gui.DirectGui import OnscreenText
from pandac.PandaModules import *
import sys
loadPrcFileData("", "framebuffer-multisample 1")
loadPrcFileData("", "multisamples 2")
import direct.directbase.DirectStart
render.setAntialias(AntialiasAttrib.MMultisample)
base.setBackgroundColor(0, 0, 0.1)
# instructions
def addInstructions(pos, msg):
return OnscreenText(text=msg, style=1, fg=(1,1,1,1), mayChange=1,
pos=(-1, pos), align=TextNode.ALeft, scale = .05,
shadow=(0,0,0,1), shadowOffset=(0.1,0.1))
inst1 = addInstructions(0.95, "1 : toggle interval (currently OFF)")
inst2 = addInstructions(0.90, "2 : toggle shader generator (currently OFF)")
inst3 = addInstructions(0.85, "3 : toggle bloom (currently OFF)")
inst4 = addInstructions(0.80, "Escape : exit")
#model
model = loader.loadModel("box")
model.flattenStrong()
model.reparentTo(render)
model.setScale(2)
# hpr interval
ival = model.hprInterval(30, Point3(360, 0, 0))
def toggleIval():
global ival
if ival.isPlaying():
ival.pause()
inst1.setText("1 : toggle interval (currently OFF)")
else:
ival.resume()
inst1.setText("1 : toggle interval (currently ON)")
base.accept("1", toggleIval)
ival.loop()
ival.pause()
# shader generator
autoshader_on = False
def toggleShaderGen():
global autoshader_on
if autoshader_on:
render.setShaderOff()
inst2.setText("2 : toggle shader generator (currently OFF)")
else:
render.setShaderAuto()
inst2.setText("2 : toggle shader generator (currently ON)")
autoshader_on = not autoshader_on
base.accept("2", toggleShaderGen)
#toggleShaderGen()
# bloom
filters = CommonFilters(base.win, base.cam)
bloom_on = False
def toggleBloom():
global bloom_on
if bloom_on:
filters.delBloom()
inst3.setText("3 : toggle bloom (currently OFF)")
else:
filters.setBloom(blend=(0, 0, 0, 1),
desat=-0.5,
intensity=3.0,
size=1)
inst3.setText("3 : toggle bloom (currently ON)")
bloom_on = not bloom_on
base.accept("3", toggleBloom)
#toggleBloom()
# camera
base.cam.setPos(5, -10, 10)
base.cam.lookAt(model)
base.accept("escape", sys.exit)
run()