public Window(WndFile wndFile, Game game, WndCallbackResolver wndCallbackResolver) : this(wndFile.RootWindow.ScreenRect.CreationResolution, CreateRootControl(wndFile, game.ContentManager, game.AssetStore, wndCallbackResolver), game.ContentManager) { Game = game; Bounds = wndFile.RootWindow.ScreenRect.ToRectangle(); LayoutInit = wndCallbackResolver.GetWindowCallback(wndFile.LayoutBlock.LayoutInit); LayoutUpdate = wndCallbackResolver.GetWindowCallback(wndFile.LayoutBlock.LayoutUpdate); LayoutShutdown = wndCallbackResolver.GetWindowCallback(wndFile.LayoutBlock.LayoutShutdown); }
private static Control CreateRootControl( WndFile wndFile, ContentManager contentManager, AssetStore assetStore, WndCallbackResolver wndCallbackResolver) { return(CreateRecursive( wndFile.RootWindow, contentManager, assetStore, wndCallbackResolver, wndFile.RootWindow.ScreenRect.UpperLeft)); }
public Window(WndFile wndFile, Game game, WndCallbackResolver wndCallbackResolver) : this(wndFile.RootWindow.ScreenRect.CreationResolution, game.GraphicsLoadContext) { Game = game; Bounds = wndFile.RootWindow.ScreenRect.ToRectangle(); LayoutInit = wndCallbackResolver.GetWindowCallback(wndFile.LayoutBlock.LayoutInit); LayoutUpdate = wndCallbackResolver.GetWindowCallback(wndFile.LayoutBlock.LayoutUpdate); LayoutShutdown = wndCallbackResolver.GetWindowCallback(wndFile.LayoutBlock.LayoutShutdown); Root = CreateRecursive( wndFile.RootWindow, ImageLoader, game.ContentManager, game.AssetStore, wndCallbackResolver, wndFile.RootWindow.ScreenRect.UpperLeft); Controls.Add(Root); }
public WindowLoader(ContentManager contentManager, WndCallbackResolver wndCallbackResolver) { _wndCallbackResolver = wndCallbackResolver; switch (contentManager.SageGame) { case SageGame.CncGenerals: case SageGame.CncGeneralsZeroHour: contentManager.IniDataContext.LoadIniFile(@"Data\English\HeaderTemplate.ini"); break; case SageGame.BattleForMiddleEarth: contentManager.IniDataContext.LoadIniFile(@"lang\english\headertemplate.ini"); break; case SageGame.BattleForMiddleEarthII: contentManager.IniDataContext.LoadIniFile(@"headertemplate.ini"); break; } contentManager.IniDataContext.LoadIniFiles(@"Data\INI\MappedImages\HandCreated\"); contentManager.IniDataContext.LoadIniFiles(@"Data\INI\MappedImages\TextureSize_512\"); }
public WindowLoader(ContentManager contentManager, WndCallbackResolver wndCallbackResolver, string language) { _wndCallbackResolver = wndCallbackResolver; switch (contentManager.SageGame) { case SageGame.CncGenerals: case SageGame.CncGeneralsZeroHour: contentManager.IniDataContext.LoadIniFile($@"Data\{language}\HeaderTemplate.ini"); break; case SageGame.Bfme: contentManager.IniDataContext.LoadIniFile($@"lang\{language}\headertemplate.ini"); break; case SageGame.Bfme2: case SageGame.Bfme2Rotwk: contentManager.IniDataContext.LoadIniFile(@"headertemplate.ini"); break; } contentManager.IniDataContext.LoadIniFiles(@"Data\INI\MappedImages\HandCreated\"); contentManager.IniDataContext.LoadIniFiles(@"Data\INI\MappedImages\TextureSize_512\"); }
public ContentManager( Game game, FileSystem fileSystem, GraphicsDevice graphicsDevice, SageGame sageGame, WndCallbackResolver wndCallbackResolver) { using (GameTrace.TraceDurationEvent("ContentManager()")) { _game = game; _fileSystem = fileSystem; GraphicsDevice = graphicsDevice; SageGame = sageGame; Language = LanguageUtility.ReadCurrentLanguage(game.Definition, fileSystem.RootDirectory); IniDataContext = new IniDataContext(fileSystem, sageGame); DataContext = new DataContext(); SubsystemLoader = Content.SubsystemLoader.Create(game.Definition, _fileSystem, IniDataContext); switch (sageGame) { // Only load these INI files for a subset of games, because we can't parse them for others yet. case SageGame.CncGenerals: case SageGame.CncGeneralsZeroHour: case SageGame.Bfme: case SageGame.Bfme2: case SageGame.Bfme2Rotwk: SubsystemLoader.Load(Subsystem.Core); // TODO: Move this somewhere else. // Subsystem.Core should load mouse and water config, but that isn't the case with at least BFME2. IniDataContext.LoadIniFile(@"Data\INI\Mouse.ini"); IniDataContext.LoadIniFile(@"Data\INI\Water.ini"); IniDataContext.LoadIniFile(@"Data\INI\AudioSettings.ini"); break; default: break; } // TODO: Defer subsystem loading until necessary switch (sageGame) { // Only load these INI files for a subset of games, because we can't parse them for others yet. case SageGame.CncGenerals: case SageGame.CncGeneralsZeroHour: case SageGame.Bfme: case SageGame.Bfme2: case SageGame.Bfme2Rotwk: SubsystemLoader.Load(Subsystem.Players); SubsystemLoader.Load(Subsystem.ParticleSystems); SubsystemLoader.Load(Subsystem.ObjectCreation); SubsystemLoader.Load(Subsystem.Multiplayer); SubsystemLoader.Load(Subsystem.LinearCampaign); break; default: break; } _contentLoaders = new Dictionary <Type, ContentLoader> { { typeof(Model), AddDisposable(new ModelLoader()) }, { typeof(Scene3D), AddDisposable(new MapLoader()) }, { typeof(Texture), AddDisposable(new TextureLoader(graphicsDevice)) }, { typeof(Window), AddDisposable(new WindowLoader(this, wndCallbackResolver, Language)) }, { typeof(AptWindow), AddDisposable(new AptLoader()) }, }; _cachedObjects = new Dictionary <string, object>(); TranslationManager = Translation.TranslationManager.Instance; Translation.TranslationManager.LoadGameStrings(fileSystem, Language, sageGame); _cachedFonts = new Dictionary <FontKey, Font>(); var linearClampSamplerDescription = SamplerDescription.Linear; linearClampSamplerDescription.AddressModeU = SamplerAddressMode.Clamp; linearClampSamplerDescription.AddressModeV = SamplerAddressMode.Clamp; linearClampSamplerDescription.AddressModeW = SamplerAddressMode.Clamp; LinearClampSampler = AddDisposable( graphicsDevice.ResourceFactory.CreateSampler(ref linearClampSamplerDescription)); var pointClampSamplerDescription = SamplerDescription.Point; pointClampSamplerDescription.AddressModeU = SamplerAddressMode.Clamp; pointClampSamplerDescription.AddressModeV = SamplerAddressMode.Clamp; pointClampSamplerDescription.AddressModeW = SamplerAddressMode.Clamp; PointClampSampler = AddDisposable( graphicsDevice.ResourceFactory.CreateSampler(ref pointClampSamplerDescription)); NullTexture = AddDisposable(graphicsDevice.ResourceFactory.CreateTexture(TextureDescription.Texture2D(1, 1, 1, 1, PixelFormat.R8_G8_B8_A8_UNorm, TextureUsage.Sampled))); _cachedNullStructuredBuffers = new Dictionary <uint, DeviceBuffer>(); SolidWhiteTexture = AddDisposable(graphicsDevice.CreateStaticTexture2D( 1, 1, 1, new TextureMipMapData( new byte[] { 255, 255, 255, 255 }, 4, 4, 1, 1), PixelFormat.R8_G8_B8_A8_UNorm)); ShaderResources = AddDisposable(new ShaderResourceManager(graphicsDevice, SolidWhiteTexture)); WndImageLoader = AddDisposable(new WndImageLoader(this, new MappedImageLoader(this))); _fallbackFonts = new FontCollection(); var assembly = Assembly.GetExecutingAssembly(); var fontStream = assembly.GetManifestResourceStream($"OpenSage.Content.Fonts.{_fallbackEmbeddedFont}-Regular.ttf"); _fallbackFonts.Install(fontStream); fontStream = assembly.GetManifestResourceStream($"OpenSage.Content.Fonts.{_fallbackEmbeddedFont}-Bold.ttf"); _fallbackFonts.Install(fontStream); } }
private static Control CreateElementRecursive(WndWindowDefinition wndWindow, ContentManager contentManager, WndCallbackResolver wndCallbackResolver, Point2D parentOffset) { var imageLoader = contentManager.WndImageLoader; Control createControl() { switch (wndWindow.WindowType) { case WndWindowType.CheckBox: return(new CheckBox { UncheckedImage = imageLoader.CreateNormalImage(wndWindow.EnabledDrawData, 1), CheckedImage = imageLoader.CreateNormalImage(wndWindow.EnabledDrawData, 2), HoverUncheckedImage = imageLoader.CreateNormalImage(wndWindow.HiliteDrawData, 1), HoverCheckedImage = imageLoader.CreateNormalImage(wndWindow.HiliteDrawData, 2), DisabledUncheckedImage = imageLoader.CreateNormalImage(wndWindow.DisabledDrawData, 1), DisabledCheckedImage = imageLoader.CreateNormalImage(wndWindow.DisabledDrawData, 2) }); case WndWindowType.ComboBox: return(new ComboBox { IsEditable = wndWindow.ComboBoxData.IsEditable, TextBoxBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.ComboBoxEditBoxEnabledDrawData, 0, 2, 1), TextBoxHoverBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.ComboBoxEditBoxHiliteDrawData, 0, 2, 1), TextBoxDisabledBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.ComboBoxEditBoxDisabledDrawData, 0, 2, 1), DropDownButtonImage = imageLoader.CreateNormalImage(wndWindow.ComboBoxDropDownButtonEnabledDrawData, 0), DropDownUpButtonImage = imageLoader.CreateNormalImage(wndWindow.ListBoxEnabledUpButtonDrawData, 0), DropDownUpButtonHoverImage = imageLoader.CreateNormalImage(wndWindow.ListBoxHiliteUpButtonDrawData, 0), DropDownDownButtonImage = imageLoader.CreateNormalImage(wndWindow.ListBoxEnabledDownButtonDrawData, 0), DropDownDownButtonHoverImage = imageLoader.CreateNormalImage(wndWindow.ListBoxHiliteDownButtonDrawData, 0), DropDownThumbImage = imageLoader.CreateNormalImage(wndWindow.SliderThumbEnabledDrawData, 0), DropDownThumbHoverImage = imageLoader.CreateNormalImage(wndWindow.SliderThumbHiliteDrawData, 0), DropDownSelectedItemBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.HiliteDrawData, 1, 3, 2) }); case WndWindowType.HorizontalSlider: return(new Slider { HighlightedBoxImage = imageLoader.CreateNormalImage(wndWindow.DisabledDrawData, 0), UnhighlightedBoxImage = imageLoader.CreateNormalImage(wndWindow.DisabledDrawData, 1), MinimumValue = wndWindow.SliderData.MinValue, MaximumValue = wndWindow.SliderData.MaxValue, Value = wndWindow.SliderData.MinValue + (wndWindow.SliderData.MaxValue - wndWindow.SliderData.MinValue) / 2 }); case WndWindowType.ListBox: var listBox = new ListBox { BorderColor = wndWindow.EnabledDrawData.Items[0].BorderColor.ToColorRgbaF(), BorderWidth = 1, SelectedItemBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.EnabledDrawData, 1, 3, 2), SelectedItemHoverBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.HiliteDrawData, 1, 3, 2), ColumnWidths = wndWindow.ListBoxData.ColumnWidths, IsScrollBarVisible = wndWindow.ListBoxData.ScrollBar }; if (wndWindow.ListBoxData.ScrollBar) { listBox.UpButtonImage = imageLoader.CreateNormalImage(wndWindow.ListBoxEnabledUpButtonDrawData, 0); listBox.UpButtonHoverImage = imageLoader.CreateNormalImage(wndWindow.ListBoxHiliteUpButtonDrawData, 0); listBox.DownButtonImage = imageLoader.CreateNormalImage(wndWindow.ListBoxEnabledDownButtonDrawData, 0); listBox.DownButtonHoverImage = imageLoader.CreateNormalImage(wndWindow.ListBoxHiliteDownButtonDrawData, 0); listBox.ThumbImage = imageLoader.CreateNormalImage(wndWindow.SliderThumbEnabledDrawData, 0); listBox.ThumbHoverImage = imageLoader.CreateNormalImage(wndWindow.SliderThumbHiliteDrawData, 0); } ; if (wndWindow.ListBoxData.ForceSelect) { listBox.SelectedIndex = 0; } return(listBox); case WndWindowType.PushButton: return(new Button { BackgroundImage = imageLoader.CreateStretchableImage(wndWindow.EnabledDrawData, 0, 5, 6), HoverBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.HiliteDrawData, 0, 5, 6), DisabledBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.DisabledDrawData, 0, 5, 6), PushedBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.HiliteDrawData, 1, 3, 4), HoverTextColor = wndWindow.TextColor.Hilite.ToColorRgbaF(), DisabledTextColor = wndWindow.TextColor.Disabled.ToColorRgbaF() }); case WndWindowType.StaticText: return(new Label { TextAlignment = wndWindow.StaticTextData.Centered ? TextAlignment.Center : TextAlignment.Leading }); case WndWindowType.EntryField: return(new TextBox { BackgroundImage = imageLoader.CreateStretchableImage(wndWindow.EnabledDrawData, 0, 2, 1), HoverBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.HiliteDrawData, 0, 2, 1), DisabledBackgroundImage = imageLoader.CreateStretchableImage(wndWindow.DisabledDrawData, 0, 2, 1), HoverTextColor = wndWindow.TextColor.Hilite.ToColorRgbaF(), DisabledTextColor = wndWindow.TextColor.Disabled.ToColorRgbaF() }); default: // TODO: Implement other window types. { var control = new Control(); if (wndWindow.Status.HasFlag(WndWindowStatusFlags.Image)) { control.BackgroundImage = imageLoader.CreateNormalImage(wndWindow.EnabledDrawData, 0); } else { control.BackgroundColor = wndWindow.EnabledDrawData.Items[0].Color.ToColorRgbaF(); } if (control.BackgroundImage == null) { control.BorderColor = wndWindow.EnabledDrawData.Items[0].BorderColor.ToColorRgbaF(); control.BorderWidth = 1; } return(control); } } } var result = createControl(); result.Name = wndWindow.Name; var wndRectangle = wndWindow.ScreenRect.ToRectangle(); result.Bounds = new Rectangle( wndRectangle.X - parentOffset.X, wndRectangle.Y - parentOffset.Y, wndRectangle.Width, wndRectangle.Height); var systemCallback = wndCallbackResolver.GetControlCallback(wndWindow.SystemCallback); if (systemCallback != null) { result.SystemCallback = systemCallback; } var inputCallback = wndCallbackResolver.GetControlCallback(wndWindow.InputCallback); if (inputCallback != null) { result.InputCallback = inputCallback; } var drawCallback = wndCallbackResolver.GetControlDrawCallback(wndWindow.DrawCallback); if (drawCallback != null) { result.DrawCallback = drawCallback; } // TODO: TooltipCallback result.Visible = !wndWindow.Status.HasFlag(WndWindowStatusFlags.Hidden); if (wndWindow.Status.HasFlag(WndWindowStatusFlags.SeeThru)) { result.BackgroundColor = ColorRgbaF.Transparent; result.BorderColor = ColorRgbaF.Transparent; } if (wndWindow.HasHeaderTemplate) { var headerTemplate = contentManager.IniDataContext.HeaderTemplates.First(x => x.Name == wndWindow.HeaderTemplate); result.Font = contentManager.GetOrCreateFont(headerTemplate.Font, headerTemplate.Point, headerTemplate.Bold ? FontWeight.Bold : FontWeight.Normal); } else { result.Font = contentManager.GetOrCreateFont(wndWindow.Font.Name, wndWindow.Font.Size, wndWindow.Font.Bold ? FontWeight.Bold : FontWeight.Normal); } result.TextColor = wndWindow.TextColor.Enabled.ToColorRgbaF(); result.Text = contentManager.TranslationManager.Lookup(wndWindow.Text); // TODO: TextBorderColor foreach (var childWindow in wndWindow.ChildWindows) { var child = CreateElementRecursive(childWindow, contentManager, wndCallbackResolver, wndRectangle.Location); result.Controls.Add(child); } return(result); }
public ContentManager( Game game, FileSystem fileSystem, GraphicsDevice graphicsDevice, SageGame sageGame, WndCallbackResolver wndCallbackResolver) { _game = game; _fileSystem = fileSystem; GraphicsDevice = graphicsDevice; SageGame = sageGame; IniDataContext = new IniDataContext(fileSystem); IniDataContext.LoadIniFiles(@"Data\INI\Default\Object.ini"); IniDataContext.LoadIniFiles(@"Data\INI\Object"); _contentLoaders = new Dictionary <Type, ContentLoader> { { typeof(Model), AddDisposable(new ModelLoader()) }, { typeof(Scene3D), AddDisposable(new MapLoader()) }, { typeof(Texture), AddDisposable(new TextureLoader(graphicsDevice)) }, { typeof(Window), AddDisposable(new WindowLoader(this, wndCallbackResolver)) }, { typeof(AptWindow), AddDisposable(new AptLoader()) }, { typeof(WavFile), AddDisposable(new WavLoader()) }, }; _cachedObjects = new Dictionary <string, object>(); EffectLibrary = AddDisposable(new EffectLibrary(graphicsDevice)); TranslationManager = new TranslationManager(fileSystem, sageGame); _cachedFonts = new Dictionary <FontKey, Font>(); var linearClampSamplerDescription = SamplerDescription.Linear; linearClampSamplerDescription.AddressModeU = SamplerAddressMode.Clamp; linearClampSamplerDescription.AddressModeV = SamplerAddressMode.Clamp; linearClampSamplerDescription.AddressModeW = SamplerAddressMode.Clamp; LinearClampSampler = AddDisposable( graphicsDevice.ResourceFactory.CreateSampler(ref linearClampSamplerDescription)); var pointClampSamplerDescription = SamplerDescription.Point; pointClampSamplerDescription.AddressModeU = SamplerAddressMode.Clamp; pointClampSamplerDescription.AddressModeV = SamplerAddressMode.Clamp; pointClampSamplerDescription.AddressModeW = SamplerAddressMode.Clamp; PointClampSampler = AddDisposable( graphicsDevice.ResourceFactory.CreateSampler(ref pointClampSamplerDescription)); NullTexture = AddDisposable(graphicsDevice.ResourceFactory.CreateTexture(TextureDescription.Texture2D(1, 1, 1, 1, PixelFormat.R8_G8_B8_A8_UNorm, TextureUsage.Sampled))); _cachedNullStructuredBuffers = new Dictionary <uint, DeviceBuffer>(); SolidWhiteTexture = AddDisposable(graphicsDevice.CreateStaticTexture2D( 1, 1, new TextureMipMapData( new byte[] { 255, 255, 255, 255 }, 4, 4, 1, 1), PixelFormat.R8_G8_B8_A8_UNorm)); WndImageLoader = AddDisposable(new WndImageLoader(this, new MappedImageLoader(this))); }
internal static Control CreateRecursive( WndWindowDefinition wndWindow, ImageLoader imageLoader, ContentManager contentManager, AssetStore assetStore, WndCallbackResolver wndCallbackResolver, Point2D parentOffset) { var result = CreateControl(wndWindow, imageLoader); result.Name = wndWindow.Name; var wndRectangle = wndWindow.ScreenRect.ToRectangle(); result.Bounds = new Rectangle( wndRectangle.X - parentOffset.X, wndRectangle.Y - parentOffset.Y, wndRectangle.Width, wndRectangle.Height); var systemCallback = wndCallbackResolver.GetControlCallback(wndWindow.SystemCallback); if (systemCallback != null) { result.SystemCallback = systemCallback; } var inputCallback = wndCallbackResolver.GetControlCallback(wndWindow.InputCallback); if (inputCallback != null) { result.InputCallback = inputCallback; } var drawCallback = wndCallbackResolver.GetControlDrawCallback(wndWindow.DrawCallback); if (drawCallback != null) { result.DrawCallback = drawCallback; } // TODO: TooltipCallback result.Visible = !wndWindow.Status.HasFlag(WndWindowStatusFlags.Hidden); if (wndWindow.Status.HasFlag(WndWindowStatusFlags.SeeThru)) { result.BackgroundColor = ColorRgbaF.Transparent; result.BorderColor = ColorRgbaF.Transparent; } if (wndWindow.HasHeaderTemplate) { var headerTemplate = assetStore.HeaderTemplates.GetByName(wndWindow.HeaderTemplate); result.Font = contentManager.FontManager.GetOrCreateFont(headerTemplate.Font.Name, headerTemplate.Font.Size, headerTemplate.Font.Bold ? FontWeight.Bold : FontWeight.Normal); } else { result.Font = contentManager.FontManager.GetOrCreateFont(wndWindow.Font.Name, wndWindow.Font.Size, wndWindow.Font.Bold ? FontWeight.Bold : FontWeight.Normal); } result.TextColor = wndWindow.TextColor.Enabled.ToColorRgbaF(); result.Text = wndWindow.Text.Translate(); // TODO: TextBorderColor foreach (var childWindow in wndWindow.ChildWindows) { var child = CreateRecursive(childWindow, imageLoader, contentManager, assetStore, wndCallbackResolver, wndRectangle.Location); result.Controls.Add(child); } return(result); }
public ContentManager( Game game, FileSystem fileSystem, GraphicsDevice graphicsDevice, SageGame sageGame, WndCallbackResolver wndCallbackResolver) { _game = game; _fileSystem = fileSystem; GraphicsDevice = graphicsDevice; SageGame = sageGame; string language = LanguageUtility.ReadCurrentLanguage(game.Definition, fileSystem.RootDirectory); IniDataContext = new IniDataContext(fileSystem); IniDataContext.LoadIniFiles(@"Data\INI\Default\Object.ini"); IniDataContext.LoadIniFiles(@"Data\INI\Object"); IniDataContext.LoadIniFiles(@"Data\INI\multiplayer.ini"); IniDataContext.LoadIniFile(@"Data\INI\PlayerTemplate.ini"); IniDataContext.LoadIniFile(@"maps\MapCache.ini"); _contentLoaders = new Dictionary <Type, ContentLoader> { { typeof(Model), AddDisposable(new ModelLoader()) }, { typeof(Scene3D), AddDisposable(new MapLoader()) }, { typeof(Texture), AddDisposable(new TextureLoader(graphicsDevice)) }, { typeof(Window), AddDisposable(new WindowLoader(this, wndCallbackResolver, language)) }, { typeof(AptWindow), AddDisposable(new AptLoader()) }, { typeof(WavFile), AddDisposable(new WavLoader()) }, }; _cachedObjects = new Dictionary <string, object>(); EffectLibrary = AddDisposable(new EffectLibrary(graphicsDevice)); TranslationManager = new TranslationManager(fileSystem, sageGame, language); _cachedFonts = new Dictionary <FontKey, Font>(); var linearClampSamplerDescription = SamplerDescription.Linear; linearClampSamplerDescription.AddressModeU = SamplerAddressMode.Clamp; linearClampSamplerDescription.AddressModeV = SamplerAddressMode.Clamp; linearClampSamplerDescription.AddressModeW = SamplerAddressMode.Clamp; LinearClampSampler = AddDisposable( graphicsDevice.ResourceFactory.CreateSampler(ref linearClampSamplerDescription)); var pointClampSamplerDescription = SamplerDescription.Point; pointClampSamplerDescription.AddressModeU = SamplerAddressMode.Clamp; pointClampSamplerDescription.AddressModeV = SamplerAddressMode.Clamp; pointClampSamplerDescription.AddressModeW = SamplerAddressMode.Clamp; PointClampSampler = AddDisposable( graphicsDevice.ResourceFactory.CreateSampler(ref pointClampSamplerDescription)); NullTexture = AddDisposable(graphicsDevice.ResourceFactory.CreateTexture(TextureDescription.Texture2D(1, 1, 1, 1, PixelFormat.R8_G8_B8_A8_UNorm, TextureUsage.Sampled))); _cachedNullStructuredBuffers = new Dictionary <uint, DeviceBuffer>(); SolidWhiteTexture = AddDisposable(graphicsDevice.CreateStaticTexture2D( 1, 1, new TextureMipMapData( new byte[] { 255, 255, 255, 255 }, 4, 4, 1, 1), PixelFormat.R8_G8_B8_A8_UNorm)); WndImageLoader = AddDisposable(new WndImageLoader(this, new MappedImageLoader(this))); _fallbackFonts = new FontCollection(); var assembly = Assembly.GetExecutingAssembly(); var fontStream = assembly.GetManifestResourceStream($"OpenSage.Content.Fonts.{_fallbackEmbeddedFont}-Regular.ttf"); _fallbackFonts.Install(fontStream); fontStream = assembly.GetManifestResourceStream($"OpenSage.Content.Fonts.{_fallbackEmbeddedFont}-Bold.ttf"); _fallbackFonts.Install(fontStream); }
private static WndWindow CreateElementRecursive(WndWindowDefinition wndWindow, ContentManager contentManager, WndCallbackResolver wndCallbackResolver) { var result = WndWindow.Create(wndWindow, contentManager, wndCallbackResolver); foreach (var childWindow in wndWindow.ChildWindows) { var child = CreateElementRecursive(childWindow, contentManager, wndCallbackResolver); child.Parent = result; result.Children.Add(child); } return(result); }