From a71b417aecc9f23d093af13e63f8d17caa7de87c Mon Sep 17 00:00:00 2001 From: rdb Date: Tue, 25 Oct 2022 16:26:30 +0200 Subject: [PATCH] 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. --- direct/src/filter/CommonFilters.py | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/direct/src/filter/CommonFilters.py b/direct/src/filter/CommonFilters.py index ce4b9078c8..c5313d0662 100644 --- a/direct/src/filter/CommonFilters.py +++ b/direct/src/filter/CommonFilters.py @@ -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