/// <summary> /// Function called to initialize the application. /// </summary> private void Initialize() { GorgonExample.ResourceBaseDirectory = new DirectoryInfo(Settings.Default.ResourceLocation); // Resize and center the screen. var screen = Screen.FromHandle(Handle); ClientSize = Settings.Default.Resolution; Location = new Point(screen.Bounds.Left + (screen.WorkingArea.Width / 2) - (ClientSize.Width / 2), screen.Bounds.Top + (screen.WorkingArea.Height / 2) - (ClientSize.Height / 2)); // Initialize our graphics. IReadOnlyList <IGorgonVideoAdapterInfo> videoAdapters = GorgonGraphics.EnumerateAdapters(log: GorgonApplication.Log); if (videoAdapters.Count == 0) { throw new GorgonException(GorgonResult.CannotCreate, "Gorgon requires at least a Direct3D 11.4 capable video device.\nThere is no suitable device installed on the system."); } // Find the best video device. _graphics = new GorgonGraphics(videoAdapters.OrderByDescending(item => item.FeatureSet).First()); // Build our "screen". _screen = new GorgonSwapChain(_graphics, this, new GorgonSwapChainInfo { Width = ClientSize.Width, Height = ClientSize.Height, Format = BufferFormat.R8G8B8A8_UNorm }); if (!Settings.Default.IsWindowed) { // Go full screen by using borderless windowed mode. _screen.EnterFullScreen(); } // Build up our 2D renderer. _renderer = new Gorgon2D(_graphics); // Load in the logo texture from our resources. GorgonExample.LoadResources(_graphics); // Create fonts. _textFont = GorgonExample.Fonts.GetFont(new GorgonFontInfo("GiGi", 24.0f, FontHeightMode.Points, "GiGi_24pt") { AntiAliasingMode = FontAntiAliasMode.AntiAlias, TextureWidth = 512, TextureHeight = 256 }); // Use the form font for this one. _helpFont = GorgonExample.Fonts.GetFont(new GorgonFontInfo(Font.FontFamily.Name, Font.Size, Font.Unit == GraphicsUnit.Pixel ? FontHeightMode.Pixels : FontHeightMode.Points, "Form Font") { AntiAliasingMode = FontAntiAliasMode.AntiAlias, FontStyle = FontStyle.Bold }); // Create our file system and mount the resources. _fileSystem = new GorgonFileSystem(GorgonApplication.Log); _fileSystem.Mount(GorgonExample.GetResourcePath(@"FileSystems\FolderSystem").FullName); // In the previous versions of Gorgon, we used to load the image first, and then the sprites. // But in this version, we have an extension that will load the sprite textures for us. _sprites = new GorgonSprite[3]; // The sprites are in the v2 format. IEnumerable <IGorgonSpriteCodec> v2Codec = new[] { new GorgonV2SpriteCodec(_renderer) }; IEnumerable <IGorgonImageCodec> pngCodec = new[] { new GorgonCodecPng() }; _sprites[0] = _fileSystem.LoadSpriteFromFileSystem(_renderer, "/Sprites/base.gorSprite", spriteCodecs: v2Codec, imageCodecs: pngCodec); _sprites[1] = _fileSystem.LoadSpriteFromFileSystem(_renderer, "/Sprites/Mother.gorSprite", spriteCodecs: v2Codec, imageCodecs: pngCodec); _sprites[2] = _fileSystem.LoadSpriteFromFileSystem(_renderer, "/Sprites/Mother2c.gorSprite", spriteCodecs: v2Codec, imageCodecs: pngCodec); // This is how you would get the sprites in v2 of Gorgon: /*_spriteImage = _graphics.Textures.FromMemory<GorgonTexture2D>("0_HardVacuum", LoadFile("/Images/0_HardVacuum.png"), new GorgonCodecPNG()); * * // Get the sprites. * // The sprites in the file system are from version 1.0 of Gorgon. * // This version is backwards compatible and can load any version * // of the sprites produced by older versions of Gorgon. * _sprites = new GorgonSprite[3]; * _sprites[0] = _renderer.Renderables.FromMemory<GorgonSprite>("Base", LoadFile("/Sprites/base.gorSprite")); * _sprites[1] = _renderer.Renderables.FromMemory<GorgonSprite>("Mother", LoadFile("/Sprites/Mother.gorSprite")); * _sprites[2] = _renderer.Renderables.FromMemory<GorgonSprite>("Mother2c", LoadFile("/Sprites/Mother2c.gorSprite")); */ // Get poetry. _textPosition = new DX.Vector2(0, ClientSize.Height + _textFont.LineHeight); _poetry = new GorgonTextSprite(_textFont, Encoding.UTF8.GetString(LoadFile("/SomeText.txt"))) { Position = _textPosition, Color = Color.Black }; // Set up help text. _helpText = new GorgonTextSprite(_helpFont, "F1 - Show/hide this help text.\nS - Show frame statistics.\nESC - Exit.") { Color = Color.Blue, Position = new DX.Vector2(3, 3) }; // Unlike the old example, we'll blend to render targets, ping-ponging back and forth, for a much better quality image and smoother transition. _blurEffect = new Gorgon2DGaussBlurEffect(_renderer, 3) { BlurRenderTargetsSize = new DX.Size2((int)_sprites[2].Size.Width * 2, (int)_sprites[2].Size.Height * 2), PreserveAlpha = false }; _blurEffect.Precache(); _blurredTarget[0] = GorgonRenderTarget2DView.CreateRenderTarget(_graphics, new GorgonTexture2DInfo("Blurred RTV") { Width = _blurEffect.BlurRenderTargetsSize.Width, Height = _blurEffect.BlurRenderTargetsSize.Height, Binding = TextureBinding.ShaderResource, Format = BufferFormat.R8G8B8A8_UNorm, Usage = ResourceUsage.Default }); _blurredTarget[1] = GorgonRenderTarget2DView.CreateRenderTarget(_graphics, _blurredTarget[0]); _blurredImage[0] = _blurredTarget[0].GetShaderResourceView(); _blurredImage[1] = _blurredTarget[1].GetShaderResourceView(); GorgonApplication.IdleMethod = Idle; }