56 lines
1.4 KiB
C#
56 lines
1.4 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|