예제 #1
0
        public Task DumpDiscardPsAsync(IProgress <int> progress)
        {
            return(Task.Run(() =>
            {
                if (!Directory.Exists("shaderDump"))
                {
                    Directory.CreateDirectory("shaderDump");
                }

                for (var i = 0; i < _candidateIds.Count; i++)
                {
                    var id = _candidateIds[i];

                    var filename = _archive.VfsFilename(id);
                    var outputPath = "shaderDump/" + filename;

                    var binary = _archive.Get(id);
                    var disassembly = D3DCompiler.Disassemble(binary);

                    if (disassembly.Contains("discard_z"))
                    {
                        File.WriteAllBytes(outputPath, binary);
                        File.WriteAllText(outputPath + ".lst", disassembly);
                    }
                    progress.Report(i + 1);
                }
            }));
        }
예제 #2
0
        public Patcher(CrafArchive archive)
        {
            _archive      = archive;
            _candidateIds = new List <int>();

            for (var i = 0; i < _archive.Count(); i++)
            {
                var filename = _archive.VfsFilename(i);
                if (filename.StartsWith("g_buffer") && filename.EndsWith(".ps.sb"))
                {
                    _candidateIds.Add(i);
                }
            }
        }