public SceneRenderer(GameSettingsAsset gameSettings) { if (gameSettings == null) { throw new ArgumentNullException(nameof(gameSettings)); } // Initialize services Services = new ServiceRegistry(); ContentManager = new ContentManager(Services); Services.AddService(typeof(IContentManager), ContentManager); Services.AddService(typeof(ContentManager), ContentManager); var renderingSettings = gameSettings.GetOrCreate <RenderingSettings>(); GraphicsDevice = GraphicsDevice.New(DeviceCreationFlags.Debug, new[] { renderingSettings.DefaultGraphicsProfile }); var graphicsDeviceService = new GraphicsDeviceServiceLocal(Services, GraphicsDevice); Services.AddService(typeof(IGraphicsDeviceService), graphicsDeviceService); EffectSystem = new EffectSystem(Services); Services.AddService(typeof(EffectSystem), EffectSystem); GraphicsContext = new GraphicsContext(GraphicsDevice); Services.AddService(typeof(GraphicsContext), GraphicsContext); SceneSystem = new SceneSystem(Services); Services.AddService(typeof(SceneSystem), SceneSystem); // Create game systems GameSystems = new GameSystemCollection(Services); Services.AddService(typeof(IGameSystemCollection), GameSystems); var gameFontSystem = new GameFontSystem(Services); Services.AddService(typeof(FontSystem), gameFontSystem.FontSystem); Services.AddService(typeof(IFontFactory), gameFontSystem.FontSystem); GameSystems.Add(gameFontSystem); var uiSystem = new UISystem(Services); Services.AddService(typeof(UISystem), uiSystem); GameSystems.Add(uiSystem); GameSystems.Add(EffectSystem); GameSystems.Add(SceneSystem); GameSystems.Initialize(); // Fake presenter // TODO GRAPHICS REFACTOR: This is needed be for render stage setup GraphicsDevice.Presenter = new RenderTargetGraphicsPresenter(GraphicsDevice, Texture.New2D(GraphicsDevice, renderingSettings.DefaultBackBufferWidth, renderingSettings.DefaultBackBufferHeight, renderingSettings.ColorSpace == ColorSpace.Linear ? PixelFormat.R8G8B8A8_UNorm_SRgb : PixelFormat.R8G8B8A8_UNorm, TextureFlags.ShaderResource | TextureFlags.RenderTarget), PixelFormat.D24_UNorm_S8_UInt); GraphicsContext.CommandList.SetRenderTarget(GraphicsDevice.Presenter.DepthStencilBuffer, GraphicsDevice.Presenter.BackBuffer); }
public static bool Upgrade(PackageSession session, ILogger log, Package dependentPackage, PackageDependency dependency, Package dependencyPackage, IList <PackageLoadingAssetFile> assetFiles) { var packageSharedProfile = dependentPackage.Profiles.FindSharedProfile(); // Only do something if there is a default scene defined if (packageSharedProfile != null && packageSharedProfile.Properties.ContainsKey(DefaultScene)) { var defaultScene = Get(packageSharedProfile.Properties, DefaultScene); var defaultGraphicsProfile = Get(packageSharedProfile.Properties, DefaultGraphicsProfile); // If available, use graphics profile from Windows platform foreach (var profile in dependentPackage.Profiles) { if (profile.Platform == PlatformType.Windows && profile.Properties.ContainsKey(DefaultGraphicsProfile)) { defaultGraphicsProfile = Get(profile.Properties, DefaultGraphicsProfile); } } // Create asset var gameSettingsAsset = new GameSettingsAsset { DefaultScene = AttachedReferenceManager.CreateSerializableVersion <Scene>(defaultScene.Id, defaultScene.Location) }; var renderingSettings = gameSettingsAsset.Get <RenderingSettings>(); renderingSettings.DisplayOrientation = (RequiredDisplayOrientation)Get(packageSharedProfile.Properties, DisplayOrientation); renderingSettings.ColorSpace = ColorSpace.Linear; renderingSettings.DefaultBackBufferWidth = Get(packageSharedProfile.Properties, BackBufferWidth); renderingSettings.DefaultBackBufferHeight = Get(packageSharedProfile.Properties, BackBufferHeight); renderingSettings.DefaultGraphicsProfile = defaultGraphicsProfile; // Add asset using (var memoryStream = new MemoryStream()) { AssetSerializer.Save(memoryStream, gameSettingsAsset, log); assetFiles.Add(new PackageLoadingAssetFile(dependentPackage, GameSettingsLocation + FileExtension, null) { AssetContent = memoryStream.ToArray() }); } // Clean properties foreach (var profile in dependentPackage.Profiles) { profile.Properties.Remove(DefaultScene.Name); profile.Properties.Remove(BackBufferWidth.Name); profile.Properties.Remove(BackBufferHeight.Name); profile.Properties.Remove(DefaultGraphicsProfile.Name); profile.Properties.Remove(DisplayOrientation.Name); } } return(true); }
public static GameSettingsAsset New() { var asset = new GameSettingsAsset(); //add default filters , todo maybe a config file somewhere is better asset.PlatformFilters.Add("PowerVR SGX 54[0-9]"); asset.PlatformFilters.Add("Adreno \\(TM\\) 2[0-9][0-9]"); asset.PlatformFilters.Add("Adreno (TM) 320"); asset.PlatformFilters.Add("Adreno (TM) 330"); asset.PlatformFilters.Add("Adreno \\(TM\\) 4[0-9][0-9]"); asset.PlatformFilters.Add("NVIDIA Tegra"); asset.PlatformFilters.Add("Intel(R) HD Graphics"); asset.PlatformFilters.Add("^Mali\\-4"); asset.PlatformFilters.Add("^Mali\\-T6"); asset.PlatformFilters.Add("^Mali\\-T7"); return(asset); }
public static void SetGameSettingsAsset(this AssetCompilerContext context, GameSettingsAsset gameSettingsAsset) { context.Properties.Set(GameSettingsAssetKey, gameSettingsAsset); }