$compileHashFile = "compilehashes.xml" if (Get-ChildItem -File $compileHashFile -ErrorAction SilentlyContinue) { $hashes = Import-Clixml $compileHashFile } else { $hashes = @{} } function CompileShader($fileName) { $spvFileName = "$fileName.spv" $newHash = Get-FileHash -Path $fileName -Algorithm SHA1 $spvExists = $false if (Get-ChildItem -File $spvFileName -ErrorAction SilentlyContinue) { $spvExists = $true } if ($spvExists -and $hashes.ContainsKey($fileName) -and $hashes[$fileName] -eq $newHash.Hash) { Write-Output "Skipping $fileName" } else { glslangValidator -V $fileName -o $spvFileName $hashes.$fileName = $newHash.Hash } } Get-ChildItem -Filter *.vert | ForEach-Object { CompileShader $_.Name } Get-ChildItem -Filter *.frag | ForEach-Object { CompileShader $_.Name } Export-Clixml -Path $compileHashFile -InputObject $hashes