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)
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()
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)
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)
def _registerBuffer(self): """ Internal method to register the buffer at the buffer viewer """ BufferViewerGUI.registerBuffer(self._name, self)
def _unregisterBuffer(self): """ Internal method to unregister the buffer from the buffer viewer """ BufferViewerGUI.unregisterBuffer(self._name)