diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ae6f909 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +VulkanTest diff --git a/VulkanTest b/VulkanTest deleted file mode 100755 index 6bc2357..0000000 Binary files a/VulkanTest and /dev/null differ diff --git a/main.cpp b/main.cpp index d9e8450..7b7b0c5 100644 --- a/main.cpp +++ b/main.cpp @@ -246,10 +246,10 @@ class HelloTriangleApplication { std::random_device rd; std::mt19937 gen(rd()); std::uniform_real_distribution pos_dist(-0.5, 0.5); - std::uniform_real_distribution speed_dist(0.0f, 0.0001f); + std::uniform_real_distribution speed_dist(0.0f, 0.00001f); std::uniform_real_distribution size_dist; if (scenario == 0) { - size_dist = std::uniform_real_distribution(4.0f, 12.0f); + size_dist = std::uniform_real_distribution(4.0f, 40.0f); } else if (scenario == 1) { size_dist = std::uniform_real_distribution(-10.0f, 10.0f); } @@ -265,8 +265,9 @@ class HelloTriangleApplication { void mainLoop() { while (!glfwWindowShouldClose(window)) { + int64_t startTime = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); glfwPollEvents(); - drawFrame(); + drawFrame(startTime); } vkDeviceWaitIdle(device); @@ -1034,12 +1035,9 @@ class HelloTriangleApplication { } } - void updateUniformBuffer(uint32_t currentImage) { - static auto startTime = std::chrono::high_resolution_clock::now(); - - auto currentTime = std::chrono::high_resolution_clock::now(); - float time = std::chrono::duration(currentTime - startTime).count(); - + void updateUniformBuffer(uint32_t currentImage, uint64_t startTime) { + uint64_t timeNow = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count(); + float dTime = static_cast(startTime - timeNow); UniformBufferObject ubo{}; int arrayLen = sizeof(ballsArr) / sizeof(ballsArr[0]); @@ -1050,7 +1048,7 @@ class HelloTriangleApplication { //ballsArr[3] = ballsArr[3] + glm::vec4(0.003f, -0.003f, 0.0f, 0.0f); for (int i = 0; i < arrayLen; i++) { - ballsArr[i] = ballsArr[i] + glm::vec4(speedArr[i].first, speedArr[i].second, 0.0f, 0.0f) * time; + ballsArr[i] = ballsArr[i] + glm::vec4(speedArr[i].first, speedArr[i].second, 0.0f, 0.0f) * (dTime/1000000000000000000); } //ubo.balls = ballsVec; @@ -1069,7 +1067,7 @@ class HelloTriangleApplication { vkUnmapMemory(device, uniformBuffersMemory[currentImage]); } - void drawFrame() { + void drawFrame(int64_t startTime) { vkWaitForFences(device, 1, &inFlightFences[currentFrame], VK_TRUE, UINT64_MAX); uint32_t imageIndex; @@ -1082,8 +1080,6 @@ class HelloTriangleApplication { throw std::runtime_error("failed to acquire swap chain image!"); } - updateUniformBuffer(currentFrame); - vkResetFences(device, 1, &inFlightFences[currentFrame]); vkResetCommandBuffer(commandBuffers[currentFrame], 0); @@ -1128,6 +1124,8 @@ class HelloTriangleApplication { throw std::runtime_error("failed to present swap chain image!"); } + updateUniformBuffer(currentFrame, startTime); + currentFrame = (currentFrame + 1) % MAX_FRAMES_IN_FLIGHT; }