public MainWindow() { InitializeComponent(); backgroundWorker.DoWork += backgroundWorker_DoWork; settingsDialog = new TextureSettingsWindow(); }
private void MenuImportTexture_Click(object sender, RoutedEventArgs e) { //workQueue.Enqueue((bw) => //{ // Configure open file dialog box Microsoft.Win32.OpenFileDialog openDlg = new Microsoft.Win32.OpenFileDialog(); openDlg.FileName = ""; // Default file name //openDlg.DefaultExt = "*.png,*.jpg,*.bmp"; // Default file extension openDlg.Filter = "All supported texture files |*.png;*.jpg;*.bmp"; // Filter files by extension // Show open file dialog box Nullable<bool> result = openDlg.ShowDialog(); // Process open file dialog box results if (result != true) return; var filename = openDlg.FileName; var bmp = new Bitmap(filename); //bw.ReportProgress(33); settingsDialog = new TextureSettingsWindow(); settingsDialog.TextureWidth = bmp.Width; settingsDialog.TextureHeight = bmp.Height; settingsDialog.ShowDialog(); if (!settingsDialog.OKClicked) return; var mipmapped = settingsDialog.Mipmapped; var preMipmapped = mipmapped && settingsDialog.MipmapsSaved; var compressed = settingsDialog.Compressed; var compressedSaved = compressed && settingsDialog.CompressionSaved; var format = (PixelInternalFormat)settingsDialog.PixelInternalFormat; var filtering = settingsDialog.TextureFiltering; var pixelFormat = OpenTK.Graphics.OpenGL.PixelFormat.Rgba; var anisolevel = settingsDialog.AnisoLevel; switch (format) { case PixelInternalFormat.Rgba: format = compressed ? PixelInternalFormat.CompressedRgbaS3tcDxt5Ext : format; break; case PixelInternalFormat.SrgbAlpha: format = compressed ? PixelInternalFormat.CompressedSrgbAlphaS3tcDxt5Ext : format; break; case PixelInternalFormat.Rgb: pixelFormat = OpenTK.Graphics.OpenGL.PixelFormat.Rgb; format = compressed ? PixelInternalFormat.CompressedRgbS3tcDxt1Ext : format; break; case PixelInternalFormat.Srgb: pixelFormat = OpenTK.Graphics.OpenGL.PixelFormat.Rgb; format = compressed ? PixelInternalFormat.CompressedSrgbS3tcDxt1Ext : format; break; case PixelInternalFormat.Rg8: pixelFormat = OpenTK.Graphics.OpenGL.PixelFormat.Rg; format = compressed ? PixelInternalFormat.CompressedRg : format; break; case PixelInternalFormat.R8: pixelFormat = OpenTK.Graphics.OpenGL.PixelFormat.Red; format = compressed ? PixelInternalFormat.CompressedRedRgtc1 : format; break; } // Load the texture temporarily in to GPU Texture texture = new Texture(); texture.Quality = new TextureQuality() { Filtering = filtering, Mipmaps = mipmapped, PregeneratedMipmaps = false, TextureWrapMode = OpenTK.Graphics.OpenGL.TextureWrapMode.Clamp, Anisotrophy = anisolevel, }; // Set meta settings var meta = texture.Metadata; meta.PreMipmapped = false; meta.Precompressed = false; meta.PixelFormat = pixelFormat; meta.PixelInternalFormat = format; texture.Load(bmp, format); textures.Insert("tmp", texture); //bw.ReportProgress(33); // Apply settings (generate possible mipmaps etc) texture.UpdateQuality(); GL.GenerateMipmap(GenerateMipmapTarget.Texture2D); GL.Finish(); meta.PreMipmapped = preMipmapped; meta.Precompressed = compressedSaved; meta.Quality.PregeneratedMipmaps = preMipmapped; //bw.ReportProgress(33); filename = System.IO.Path.GetFileNameWithoutExtension(filename); filename += ".tex"; // Configure save file dialog box Microsoft.Win32.SaveFileDialog saveDlg = new Microsoft.Win32.SaveFileDialog(); saveDlg.FileName = filename; // Default file name saveDlg.DefaultExt = ".tex"; // Default file extension saveDlg.Filter = "Hatzap texture files|*.tex"; // Filter files by extension // Show save file dialog box result = saveDlg.ShowDialog(); // Process save file dialog box results if (result == true) { // Save document filename = saveDlg.FileName; meta.FileName = filename; textures.Save("tmp", filename); texture.Release(); textures.Remove("tmp"); } //bw.ReportProgress(1); //}); //backgroundWorker.RunWorkerAsync(); }