From 53fbfdb30a86428cc99725065338531c10a21e2e Mon Sep 17 00:00:00 2001 From: Tobias Frisch <tfrisch@uni-koblenz.de> Date: Fri, 9 Jul 2021 12:22:57 +0200 Subject: [PATCH] [#56] Fixed warnings and add parameter to pick shaders for particles Signed-off-by: Tobias Frisch <tfrisch@uni-koblenz.de> --- projects/first_mesh/src/main.cpp | 2 +- projects/particle_simulation/src/Particle.cpp | 2 +- projects/particle_simulation/src/Particle.hpp | 2 +- projects/particle_simulation/src/main.cpp | 53 ++++++++----------- 4 files changed, 26 insertions(+), 33 deletions(-) diff --git a/projects/first_mesh/src/main.cpp b/projects/first_mesh/src/main.cpp index c71d80b3..44a370be 100644 --- a/projects/first_mesh/src/main.cpp +++ b/projects/first_mesh/src/main.cpp @@ -163,7 +163,7 @@ int main(int argc, const char** argv) { auto start = std::chrono::system_clock::now(); while (window.isWindowOpen()) { - window.pollEvents(); + vkcv::Window::pollEvents(); if(window.getHeight() == 0 || window.getWidth() == 0) continue; diff --git a/projects/particle_simulation/src/Particle.cpp b/projects/particle_simulation/src/Particle.cpp index 387728eb..39c98fc1 100644 --- a/projects/particle_simulation/src/Particle.cpp +++ b/projects/particle_simulation/src/Particle.cpp @@ -12,7 +12,7 @@ const glm::vec3& Particle::getPosition()const{ return m_position; } -const bool Particle::isAlive()const{ +bool Particle::isAlive()const{ return m_lifeTime > 0.f; } diff --git a/projects/particle_simulation/src/Particle.hpp b/projects/particle_simulation/src/Particle.hpp index f374218f..75ad0a71 100644 --- a/projects/particle_simulation/src/Particle.hpp +++ b/projects/particle_simulation/src/Particle.hpp @@ -17,7 +17,7 @@ public: void update( const float delta ); - const bool isAlive()const; + bool isAlive()const; void setLifeTime( const float lifeTime ); diff --git a/projects/particle_simulation/src/main.cpp b/projects/particle_simulation/src/main.cpp index ad02c651..0d83644b 100644 --- a/projects/particle_simulation/src/main.cpp +++ b/projects/particle_simulation/src/main.cpp @@ -58,12 +58,28 @@ int main(int argc, const char **argv) { return EXIT_FAILURE; } - // use space or use water - bool useSpace = true; + // use space or use water or gravity + std::string shaderPathCompute = "shaders/shader_space.comp"; + std::string shaderPathFragment = "shaders/shader_space.frag"; + + for (int i = 1; i < argc; i++) { + if (strcmp(argv[i], "--space") == 0) { + shaderPathCompute = "shaders/shader_space.comp"; + shaderPathFragment = "shaders/shader_space.frag"; + } else + if (strcmp(argv[i], "--water") == 0) { + shaderPathCompute = "shaders/shader_water.comp"; + shaderPathFragment = "shaders/shader_water.frag"; + } else + if (strcmp(argv[i], "--gravity") == 0) { + shaderPathCompute = "shaders/shader_gravity.comp"; + shaderPathFragment = "shaders/shader_space.frag"; + } + } vkcv::shader::GLSLCompiler compiler; vkcv::ShaderProgram computeShaderProgram{}; - compiler.compile(vkcv::ShaderStage::COMPUTE, useSpace ? "shaders/shader_space.comp" : "shaders/shader_water.comp", [&](vkcv::ShaderStage shaderStage, const std::filesystem::path& path) { + compiler.compile(vkcv::ShaderStage::COMPUTE, shaderPathCompute, [&](vkcv::ShaderStage shaderStage, const std::filesystem::path& path) { computeShaderProgram.addShader(shaderStage, path); }); @@ -81,7 +97,7 @@ int main(int argc, const char **argv) { 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) { + compiler.compile(vkcv::ShaderStage::FRAGMENT, shaderPathFragment, [&](vkcv::ShaderStage shaderStage, const std::filesystem::path& path) { particleShaderProgram.addShader(shaderStage, path); }); @@ -167,38 +183,16 @@ int main(int argc, const char **argv) { const vkcv::Mesh renderMesh({vertexBufferBindings}, particleIndexBuffer.getVulkanHandle(), particleIndexBuffer.getCount()); vkcv::DescriptorSetUsage descriptorUsage(0, core.getDescriptorSet(descriptorSet).vulkanHandle); - //vkcv::DrawcallInfo drawcalls(renderMesh, {vkcv::DescriptorSetUsage(0, core.getDescriptorSet(descriptorSet).vulkanHandle)}); - glm::vec2 pos = glm::vec2(0.f); - glm::vec3 spawnPosition = glm::vec3(0.f); - glm::vec4 tempPosition = glm::vec4(0.f); + auto pos = glm::vec2(0.f); + auto spawnPosition = glm::vec3(0.f); window.e_mouseMove.add([&](double offsetX, double offsetY) { pos = glm::vec2(static_cast<float>(offsetX), static_cast<float>(offsetY)); -// std::cout << offsetX << " , " << offsetY << std::endl; - // borders are assumed to be 0.5 - //pos = glm::vec2((pos.x -0.5f * static_cast<float>(window.getWidth()))/static_cast<float>(window.getWidth()), (pos.y -0.5f * static_cast<float>(window.getHeight()))/static_cast<float>(window.getHeight())); - //borders are assumed to be 1 pos.x = (-2 * pos.x + static_cast<float>(window.getWidth())) / static_cast<float>(window.getWidth()); pos.y = (-2 * pos.y + static_cast<float>(window.getHeight())) / static_cast<float>(window.getHeight()); - glm::vec4 row1 = glm::row(cameraManager.getCamera(0).getView(), 0); - glm::vec4 row2 = glm::row(cameraManager.getCamera(0).getView(), 1); - glm::vec4 row3 = glm::row(cameraManager.getCamera(0).getView(), 2); - glm::vec4 camera_pos = glm::column(cameraManager.getCamera(0).getView(), 3); -// std::cout << "row1: " << row1.x << ", " << row1.y << ", " << row1.z << std::endl; -// std::cout << "row2: " << row2.x << ", " << row2.y << ", " << row2.z << std::endl; -// std::cout << "row3: " << row3.x << ", " << row3.y << ", " << row3.z << std::endl; -// std::cout << "camerapos: " << camera_pos.x << ", " << camera_pos.y << ", " << camera_pos.z << std::endl; -// std::cout << "camerapos: " << camera_pos.x << ", " << camera_pos.y << ", " << camera_pos.z << std::endl; - //glm::vec4 view_axis = glm::row(cameraManager.getCamera().getView(), 2); - // std::cout << "view_axis: " << view_axis.x << ", " << view_axis.y << ", " << view_axis.z << std::endl; - //std::cout << "Front: " << cameraManager.getCamera().getFront().x << ", " << cameraManager.getCamera().getFront().z << ", " << cameraManager.getCamera().getFront().z << std::endl; - glm::mat4 viewmat = cameraManager.getCamera(0).getView(); spawnPosition = glm::vec3(pos.x, pos.y, 0.f); - tempPosition = glm::vec4(spawnPosition, 1.0f); - spawnPosition = glm::vec3(tempPosition.x, tempPosition.y, tempPosition.z); particleSystem.setRespawnPos(glm::vec3(-spawnPosition.x, spawnPosition.y, spawnPosition.z)); -// std::cout << "respawn pos: " << spawnPosition.x << ", " << spawnPosition.y << ", " << spawnPosition.z << std::endl; }); std::vector<glm::mat4> modelMatrices; @@ -242,7 +236,7 @@ int main(int argc, const char **argv) { std::uniform_real_distribution<float> rdm = std::uniform_real_distribution<float>(0.95f, 1.05f); std::default_random_engine rdmEngine; while (window.isWindowOpen()) { - window.pollEvents(); + vkcv::Window::pollEvents(); uint32_t swapchainWidth, swapchainHeight; if (!core.beginFrame(swapchainWidth, swapchainHeight)) { @@ -255,7 +249,6 @@ int main(int argc, const char **argv) { auto end = std::chrono::system_clock::now(); float deltatime = 0.000001 * static_cast<float>( std::chrono::duration_cast<std::chrono::microseconds>(end - start).count() ); start = end; -// particleSystem.updateParticles(deltatime); cameraManager.update(deltatime); -- GitLab