using Microsoft.Xna.Framework; using Microsoft.Xna.Framework.Graphics; using System; namespace Kav { public sealed class PointLight : IDisposable { public Vector3 Position { get; } public Color Color { get; } public float Radius { get; } public BoundingSphere BoundingSphere { get; } public RenderTargetCube ShadowMap { get; } public PointLight( GraphicsDevice graphicsDevice, Vector3 position, Color color, float radius, int shadowMapSize ) { Position = position; Color = color; Radius = radius; BoundingSphere = new BoundingSphere(position, Radius); ShadowMap = new RenderTargetCube( graphicsDevice, shadowMapSize, false, SurfaceFormat.Single, DepthFormat.Depth24, 0, RenderTargetUsage.PreserveContents ); var currentRTs = graphicsDevice.GetRenderTargets(); foreach (CubeMapFace face in Enum.GetValues(typeof(CubeMapFace))) { graphicsDevice.SetRenderTarget(ShadowMap, face); graphicsDevice.Clear(Color.White); } graphicsDevice.SetRenderTargets(currentRTs); } public void Dispose() { ShadowMap.Dispose(); } } }