private void Generate()
        {
            var tempPath = GetTempPath();

            if (!Directory.Exists(tempPath))
            {
                Directory.CreateDirectory(tempPath);
            }
            var tempFiles = Directory.GetFiles(tempPath);

            foreach (var file in tempFiles)
            {
                File.Delete(file);
            }

            var filesPng  = Directory.GetFiles(_pngSource.Text, "*.png");
            var filesJpeg = Directory.GetFiles(_pngSource.Text, "*.jpeg");
            var filesJpg  = Directory.GetFiles(_pngSource.Text, "*.jpg");
            var filesList = new List <string>();

            filesList.AddRange(filesPng);
            filesList.AddRange(filesJpeg);
            filesList.AddRange(filesJpg);
            var files = filesList.ToArray();

            foreach (var file in files)
            {
                //var copy = Path.Combine(tempPath, Path.GetFileName(file));

                var name = Path.GetFileNameWithoutExtension(file);

                if (name.EndsWith("bump"))
                {
                    using (var source = new Bitmap(file))
                        using (var bitmap = CreateNormalMap(source))
                            SaveMipmap(bitmap, tempPath, name);
                }
                else
                {
                    using (var bitmap = new Bitmap(file))
                    {
                        using (var targetStream = File.Create(Path.Combine(tempPath, Path.GetFileNameWithoutExtension(file) + ".raw")))
                            using (var writer = new BinaryWriter(targetStream))
                            {
                                SaveUncompressedRaw(bitmap, writer, 2048);
                            }
                        //SaveMipmap(bitmap, tempPath, name);
                    }
                }
            }
            files = Directory.GetFiles(_pngSource.Text, "*.obj");
            var meshes = new List <Mesh>();

            foreach (var file in files)
            {
                var name = Path.GetFileNameWithoutExtension(file);
                using (var stringReader = new StreamReader(file))
                {
                    var localMeshes = ConvertObjToBinary(stringReader, tempPath, name);
                    foreach (var localMesh in localMeshes)
                    {
                        meshes.Add(localMesh);
                    }
                }
            }

            var meshBatch = new MeshBatch(meshes.ToArray());

            using (var stream = File.Create(Path.Combine(tempPath, "batch_vb_big.3d")))
                using (var writer = new BinaryWriter(stream))
                    meshBatch.WriteVertices(writer, true);
            using (var stream = File.Create(Path.Combine(tempPath, "batch_vb_lit.3d")))
                using (var writer = new BinaryWriter(stream))
                    meshBatch.WriteVertices(writer, false);

            using (var stream = File.Create(Path.Combine(tempPath, "batch_ib_big.3d")))
                using (var writer = new BinaryWriter(stream))
                    meshBatch.WriteIndices(writer, true);
            using (var stream = File.Create(Path.Combine(tempPath, "batch_ib_lit.3d")))
                using (var writer = new BinaryWriter(stream))
                    meshBatch.WriteIndices(writer, false);

            using (var stream = File.Create(Path.Combine(tempPath, "batch_transforms_big.3d")))
                using (var writer = new BinaryWriter(stream))
                    meshBatch.WriteTransforms(writer, true);
            using (var stream = File.Create(Path.Combine(tempPath, "batch_transforms_lit.3d")))
                using (var writer = new BinaryWriter(stream))
                    meshBatch.WriteTransforms(writer, false);

            files = Directory.GetFiles(tempPath, "*.png");
            foreach (var file in files)
            {
                if (!ExecuteCommand(_etc1Tool.Text, "\"" + file + "\""))
                {
                    return;
                }
                Application.DoEvents();
            }

            files = Directory.GetFiles(_targetFolder.Text, "*.pkm");
            foreach (var file in files)
            {
                File.Delete(file);
                Application.DoEvents();
            }

            files = Directory.GetFiles(_targetFolder.Text, "*.3d");
            foreach (var file in files)
            {
                File.Delete(file);
                Application.DoEvents();
            }

            files = Directory.GetFiles(tempPath, "*.pkm");
            foreach (var file in files)
            {
                var copy = Path.Combine(_targetFolder.Text, Path.GetFileName(file));
                File.Copy(file, copy, true);
                Application.DoEvents();
            }

            files = Directory.GetFiles(tempPath, "*.raw");
            foreach (var file in files)
            {
                var copy = Path.Combine(_targetFolder.Text, Path.GetFileName(file));
                File.Copy(file, copy, true);
                Application.DoEvents();
            }

            files = Directory.GetFiles(tempPath, "*.3d");
            foreach (var file in files)
            {
                var copy = Path.Combine(_targetFolder.Text, Path.GetFileName(file));
                File.Copy(file, copy, true);
                Application.DoEvents();
            }
        }