SND\AstrorEnales_cp bf14329432 - Implemented BasicEffect.fx for Dx10, Dx11 and Metro
- Started to work on a Sample to demonstrate all the BasicEffect possibilities
2012-09-09 14:31:03 +00:00

154 lines
5.0 KiB
C#

using System;
using ANX.Framework;
using ANX.Framework.Input;
using ANX.Framework.Graphics;
// This file is part of the ANX.Framework created by the
// "ANX.Framework developer group" and released under the Ms-PL license.
// For details see: http://anxframework.codeplex.com/license
namespace DualTextureSample
{
public class Game1 : Game
{
private enum DualTextureMode
{
Fog,
NoFog,
VertexColorFog,
VertexColorNoFog,
}
GraphicsDeviceManager graphics;
DualTextureEffect dualTextureEffect;
Texture2D texture1;
Texture2D texture2;
VertexBuffer vertices;
VertexBuffer verticesVertexColor;
IndexBuffer indices;
SpriteBatch spritebatch;
SpriteFont font;
DualTextureMode mode = DualTextureMode.Fog;
KeyboardState lastState;
public Game1()
{
graphics = new GraphicsDeviceManager(this);
Content.RootDirectory = "SampleContent";
}
protected override void Initialize()
{
base.Initialize();
}
protected override void LoadContent()
{
dualTextureEffect = new DualTextureEffect(GraphicsDevice);
spritebatch = new SpriteBatch(GraphicsDevice);
font = Content.Load<SpriteFont>("Fonts/Debug");
texture1 = Content.Load<Texture2D>("Textures/stone_tile");
texture2 = Content.Load<Texture2D>("Textures/lightmap");
vertices = new VertexBuffer(GraphicsDevice, VertexDualTexture.VertexDeclaration, 4, BufferUsage.WriteOnly);
vertices.SetData(new VertexDualTexture[]
{
new VertexDualTexture(new Vector3(-5f, 0f, -5f), new Vector2(0f, 0f), new Vector2(0f, 0f)),
new VertexDualTexture(new Vector3(-5f, 0f, 5f), new Vector2(1f, 0f), new Vector2(1f, 0f)),
new VertexDualTexture(new Vector3(5f, 0f, 5f), new Vector2(1f, 1f), new Vector2(1f, 1f)),
new VertexDualTexture(new Vector3(5f, 0f, -5f), new Vector2(0f, 1f), new Vector2(0f, 1f)),
});
verticesVertexColor = new VertexBuffer(GraphicsDevice, VertexDualTextureColor.VertexDeclaration,
4, BufferUsage.WriteOnly);
verticesVertexColor.SetData(new VertexDualTextureColor[]
{
new VertexDualTextureColor(new Vector3(-5f, 0f, -5f), new Vector2(0f, 0f), new Vector2(0f, 0f), Color.Green),
new VertexDualTextureColor(new Vector3(-5f, 0f, 5f), new Vector2(1f, 0f), new Vector2(1f, 0f), Color.Green),
new VertexDualTextureColor(new Vector3(5f, 0f, 5f), new Vector2(1f, 1f), new Vector2(1f, 1f), Color.Green),
new VertexDualTextureColor(new Vector3(5f, 0f, -5f), new Vector2(0f, 1f), new Vector2(0f, 1f), Color.Green),
});
indices = new IndexBuffer(GraphicsDevice, IndexElementSize.ThirtyTwoBits, 6, BufferUsage.WriteOnly);
indices.SetData(new uint[] { 0, 2, 1, 0, 3, 2 });
}
protected override void UnloadContent()
{
}
protected override void Update(GameTime gameTime)
{
KeyboardState newState = Keyboard.GetState();
if(newState.IsKeyDown(Keys.Space) && lastState.IsKeyDown(Keys.Space) == false)
{
int currentIndex = (int)mode;
string[] names = Enum.GetNames(typeof(DualTextureMode));
currentIndex++;
if(currentIndex == names.Length)
currentIndex = 0;
mode = (DualTextureMode)Enum.Parse(typeof(DualTextureMode), names[currentIndex]);
}
lastState = newState;
base.Update(gameTime);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.CornflowerBlue);
DrawText();
DrawMesh();
base.Draw(gameTime);
}
private void DrawText()
{
spritebatch.Begin();
spritebatch.DrawString(font, "DualTexture sample - Current mode: " + mode + "\nSwitch with Space",
new Vector2(5, 5), Color.White);
spritebatch.End();
GraphicsDevice.BlendState = BlendState.Opaque;
GraphicsDevice.DepthStencilState = DepthStencilState.Default;
}
private void DrawMesh()
{
dualTextureEffect.VertexColorEnabled =
(mode == DualTextureMode.VertexColorFog || mode == DualTextureMode.VertexColorNoFog);
dualTextureEffect.DiffuseColor = Color.White.ToVector3();
dualTextureEffect.FogEnabled = (mode == DualTextureMode.VertexColorFog || mode == DualTextureMode.Fog);
dualTextureEffect.FogColor = Color.Gray.ToVector3();
dualTextureEffect.FogStart = 5f;
dualTextureEffect.FogEnd = 15f;
dualTextureEffect.Alpha = 1f;
dualTextureEffect.Texture = texture1;
dualTextureEffect.Texture2 = texture2;
dualTextureEffect.World = Matrix.Identity;
dualTextureEffect.View = Matrix.CreateLookAt(new Vector3(0f, 5f, -8f), Vector3.Zero, Vector3.Up);
dualTextureEffect.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4,
GraphicsDevice.Viewport.AspectRatio, 1f, 100f);
dualTextureEffect.CurrentTechnique.Passes[0].Apply();
GraphicsDevice.Indices = indices;
if (dualTextureEffect.VertexColorEnabled)
GraphicsDevice.SetVertexBuffer(verticesVertexColor);
else
GraphicsDevice.SetVertexBuffer(vertices);
GraphicsDevice.DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, 4, 0, 2);
}
}
}