void Render(GameTime RenderTime) { lock (queue) { if (queue.Count > 0) { render = queue.Dequeue(); } } spriteRenderer.Begin(SpriteFlags.SortTexture | SpriteFlags.SortDepthFrontToBack | SpriteFlags.AlphaBlend); //if (engine.UseTextureFilter) //{ // device.SetSamplerState(0, SamplerState.MagFilter, TextureFilter.Anisotropic); // device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.Anisotropic); // device.SetSamplerState(0, SamplerState.MipFilter, TextureFilter.Anisotropic); //} //else { device.SetSamplerState(0, SamplerState.MagFilter, TextureFilter.Point); device.SetSamplerState(0, SamplerState.MinFilter, TextureFilter.Point); device.SetSamplerState(0, SamplerState.MipFilter, TextureFilter.Point); } // TODO engine scale spriteRenderer.Transform = SlimDX.Matrix.Scaling(new SlimDX.Vector3(renderScale, renderScale, 1)); SlimDX.Matrix lineMatrix = SlimDX.Matrix.AffineTransformation2D(1, new SlimDX.Vector2(), 0, new SlimDX.Vector2()); // TODO engine scale //lineMatrix = SlimDX.Matrix.Transformation2D(new SlimDX.Vector2(), 0, new SlimDX.Vector2(engine.Scale.x, engine.Scale.y), new SlimDX.Vector2(), 0, new SlimDX.Vector2()); lineMatrix = SlimDX.Matrix.Transformation2D(new SlimDX.Vector2(), 0, new SlimDX.Vector2(renderScale, renderScale), new SlimDX.Vector2(), 0, new SlimDX.Vector2()); lineMatrix = spriteRenderer.Transform; lineRenderer.Begin(); // application render engine.MainTarget.elapsed = RenderTime.Elapsed; float currentFactor = 1; if (render != null) { foreach (RenderEntity entity in render) { if (entity is SpriteEntity) { SpriteEntity sprite = entity as SpriteEntity; // diposed texture links may remain in queue after direct3d reset, just skip them if (sprite.Texture.Disposed) { continue; } // if sprite resolution changed, then update transform matrix if (currentFactor != sprite.Factor) { currentFactor = sprite.Factor; // TODO engine scale //spriteRenderer.Transform = SlimDX.Matrix.Scaling(new SlimDX.Vector3(engine.Scale.x * sprite.Factor, engine.Scale.y * sprite.Factor, 1)); spriteRenderer.Transform = SlimDX.Matrix.Scaling(new SlimDX.Vector3(renderScale * sprite.Factor, renderScale * sprite.Factor, 1)); } // recompute position for not 1:1 sprite resolutions SlimDX.Vector3 pos = sprite.Position; if (currentFactor != 1) { pos.X /= currentFactor; pos.Y /= currentFactor; } spriteRenderer.Draw(sprite.Texture, sprite.Rectangle, new SlimDX.Vector3(0, 0, 0), pos, sprite.Color); } else if (entity is LineEntity) { LineEntity line = entity as LineEntity; SlimDX.Vector3[] vec = new SlimDX.Vector3[] { line.Start, line.End }; SlimDX.Vector4[] v = SlimDX.Vector3.Transform(vec, ref lineMatrix); SlimDX.Vector2[] vec2 = new SlimDX.Vector2[] { new SlimDX.Vector2(v[0].X, v[0].Y), new SlimDX.Vector2(v[1].X, v[1].Y) }; lineRenderer.Draw(vec2, line.Color); } } } lineRenderer.End(); blendOverlay.BlockFadeOut = engine.IsLoading || blockBlend; blendOverlay.Render(RenderTime, spriteRenderer); if (engine.MusicBlend) { engine.Music.Volume = 1 - BlendState; } else { engine.Music.Volume = 1; } spriteRenderer.End(); errorOverlay.Render(RenderTime, spriteRenderer); loadingOverlay.Render(RenderTime, spriteRenderer); }
public void Begin() { current = new RenderEntityQueue(); }