/// <summary> /// Detect and return the correct platform instance for the engine host. /// </summary> /// <param name="engineConfig"></param> /// <returns></returns> public static PlatformBase CreateDetectedPlatform(Configurator engineConfig) { // ReSharper disable once RedundantAssignment PlatformBase platform = null; if (engineConfig?.PlatformOverride != null) { platform = engineConfig.PlatformOverride; Engine.Log.Info($"Platform override of \"{platform}\" accepted", MessageSource.Engine); } #if GLFW platform ??= new GlfwPlatform(); #endif if (platform == null && RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) platform = new Win32Platform(); // If none initialized - fallback to null. platform ??= new NullPlatform(); Engine.Log.Info($"Platform created: {platform}", MessageSource.Engine); // Set platform as default native library resolver. NativeLibrary.SetDllImportResolver(typeof(PlatformBase).Assembly, (libName, _, _) => platform.LoadLibrary(libName)); // Initialize platform. platform.Setup(engineConfig); Engine.Log.Trace("Platform loaded.", MessageSource.Engine); return platform; }
/// <summary> /// Setup a native platform. /// </summary> /// <param name="engineConfig">The engine configuration.</param> /// <returns>The native platform.</returns> public static PlatformBase GetInstanceOfDetected(Configurator engineConfig) { PlatformBase platform = null; // Detect platform. if (engineConfig.PlatformOverride != null) { platform = engineConfig.PlatformOverride; } if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { // Win32 platform = new Win32Platform(); } else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) { // Cocoa } else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) { // Check for Wayland. if (Environment.GetEnvironmentVariable("WAYLAND_DISPLAY") != null) { } } // If none initialized - fallback to none. if (platform == null) { platform = new NullPlatform(); } Engine.Log.Info($"Platform is: {platform}", MessageSource.Platform); platform.Setup(engineConfig); return(platform); }