public override void Draw() { Framebuffer originalFramebuffer = Framebuffer.Current; Surface.Bind(); Graphics.Clear(Colour.Black); // Shadow Casters Vector2 caster = CKGLTest2D.Player.Position.Floor(); //Vector2 caster = Input.Mouse.Position.World.round(); //Vector2 caster = Vector2.Zero; // Falloff Shadow BlendState originalBlendState = BlendState.Current; BlendState.Subtractive.Set(); Renderer.Draw.Circle(caster, CKGLTest2D.Camera.Height * 2f, Colour.White, Colour.White.Alpha(0), 32); originalBlendState.Set(); //Renderer.SetBlendState(nsBlendState.Subtractive); foreach (Box box in Scene.Entities.FindAll <Box>()) { var block_l = box.X - box.Origin.X; var block_r = box.X - box.Origin.X + box.Size.X; var block_t = box.Y - box.Origin.Y; var block_b = box.Y - box.Origin.Y + box.Size.Y; if (caster.Y > block_t) { DrawShadow(new Vector2(block_l, block_t), new Vector2(block_r, block_t), caster, 700); } if (caster.Y < block_b) { DrawShadow(new Vector2(block_l, block_b), new Vector2(block_r, block_b), caster, 700); } if (caster.X > block_l) { DrawShadow(new Vector2(block_l, block_t), new Vector2(block_l, block_b), caster, 700); } if (caster.X < block_r) { DrawShadow(new Vector2(block_r, block_t), new Vector2(block_r, block_b), caster, 700); } } originalFramebuffer.Bind(); //Graphics.State.SetBlendState(BlendState.Additive); Renderer.Draw.Framebuffer(Surface, TextureAttachment.Colour0, CKGLTest2D.Camera.Position.X, CKGLTest2D.Camera.Position.Y, Colour.White); //Renderer.ResetBlendState(); }