public static void InvokeAutoRegister()
        {
            var factoryTypes = typeof(AutoResisterRendererResourceFactories).GetNestedTypes(BindingFlags.Public);

            foreach (var factoryType in factoryTypes)
            {
#if !UNITY_EDITOR && (ENABLE_DOTNET || (UNITY_WINRT && !ENABLE_IL2CPP))
                if (!factoryType.GetTypeInfo().IsSubclassOf(typeof(RendererResourceFactory)))
                {
#else
                if (!factoryType.IsSubclassOf(typeof(RendererResourceFactory)))
                {
#endif
                    UnityEngine.Debug.LogError("[CRIWARE] internal logic error. " + factoryType.Name + " is required to be a subclass of RendererResourceFactory.");
                    continue;
                }
#if !UNITY_EDITOR && (ENABLE_DOTNET || (UNITY_WINRT && !ENABLE_IL2CPP))
                var priorityAttribute = (RendererResourceFactoryPriorityAttribute)CustomAttributeExtensions.GetCustomAttribute(
                    factoryType.GetTypeInfo(),
                    typeof(RendererResourceFactoryPriorityAttribute)
                    );
#else
                var priorityAttribute = (RendererResourceFactoryPriorityAttribute)System.Attribute.GetCustomAttribute(
                    factoryType,
                    typeof(RendererResourceFactoryPriorityAttribute)
                    );
#endif
                if (priorityAttribute == null)
                {
                    UnityEngine.Debug.LogError("[CRIWARE] internal logic error. need priority attribute. (" + factoryType.Name + ")");
                    continue;
                }
                RendererResourceFactory.RegisterFactory(
                    (RendererResourceFactory)System.Activator.CreateInstance(factoryType),
                    priorityAttribute.priority
                    );
            }
        }
    }
 static public void RegisterFactory(RendererResourceFactory factory, int priority)
 {
     factoryList.Add(priority, factory);
 }