using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
namespace Samples.FXAA
{
internal class FXAASampleComponent : DrawableGameComponent
{
ContentManager Content;
SpriteBatch spriteBatch;
SpriteFont font;
KeyboardState previousKeyboardState;
bool useFXAA = true;
bool rotate = true;
Vector3 cameraPosition;
Matrix world;
Matrix projection;
Matrix view;
Spaceship spaceship;
Vector3 spaceshipPos = Vector3.Zero;
float time = 0;
AntiAliasing _antiAliasing;
public FXAASampleComponent(Game game) : base(game)
{
}
/// Initializes the component. Used to load non-graphical resources.
public override void Initialize()
{
Content = new ContentManager(Game.Services, "Content");
base.Initialize();
}
/// Load graphical resources needed by this component.
protected override void LoadContent()
{
// Create and load our tank
spaceship = new Spaceship();
spaceship.Load(Content);
spriteBatch = new SpriteBatch(GraphicsDevice);
font = Content.Load("font");
projection = Matrix.CreatePerspectiveFieldOfView(
MathHelper.PiOver4, GraphicsDevice.Viewport.AspectRatio, 10f, 10000f);
_antiAliasing = new AntiAliasing(GraphicsDevice);
}
/// Unload graphical resources needed by this component.
protected override void UnloadContent()
{
Content.Unload();
}
/// Update the component.
/// GameTime of the Game.
public override void Update(GameTime gameTime)
{
KeyboardState keyState = Keyboard.GetState();
GamePadState gamePadState = GamePad.GetState(PlayerIndex.One);
if (keyState.IsKeyDown(Keys.F1) && !previousKeyboardState.IsKeyDown(Keys.F1))
useFXAA = !useFXAA;
if (keyState.IsKeyDown(Keys.F2) && !previousKeyboardState.IsKeyDown(Keys.F2))
rotate = !rotate;
if (rotate)
time += (float)gameTime.ElapsedGameTime.TotalSeconds;
world = Matrix.CreateFromAxisAngle(Vector3.Up, time);
cameraPosition = new Vector3(0, 2800f, 2800f);
view = Matrix.CreateLookAt(
cameraPosition,
Vector3.Zero,
Vector3.Up);
previousKeyboardState = keyState;
}
/// Draw this component.
/// The time elapsed since the last call to Draw.
public override void Draw(GameTime gameTime)
{
GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
_antiAliasing.SetRenderTarget(GraphicsDevice.Viewport, Color.Black);
spaceship.Draw(world, view, projection);
GraphicsDevice.SetRenderTarget(null);
_antiAliasing.DrawRenderTarget( (useFXAA ? 3 : 0), GraphicsDevice.Viewport, false);
spriteBatch.Begin();
spriteBatch.DrawString(font, String.Format("[F1] FXAA - ({0})", useFXAA ? "ON" : "OFF"), new Vector2(20, 20), Color.White);
spriteBatch.DrawString(font, String.Format("[F2] Rotate - ({0})", rotate ? "ON" : "OFF"), new Vector2(20, 40), Color.White);
spriteBatch.End();
}
}
}