filter: Add "MSAA" filter to CommonFilters

This provides an easy way to enable MSAA for the offscreen color buffer only without having to enable it on the main window.

When using this filter, it is important to have framebuffer-multisample turned off in Config.prc.
This commit is contained in:
rdb 2022-10-25 16:26:30 +02:00
parent 4d2a45f124
commit a71b417aec
1 changed files with 27 additions and 1 deletions

View File

@ -26,7 +26,7 @@ from .filterCopy import COPY
from .filterDown4 import DOWN_4
from panda3d.core import LVecBase4, LPoint2
from panda3d.core import Filename
from panda3d.core import AuxBitplaneAttrib
from panda3d.core import AuxBitplaneAttrib, AntialiasAttrib
from panda3d.core import Texture, Shader, ATSNone
from panda3d.core import FrameBufferProperties
from panda3d.core import getDefaultCoordinateSystem, CS_zup_right, CS_zup_left
@ -189,11 +189,22 @@ class CommonFilters:
fbprops.setSrgbColor(False)
clamping = False
if "MSAA" in configuration:
if fbprops is None:
fbprops = FrameBufferProperties()
fbprops.setMultisamples(configuration["MSAA"].samples)
self.finalQuad = self.manager.renderSceneInto(textures = self.textures, auxbits=auxbits, fbprops=fbprops, clamping=clamping)
if (self.finalQuad == None):
self.cleanup()
return False
if "MSAA" in configuration:
camNode = self.manager.camera.node()
state = camNode.getInitialState()
state.setAttrib(AntialiasAttrib.make(AntialiasAttrib.M_multisample))
camNode.setInitialState(state)
if ("BlurSharpen" in configuration):
blur0=self.textures["blur0"]
blur1=self.textures["blur1"]
@ -454,6 +465,19 @@ class CommonFilters:
if task != None:
return task.cont
def setMSAA(self, samples):
fullrebuild = "MSAA" not in self.configuration or self.configuration["MSAA"].samples != samples
newconfig = FilterConfig()
newconfig.samples = samples
self.configuration["MSAA"] = newconfig
return self.reconfigure(fullrebuild, "MSAA")
def delMSAA(self):
if "MSAA" in self.configuration:
del self.configuration["MSAA"]
return self.reconfigure(True, "MSAA")
return True
def setCartoonInk(self, separation=1, color=(0, 0, 0, 1)):
fullrebuild = (("CartoonInk" in self.configuration) == False)
newconfig = FilterConfig()
@ -673,6 +697,8 @@ class CommonFilters:
return True
#snake_case alias:
set_msaa = setMSAA
del_msaa = delMSAA
del_cartoon_ink = delCartoonInk
set_half_pixel_shift = setHalfPixelShift
del_half_pixel_shift = delHalfPixelShift