diff --git a/projects/particle_simulation/shaders/comp1.spv b/projects/particle_simulation/shaders/comp1.spv
deleted file mode 100644
index b07868be1fc5595cda5ebc37604ba185c6ac29a3..0000000000000000000000000000000000000000
Binary files a/projects/particle_simulation/shaders/comp1.spv and /dev/null differ
diff --git a/projects/particle_simulation/shaders/comp_space.spv b/projects/particle_simulation/shaders/comp_space.spv
deleted file mode 100644
index 1064be63178218c2bae7ccb62ade34a281518a83..0000000000000000000000000000000000000000
Binary files a/projects/particle_simulation/shaders/comp_space.spv and /dev/null differ
diff --git a/projects/particle_simulation/shaders/comp_water.spv b/projects/particle_simulation/shaders/comp_water.spv
deleted file mode 100644
index b07868be1fc5595cda5ebc37604ba185c6ac29a3..0000000000000000000000000000000000000000
Binary files a/projects/particle_simulation/shaders/comp_water.spv and /dev/null differ
diff --git a/projects/particle_simulation/shaders/compile.bat b/projects/particle_simulation/shaders/compile.bat
deleted file mode 100644
index db5496e208e398ffed3a4cb6e072f089c6f9cafc..0000000000000000000000000000000000000000
--- a/projects/particle_simulation/shaders/compile.bat
+++ /dev/null
@@ -1,6 +0,0 @@
-%VULKAN_SDK%\Bin32\glslc.exe shader.vert -o vert.spv
-%VULKAN_SDK%\Bin32\glslc.exe shader_water.frag -o frag_water.spv
-%VULKAN_SDK%\Bin32\glslc.exe shader_water.comp -o comp_water.spv
-%VULKAN_SDK%\Bin32\glslc.exe shader_space.frag -o frag_space.spv
-%VULKAN_SDK%\Bin32\glslc.exe shader_space.comp -o comp_space.spv
-pause
\ No newline at end of file
diff --git a/projects/particle_simulation/shaders/frag.spv b/projects/particle_simulation/shaders/frag.spv
deleted file mode 100644
index 0ce71df61bc127c7d057d290b78871593ee4f78e..0000000000000000000000000000000000000000
Binary files a/projects/particle_simulation/shaders/frag.spv and /dev/null differ
diff --git a/projects/particle_simulation/shaders/frag_space.spv b/projects/particle_simulation/shaders/frag_space.spv
deleted file mode 100644
index 8acf8a4295ba661f1b7a893d3c8dd508a4b168b6..0000000000000000000000000000000000000000
Binary files a/projects/particle_simulation/shaders/frag_space.spv and /dev/null differ
diff --git a/projects/particle_simulation/shaders/frag_water.spv b/projects/particle_simulation/shaders/frag_water.spv
deleted file mode 100644
index 406e44df35757621d0688d37bd93cb83f5f04c24..0000000000000000000000000000000000000000
Binary files a/projects/particle_simulation/shaders/frag_water.spv and /dev/null differ
diff --git a/projects/particle_simulation/shaders/vert.spv b/projects/particle_simulation/shaders/vert.spv
deleted file mode 100644
index e5a23d663612f70bbbafca156f9a49215dc2fd72..0000000000000000000000000000000000000000
Binary files a/projects/particle_simulation/shaders/vert.spv and /dev/null differ
diff --git a/projects/particle_simulation/src/main.cpp b/projects/particle_simulation/src/main.cpp
index 73e112da16f1767f9ca0d9222b3f7f36049e4eb1..91385c49636583dcfc1feeeded35b0d784454dd2 100644
--- a/projects/particle_simulation/src/main.cpp
+++ b/projects/particle_simulation/src/main.cpp
@@ -60,8 +60,11 @@ int main(int argc, const char **argv) {
     // use space or use water
     bool useSpace = true;
 
+    vkcv::shader::GLSLCompiler compiler;
     vkcv::ShaderProgram computeShaderProgram{};
-    computeShaderProgram.addShader(vkcv::ShaderStage::COMPUTE, std::filesystem::path(useSpace? "shaders/comp_space.spv" : "shaders/comp_water.spv"));
+    compiler.compile(vkcv::ShaderStage::COMPUTE, useSpace ? "shaders/shader_space.comp" : "shaders/shader_water.comp", [&](vkcv::ShaderStage shaderStage, const std::filesystem::path& path) {
+        computeShaderProgram.addShader(shaderStage, path);
+    });
 
     vkcv::DescriptorSetHandle computeDescriptorSet = core.createDescriptorSet(computeShaderProgram.getReflectedDescriptors()[0]);
 
@@ -74,8 +77,12 @@ int main(int argc, const char **argv) {
     const vkcv::VertexLayout computeLayout(computeBindings);
 
     vkcv::ShaderProgram particleShaderProgram{};
-    particleShaderProgram.addShader(vkcv::ShaderStage::VERTEX, std::filesystem::path("shaders/vert.spv"));
-    particleShaderProgram.addShader(vkcv::ShaderStage::FRAGMENT, std::filesystem::path( useSpace? "shaders/frag_space.spv" : "shaders/frag_water.spv"));
+    compiler.compile(vkcv::ShaderStage::VERTEX, "shaders/shader.vert", [&](vkcv::ShaderStage shaderStage, const std::filesystem::path& path) {
+        particleShaderProgram.addShader(shaderStage, path);
+    });
+    compiler.compile(vkcv::ShaderStage::FRAGMENT, useSpace ? "shaders/shader_space.frag" : "shaders/shader_water.frag", [&](vkcv::ShaderStage shaderStage, const std::filesystem::path& path) {
+        particleShaderProgram.addShader(shaderStage, path);
+    });
 
     vkcv::DescriptorSetHandle descriptorSet = core.createDescriptorSet(
             particleShaderProgram.getReflectedDescriptors()[0]);
@@ -210,7 +217,6 @@ int main(int argc, const char **argv) {
     vkcv::Image colorBuffer = core.createImage(colorFormat, windowWidth, windowHeight, 1, false, true, true);
 
     vkcv::ShaderProgram tonemappingShader;
-    vkcv::shader::GLSLCompiler compiler;
     compiler.compile(vkcv::ShaderStage::COMPUTE, "shaders/tonemapping.comp", [&](vkcv::ShaderStage shaderStage, const std::filesystem::path& path) {
         tonemappingShader.addShader(shaderStage, path);
     });