Beispiel #1
0
    def init(self):
        """ Initializes the vertex buffers and makes them available as shader
        inputs. """

        self.vertexBuffers = []

        for i in xrange(2):
            vertexBuffer = Texture("VertexPositionBuffer-" + str(i))
            vertexBuffer.setup2dTexture(self.split,
                                        self.maxVertexCount / self.split,
                                        Texture.TFloat, Texture.FRgba32)
            vertexBuffer.setClearColor(Vec4(0))
            vertexBuffer.clearImage()

            MemoryMonitor.addTexture("DynamicObjectVtxBuffer" + str(i),
                                     vertexBuffer)
            Globals.render.setShaderInput("dynamicObjectVtxBuffer" + str(i),
                                          vertexBuffer)

            BufferViewerGUI.registerTexture("Vtx Positions " + str(i),
                                            vertexBuffer)
            vertexBuffer.setWrapU(Texture.WMClamp)
            vertexBuffer.setWrapV(Texture.WMClamp)
            vertexBuffer.setMinfilter(Texture.FTNearest)
            vertexBuffer.setMagfilter(Texture.FTNearest)
            self.vertexBuffers.append(vertexBuffer)

        Globals.render.setShaderInput("dynamicVtxSplit", self.split)
Beispiel #2
0
    def create(self):
        """ Creates the passes required to compute the occlusion, selecting
        the appropriate pass for the selected technique """

        technique = self.pipeline.settings.occlusionTechnique

        if technique not in self.availableTechniques:
            self.error("Unrecognized technique: " + technique)
            return

        if technique == "None":
            return

        # Create the ambient occlusion pass. The technique is selected in the
        # shader later, based on the defines
        self.aoPass = AmbientOcclusionPass()
        self.pipeline.getRenderPassManager().registerPass(self.aoPass)

        # Create the ambient occlusion blur pass
        self.blurPass = OcclusionBlurPass()
        self.pipeline.getRenderPassManager().registerPass(self.blurPass)

        # Register the configuration defines
        self.pipeline.getRenderPassManager().registerDefine(
            "OCCLUSION_TECHNIQUE_" + technique, 1)
        self.pipeline.getRenderPassManager().registerDefine("USE_OCCLUSION", 1)
        self.pipeline.getRenderPassManager().registerDefine(
            "OCCLUSION_RADIUS", self.pipeline.settings.occlusionRadius)
        self.pipeline.getRenderPassManager().registerDefine(
            "OCCLUSION_STRENGTH", self.pipeline.settings.occlusionStrength)
        self.pipeline.getRenderPassManager().registerDefine(
            "OCCLUSION_SAMPLES", self.pipeline.settings.occlusionSampleCount)
        if self.pipeline.settings.useLowQualityBlur:
            self.pipeline.getRenderPassManager().registerDefine(
                "USE_LOW_QUALITY_BLUR", 1)
        if self.pipeline.settings.useOcclusionNoise:
            self.pipeline.getRenderPassManager().registerDefine(
                "USE_OCCLUSION_NOISE", 1)

        if self.pipeline.settings.useTemporalOcclusion:

            # Create a texture to store the last frame occlusion
            self.lastFrameOcclusionTex = Texture("LastFrameOcclusion")
            self.lastFrameOcclusionTex.setup2dTexture(Globals.resolution.x,
                                                      Globals.resolution.y,
                                                      Texture.TFloat,
                                                      Texture.FR16)
            self.pipeline.getRenderPassManager().registerStaticVariable(
                "lastFrameOcclusion", self.lastFrameOcclusionTex)

            BufferViewerGUI.registerTexture("LastFrameOcclusion",
                                            self.lastFrameOcclusionTex)
            MemoryMonitor.addTexture("LastFrameOcclusion",
                                     self.lastFrameOcclusionTex)
            self.pipeline.getRenderPassManager().registerDefine(
                "USE_TEMPORAL_OCCLUSION", 1)
            self.combinePass = OcclusionCombinePass()
            self.pipeline.getRenderPassManager().registerPass(self.combinePass)
    def _createLastFrameBuffers(self):
        """ Creates the buffers which store the last frame depth, as the render
        target matcher cannot handle this """

        self.lastFrameDepth = Texture("LastFrameDepth")
        self.lastFrameDepth.setup2dTexture(self.showbase.win.getXSize(), self.showbase.win.getYSize(),
            Texture.TFloat, Texture.FR32)
        BufferViewerGUI.registerTexture("LastFrameDepth", self.lastFrameDepth)
        self.renderPassManager.registerStaticVariable("lastFrameDepth", self.lastFrameDepth)
    def deleteBuffer(self):
        """ Deletes this buffer, restoring the previous state """
        MemoryMonitor.unregisterRenderTarget(self._name, self)
        self._internalBuffer.clearRenderTextures()
        self._engine.removeWindow(self._internalBuffer)
        self._active = False
        BufferViewerGUI.unregisterBuffer(self._name)

        if self._createOverlayQuad:
            self._quad.removeNode()
Beispiel #5
0
    def _createLastFrameBuffers(self):
        """ Creates the buffers which store the last frame depth, as the render
        target matcher cannot handle this """

        self.lastFrameDepth = Texture("LastFrameDepth")
        self.lastFrameDepth.setup2dTexture(Globals.resolution.x, Globals.resolution.y,
            Texture.TFloat, Texture.FR32)
        BufferViewerGUI.registerTexture("LastFrameDepth", self.lastFrameDepth)
        MemoryMonitor.addTexture("LastFrameDepth", self.lastFrameDepth)
        self.renderPassManager.registerStaticVariable("lastFrameDepth", self.lastFrameDepth)
