/// <summary> /// Dispose resources /// </summary> /// <param name="disposing">Free managed resources</param> protected virtual void Dispose(bool disposing) { if (disposing) { this.lightGeometryVertexBuffer?.Dispose(); this.lightGeometryVertexBuffer = null; this.lightGeometryIndexBuffer?.Dispose(); this.lightGeometryIndexBuffer = null; this.globalLightInputLayout?.Dispose(); this.globalLightInputLayout = null; this.pointLightInputLayout?.Dispose(); this.pointLightInputLayout = null; this.spotLightInputLayout?.Dispose(); this.spotLightInputLayout = null; this.combineLightsInputLayout?.Dispose(); this.combineLightsInputLayout = null; this.rasterizerStencilPass?.Dispose(); this.rasterizerStencilPass = null; this.rasterizerLightingPass?.Dispose(); this.rasterizerLightingPass = null; this.depthStencilVolumeMarking?.Dispose(); this.depthStencilVolumeMarking = null; this.depthStencilVolumeDrawing?.Dispose(); this.depthStencilVolumeDrawing = null; } }
/// <summary> /// Constructor /// </summary> /// <param name="graphics">Graphics</param> public SceneRendererDeferredLights(Graphics graphics) { this.Graphics = graphics; this.globalLightInputLayout = graphics.CreateInputLayout(DrawerPool.EffectDeferredComposer.DeferredDirectionalLight.GetSignature(), VertexPosition.Input(BufferSlot)); this.pointLightInputLayout = graphics.CreateInputLayout(DrawerPool.EffectDeferredComposer.DeferredPointLight.GetSignature(), VertexPosition.Input(BufferSlot)); this.spotLightInputLayout = graphics.CreateInputLayout(DrawerPool.EffectDeferredComposer.DeferredSpotLight.GetSignature(), VertexPosition.Input(BufferSlot)); this.combineLightsInputLayout = graphics.CreateInputLayout(DrawerPool.EffectDeferredComposer.DeferredCombineLights.GetSignature(), VertexPosition.Input(BufferSlot)); //Stencil pass rasterizer state this.rasterizerStencilPass = EngineRasterizerState.StencilPass(graphics); //Counter clockwise cull rasterizer state this.rasterizerLightingPass = EngineRasterizerState.LightingPass(graphics); //Depth-stencil state for volume marking (Value != 0 if object is inside of the current drawing volume) this.depthStencilVolumeMarking = EngineDepthStencilState.VolumeMarking(graphics); //Depth-stencil state for volume drawing (Process pixels if stencil value != stencil reference) this.depthStencilVolumeDrawing = EngineDepthStencilState.VolumeDrawing(graphics); }