/// <summary> /// Draw stuff here /// </summary> /// <param name="gameTime"></param> /// <param name="stereoEye"></param> protected override void Draw(GameTime gameTime, StereoEye stereoEye) { var sb = GetService <SpriteBatch>(); var rand = new Random(); var data = Enumerable.Range(0, 64 * 64) .Select(i => rand.NextColor()) .ToArray(); dynamicTexture.SetData(0, null, data, 0, 64 * 64); GraphicsDevice.SetTargets(dsMS.Surface, rtMS.Surface); GraphicsDevice.Clear(dsMS.Surface); GraphicsDevice.Clear(rtMS.Surface, Color4.Black); sb.Begin(SpriteBlend.AlphaBlend, null, null, Matrix.OrthoRH(256, 256, -1, 1)); sb.DrawSprite(texture, 0, 0, 256, angle, Color.White); sb.End(); GraphicsDevice.Resolve(rtMS, rt); GraphicsDevice.RestoreBackbuffer(); int w = GraphicsDevice.DisplayBounds.Width; int h = GraphicsDevice.DisplayBounds.Height; // begin sprite gathering/accumulation : sb.Begin(); if (InputDevice.IsKeyDown(Keys.T)) { sb.Draw(texture2, 0, 0, 256, 256, Color.White); sb.Draw(texture, 256 + 128 * 0, 0, 128, 128, Color.Red); sb.Draw(texture2, 256 + 128 * 1, 0, 128, 128, Color.Lime); sb.Draw(texture, 256 + 128 * 2, 0, 128, 128, Color.Blue); } else { sb.Draw(rt, 0, 0, 256, 256, Color.White); sb.Draw(rt, 256 + 128 * 0, 0, 128, 128, Color.Red); sb.Draw(rt, 256 + 128 * 1, 0, 128, 128, Color.Lime); sb.Draw(rt, 256 + 128 * 2, 0, 128, 128, Color.Blue); } sb.Restart(SpriteBlend.AlphaBlend, SamplerState.PointClamp); sb.DrawSprite(texture, 576, 192, 128, angle, Color.White); sb.Restart(SpriteBlend.AlphaBlend, SamplerState.LinearClamp); sb.DrawSprite(texture, 704, 192, 128, angle, Color.White); sb.Restart(SpriteBlend.AlphaBlend, SamplerState.PointClamp); sb.DrawSprite(texture2, 576, 192 + 128, 128, angle, Color.White); sb.Restart(SpriteBlend.AlphaBlend, SamplerState.LinearClamp); sb.DrawSprite(texture2, 704, 192 + 128, 128, angle, Color.White); sb.Restart(); for (int i = 0; i < numSprites; i++) { //sb.DrawSprite( sb.TextureWhite, r.Next(w), r.Next(h), 7, r.NextFloat(0,360), r.NextColor() ); sb.Draw(sb.TextureWhite, r.Next(w), r.Next(h), 7, 7, r.NextColor()); } var h1 = font1.LineHeight; var h2 = font2.LineHeight; font1.DrawString(sb, "Lenna Soderberg", 64, 256 + h1, Color.White); font2.DrawString(sb, "Text (tracking = 0)", 64, 256 + h1 + h2, Color.Red); font2.DrawString(sb, "Text (tracking = 2)", 64, 256 + h1 + h2 * 2, Color.Lime, 2); font2.DrawString(sb, "Text (tracking = 4)", 64, 256 + h1 + h2 * 3, Color.Lime, 4); font2.DrawString(sb, string.Format("{1} sprites -> FPS = {0}", gameTime.Fps, numSprites), 64, 256 + h1 + h2 * 4, Color.White); sb.Restart(SpriteBlend.Additive); sb.Draw(sb.TextureWhite, 256, 128, 128, 128, Color.Gray); sb.Draw(texture, 256, 128, 128, 128, Color.Gray); sb.Restart(SpriteBlend.AlphaBlend); sb.Draw(sb.TextureWhite, 256 + 128, 128, 128, 128, new Color(240, 225, 160, 255)); sb.Restart(SpriteBlend.NegMultiply); sb.Draw(texture, 256 + 128, 128, 128, 128, Color.White); sb.Restart(SpriteBlend.AlphaBlend, SamplerState.AnisotropicWrap); sb.DrawBeam(texture2, new Vector2(350, 540), new Vector2(750, 415), Color.Yellow, Color.LightYellow, 80, 5.5f, offset); sb.Restart(SpriteBlend.AlphaBlend, SamplerState.PointClamp); sb.Draw(dynamicTexture, 0, 0, 256, 256, new Color(255, 255, 255, 64)); sb.Draw(sb.TextureBlack, 0, 0, 8, 8, Color.White); sb.Draw(sb.TextureBlue, 8, 0, 8, 8, Color.White); sb.Draw(sb.TextureGreen, 16, 0, 8, 8, Color.White); sb.Draw(sb.TextureRed, 24, 0, 8, 8, Color.White); sb.Draw(sb.TextureWhite, 32, 0, 8, 8, Color.White); sb.Restart(); var name = atlas.SubImageNames[((int)atlasId) % atlas.SubImageNames.Length]; var ar = atlas.GetSubImageRectangle(name); sb.Draw(atlas.Texture, new Rectangle(10, 400, ar.Width, ar.Height), ar, Color.White); sb.DrawDebugString(10, 392, name, Color.White); atlasId += gameTime.ElapsedSec * 2; sb.End(); base.Draw(gameTime, stereoEye); }