Exemple #1
0
        public MainWindow()
        {
            InitializeComponent();

            backgroundWorker.DoWork += backgroundWorker_DoWork;

            settingsDialog = new TextureSettingsWindow();
        }
Exemple #2
0
        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();
        }