Beispiel #6
0
    def deleteBuffer(self):
        """ Deletes this buffer, restoring the previous state """
        MemoryMonitor.unregisterRenderTarget(self._name, self)
        self._internalBuffer.clearRenderTextures()
        self._engine.removeWindow(self._internalBuffer)
        self._active = False
        BufferViewerGUI.unregisterBuffer(self._name)

        if self._createOverlayQuad:
            self._quad.removeNode()

        for target in RenderTargetType.All:
            if self.hasTarget(target):
                tex = self.getTarget(target)
    def create(self):
        """ Creates the passes required to compute the occlusion, selecting
        the appropriate pass for the selected technique """

        technique = self.pipeline.settings.occlusionTechnique

        if technique not in self.availableTechniques:
            self.error("Unrecognized technique: " + technique)
            return

        if technique == "None":
            return

        # Create the ambient occlusion pass. The technique is selected in the 
        # shader later, based on the defines
        self.aoPass = AmbientOcclusionPass()
        self.pipeline.getRenderPassManager().registerPass(self.aoPass)

        # Create the ambient occlusion blur pass
        self.blurPass = OcclusionBlurPass()
        self.pipeline.getRenderPassManager().registerPass(self.blurPass)

        # Register the configuration defines
        self.pipeline.getRenderPassManager().registerDefine("OCCLUSION_TECHNIQUE_" + technique, 1)
        self.pipeline.getRenderPassManager().registerDefine("USE_OCCLUSION", 1)
        self.pipeline.getRenderPassManager().registerDefine("OCCLUSION_RADIUS", 
            self.pipeline.settings.occlusionRadius)
        self.pipeline.getRenderPassManager().registerDefine("OCCLUSION_STRENGTH", 
            self.pipeline.settings.occlusionStrength)
        self.pipeline.getRenderPassManager().registerDefine("OCCLUSION_SAMPLES", 
            self.pipeline.settings.occlusionSampleCount)
        if self.pipeline.settings.useLowQualityBlur:
            self.pipeline.getRenderPassManager().registerDefine("USE_LOW_QUALITY_BLUR", 1)
        if self.pipeline.settings.useOcclusionNoise:
            self.pipeline.getRenderPassManager().registerDefine("USE_OCCLUSION_NOISE", 1)


        if self.pipeline.settings.useTemporalOcclusion:
            
            # Create a texture to store the last frame occlusion
            self.lastFrameOcclusionTex = Texture("LastFrameOcclusion")
            self.lastFrameOcclusionTex.setup2dTexture(Globals.base.win.getXSize(),
                Globals.base.win.getYSize(), Texture.TFloat, Texture.FRgba8)
            self.pipeline.getRenderPassManager().registerStaticVariable("lastFrameOcclusion", self.lastFrameOcclusionTex)

            BufferViewerGUI.registerTexture("LastFrameOcclusion", self.lastFrameOcclusionTex)

            self.pipeline.getRenderPassManager().registerDefine("USE_TEMPORAL_OCCLUSION", 1)
            self.combinePass = OcclusionCombinePass()
            self.pipeline.getRenderPassManager().registerPass(self.combinePass)
    def init(self):
        """ Initializes the vertex buffers and makes them available as shader
        inputs. """

        self.vertexBuffers = []

        for i in xrange(2):
            vertexBuffer = Texture("VertexPositionBuffer-" + str(i))
            vertexBuffer.setup2dTexture(self.split, self.maxVertexCount / self.split, Texture.TFloat, Texture.FRgba32)
            vertexBuffer.setClearColor(Vec4(0))
            vertexBuffer.clearImage()

            MemoryMonitor.addTexture("DynamicObjectVtxBuffer"+str(i), vertexBuffer)
            Globals.render.setShaderInput("dynamicObjectVtxBuffer"+str(i), vertexBuffer)

            BufferViewerGUI.registerTexture("Vtx Positions " + str(i), vertexBuffer)
            vertexBuffer.setWrapU(Texture.WMClamp)
            vertexBuffer.setWrapV(Texture.WMClamp)
            vertexBuffer.setMinfilter(Texture.FTNearest)
            vertexBuffer.setMagfilter(Texture.FTNearest)
            self.vertexBuffers.append(vertexBuffer)

        Globals.render.setShaderInput("dynamicVtxSplit", self.split)
Beispiel #9
0
 def _registerBuffer(self):
     """ Internal method to register the buffer at the buffer viewer """
     BufferViewerGUI.registerBuffer(self._name, self)
Beispiel #10
0
 def _registerBuffer(self):
     """ Internal method to register the buffer at the buffer viewer """
     BufferViewerGUI.registerBuffer(self._name, self)
Beispiel #11
0
 def _unregisterBuffer(self):
     """ Internal method to unregister the buffer from the buffer viewer """
     BufferViewerGUI.unregisterBuffer(self._name)
Beispiel #12
0
 def _unregisterBuffer(self):
     """ Internal method to unregister the buffer from the buffer viewer """
     BufferViewerGUI.unregisterBuffer(self._name)