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();
}
}