protected override void RenderContent(RenderComposer composer) { // File selection. if (ImGui.Button("Choose Texture File")) { var explorer = new FileExplorer <TextureAsset>(f => { _fileName = Path.GetFileNameWithoutExtension(f.Name) + "Palette.xml"; var description = new PaletteDescription { BaseAsset = _fileName }; Reset(); _baseTexture = f; _description = description; }); Parent.AddWindow(explorer); } if (ImGui.Button("Choose Palette File")) { var explorer = new FileExplorer <PaletteAsset>(f => { _fileName = f.Name; Reset(); _baseTexture = f.BaseTexture; _description = f.Content; }); Parent.AddWindow(explorer); } if (_description == null) { return; } // Extract the palette map and the default palette. if (_defaultPalette == null) { _defaultPalette = new Palette { Name = "Default" }; var pixelData = new byte[(int)(_baseTexture.Texture.Size.X * _baseTexture.Texture.Size.Y * 4)]; PixelFormat pixelFormat = _baseTexture.Texture.PixelFormat; unsafe { fixed(void *p = &pixelData[0]) { Texture.EnsureBound(_baseTexture.Texture.Pointer); Gl.GetTexImage(TextureTarget.Texture2d, 0, pixelFormat, PixelType.UnsignedByte, new IntPtr(p)); } } _paletteMap = PaletteBaseTexture.GeneratePaletteMap(pixelData, pixelFormat, out List <Color> defaultCMap); _defaultPalette.Colors = defaultCMap.ToArray(); ref Palette[] pals = ref _description.Palettes; Array.Resize(ref pals, _description.Palettes.Length + 1); pals[^ 1] = _defaultPalette;
protected override void RenderContent(RenderComposer composer) { // File selection. if (ImGui.Button("Choose Texture File")) { var explorer = new FileExplorer <TextureAsset>(f => { _fileName = Path.GetFileNameWithoutExtension(f.Name) + "Palette.xml"; var description = new PaletteDescription { BaseAsset = _fileName }; Reset(); _baseTexture = f; _description = description; }); Parent.AddWindow(explorer); } if (ImGui.Button("Choose Palette File")) { var explorer = new FileExplorer <PaletteAsset>(f => { _fileName = f.Name; Reset(); _baseTexture = f.BaseTexture; _description = f.Content; }); Parent.AddWindow(explorer); } if (_description == null) { return; } // Extract the palette map and the default palette. if (_defaultPalette == null) { _defaultPalette = new Palette { Name = "Default" }; var pixelData = new byte[(int)(_baseTexture.Texture.Size.X * _baseTexture.Texture.Size.Y * 4)]; unsafe { fixed(void *p = &pixelData[0]) { Texture.EnsureBound(_baseTexture.Texture.Pointer); Gl.GetTexImage(TextureTarget.Texture2d, 0, PixelFormat.Bgra, PixelType.UnsignedByte, new IntPtr(p)); } } _paletteMap = ImageUtil.GeneratePaletteMap(pixelData, out List <Color> defaultCMap); _defaultPalette.Colors = defaultCMap.ToArray(); } if (ImGui.Button("Save")) { string xml = XMLFormat.To(_description); File.WriteAllText(Helpers.CrossPlatformPath($"Assets/{_fileName}"), xml); } ImGui.Text(_fileName); ImGui.Text("Palettes"); foreach (Palette p in _description.Palettes.Where(p => ImGui.Button(p.Name))) { _selectedPalette = p; _updatePreview = true; } ImGui.InputText("New", ref _newPaletteName, 20); ImGui.SameLine(); if (ImGui.Button("Create") && !string.IsNullOrEmpty(_newPaletteName)) { _selectedPalette = new Palette { Name = _newPaletteName, Colors = _description.GetPalette("Default").Colors.ToArray() }; _newPaletteName = ""; Palette[] pals = _description.Palettes; Array.Resize(ref pals, _description.Palettes.Length); pals[^ 1] = _selectedPalette;