public void RenderSprite(Graphics.Sprite sprite, Vector2 pos, Vector2 srcPos, int srcWidth, int srcHeight, int color) { //Rectangle rc = new Rectangle(srcX, srcY, srcWidth, srcHeight); //if (sprite.Animation != null && sprite.Animation.Progressive && sprite.Frames != null) // spriteRenderer.Draw(sprite.Frames[0].Texture, rc, new SlimDX.Vector3(0, 0, 0), new SlimDX.Vector3(x, y, CalcZ(layer) + 0.001f), new SlimDX.Color4(color)); //spriteRenderer.Draw(sprite.Frame.Texture, rc, new SlimDX.Vector3(0, 0, 0), new SlimDX.Vector3(x, y, CalcZ(layer)), new SlimDX.Color4(color)); Graphics.SpriteEntity entity = new Graphics.SpriteEntity(); entity.Rectangle = new Rectangle(srcPos.x, srcPos.y, srcWidth, srcHeight); entity.Color = new SlimDX.Color4(color); entity.Factor = sprite.Resolution; long now = System.Diagnostics.Stopwatch.GetTimestamp(); if (now - sprite.Frame.TimeStamp < (long)(Stopwatch.Frequency / popInSpeed) && popInSpeed != 0) { entity.Color.Alpha *= (now - sprite.Frame.TimeStamp) / (float)Stopwatch.Frequency * popInSpeed; } if (sprite.Animation != null && sprite.Animation.Progressive && sprite.Frames != null) { entity.Texture = sprite.Frames[0].Texture; entity.Position = new SlimDX.Vector3(pos.x, pos.y, CalcZ(layer) + 0.001f); device.AddEntity(entity); } Graphics.SpriteEntity entity2 = new Burntime.Platform.Graphics.SpriteEntity(); entity2.Rectangle = entity.Rectangle; entity2.Color = entity.Color; entity2.Texture = sprite.Frame.Texture; entity2.Position = new SlimDX.Vector3(pos.x, pos.y, CalcZ(layer)); entity2.Factor = sprite.Resolution; device.AddEntity(entity2); }
public void RenderSprite(Graphics.Sprite sprite, Vector2 pos, float alpha) { Graphics.SpriteEntity entity = new Graphics.SpriteEntity(); entity.Rectangle = new Rectangle(0, 0, sprite.OriginalSize.x, sprite.OriginalSize.y); entity.Color = new SlimDX.Color4(alpha, 1, 1, 1); entity.Factor = sprite.Resolution; long now = System.Diagnostics.Stopwatch.GetTimestamp(); if (now - sprite.Frame.TimeStamp < (long)(Stopwatch.Frequency / popInSpeed) && popInSpeed != 0) { entity.Color.Alpha *= (now - sprite.Frame.TimeStamp) / (float)Stopwatch.Frequency * popInSpeed; } if (sprite.Animation != null && sprite.Animation.Progressive && sprite.Frames != null) { entity.Texture = sprite.Frames[0].Texture; entity.Position = new SlimDX.Vector3(pos.x, pos.y, CalcZ(layer) + 0.001f); device.AddEntity(entity); } Graphics.SpriteEntity entity2 = new Burntime.Platform.Graphics.SpriteEntity(); entity2.Rectangle = entity.Rectangle; entity2.Color = entity.Color; entity2.Texture = sprite.Frame.Texture; entity2.Position = new SlimDX.Vector3(pos.x, pos.y, CalcZ(layer)); entity2.Factor = sprite.Resolution; device.AddEntity(entity2); }
public void RenderRect(Vector2 pos, Vector2 size, int color) { Graphics.SpriteEntity entity = new Graphics.SpriteEntity(); entity.Rectangle = new Rectangle(0, 0, size.x, size.y); entity.Color = new SlimDX.Color4(color); entity.Texture = device.emptyTexture; entity.Position = new SlimDX.Vector3(pos.x, pos.y, CalcZ(layer)); device.AddEntity(entity); }
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); }