using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Blacklight.Core; using Blacklight.Core.Drawables; using Azimuth; using System.Reflection; using System.Security.AccessControl; namespace Glass.Blacklight { /// /// Responsible for loading graphics resources needed for materials in the registry (bound to a specific device) /// and knowing how to use them to actually render to a Cel. /// public class BlacklightRenderer : Renderer { public void BindToWindow(WindowHandle window) { RegisterAllSpriteSheets(window); } public void RegisterAllSpriteSheets(WindowHandle window) { foreach (var type in AppDomain.CurrentDomain.GetAssemblies() .Where(assembly => !RenderCallbackRegistry.IsSystemAssembly(assembly)) .SelectMany(assembly => assembly.DefinedTypes)) { SpriteSheetAttribute spriteSheetAttribute = type.GetCustomAttribute(); if (spriteSheetAttribute == null) { continue; } spriteRenderers[spriteSheetAttribute] = SpriteSheetRenderer.SpriteSheetBuilder( type, window, spriteSheetAttribute); } } public override void Render(Cel context, SpriteMaterial material, Rect rect, AffineMatrix transform) { var spriteRenderer = spriteRenderers[material.SpriteSheet]; spriteRenderer.Render(context, material, rect, transform); } private Dictionary spriteRenderers = new Dictionary(); } }