diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ae078a428a8e5e640ed8dc7bcc2f4e58e159c6b..5011f8a562af37098edf8127bc01183bcfa166b8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -87,5 +87,5 @@ add_subdirectory(projects) if (NOT WIN32) # add doxygen as target if installed - include(${vkcv_config}/ext/Doxygen.cmake) + #include(${vkcv_config}/ext/Doxygen.cmake) endif() \ No newline at end of file diff --git a/include/vkcv/Core.hpp b/include/vkcv/Core.hpp index 9f4ebb665ac0ee10bd228a880c12ef3345a5e60c..cd3676f45bf0891de97ab88ff74cdd980f6920da 100644 --- a/include/vkcv/Core.hpp +++ b/include/vkcv/Core.hpp @@ -223,9 +223,9 @@ namespace vkcv Multisampling multisampling = Multisampling::None); [[nodiscard]] - const uint32_t getImageWidth(ImageHandle imageHandle); + uint32_t getImageWidth(ImageHandle imageHandle); [[nodiscard]] - const uint32_t getImageHeight(ImageHandle imageHandle); + uint32_t getImageHeight(ImageHandle imageHandle); /** TODO: * @param setDescriptions diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp index 43095fbb89c40ae452eae25ebda34d3cbaca433e..a69f9bc755f9cfa3a75d0a51dd242876aedabf79 100644 --- a/projects/first_triangle/src/main.cpp +++ b/projects/first_triangle/src/main.cpp @@ -29,9 +29,6 @@ int main(int argc, const char** argv) { ); const auto& context = core.getContext(); - const vk::Instance& instance = context.getInstance(); - const vk::PhysicalDevice& physicalDevice = context.getPhysicalDevice(); - const vk::Device& device = context.getDevice(); auto triangleIndexBuffer = core.createBuffer<uint16_t>(vkcv::BufferType::INDEX, 3, vkcv::BufferMemoryType::DEVICE_LOCAL); uint16_t indices[3] = { 0, 1, 2 }; diff --git a/projects/particle_simulation/src/Particle.cpp b/projects/particle_simulation/src/Particle.cpp index 39c98fc125bd9bc8afedc9685b87f36a960a9c9a..b80d063d382c9ae1cb63887388cce065b8289b63 100644 --- a/projects/particle_simulation/src/Particle.cpp +++ b/projects/particle_simulation/src/Particle.cpp @@ -3,9 +3,10 @@ Particle::Particle(glm::vec3 position, glm::vec3 velocity, float lifeTime) : m_position(position), -m_velocity(velocity), -m_lifeTime(lifeTime), -m_reset_velocity(velocity) + m_lifeTime(lifeTime), + m_velocity(velocity), + m_mass(1.0f), + m_reset_velocity(velocity) {} const glm::vec3& Particle::getPosition()const{ diff --git a/projects/particle_simulation/src/Particle.hpp b/projects/particle_simulation/src/Particle.hpp index 75ad0a71251734bd55101dcad5224d0255fac596..73e7cbf517709ee03274cfd199081ade3f756545 100644 --- a/projects/particle_simulation/src/Particle.hpp +++ b/projects/particle_simulation/src/Particle.hpp @@ -28,7 +28,7 @@ private: glm::vec3 m_position; float m_lifeTime; glm::vec3 m_velocity; - float mass = 1.f; + float m_mass; glm::vec3 m_reset_velocity; - float padding_3 = 0.f; + float padding_3; }; diff --git a/projects/voxelization/src/Voxelization.cpp b/projects/voxelization/src/Voxelization.cpp index 1f1888d5c0ed30effc4c93c02efddb370ce8ad21..bbf161ddeb0899a1ce61279b4c476fb19cb906d7 100644 --- a/projects/voxelization/src/Voxelization.cpp +++ b/projects/voxelization/src/Voxelization.cpp @@ -259,7 +259,7 @@ void Voxelization::voxelizeMeshes( // voxelization std::vector<vkcv::DrawcallInfo> drawcalls; - for (int i = 0; i < meshes.size(); i++) { + for (size_t i = 0; i < meshes.size(); i++) { drawcalls.push_back(vkcv::DrawcallInfo( meshes[i], { diff --git a/projects/voxelization/src/main.cpp b/projects/voxelization/src/main.cpp index 68018ef80f801b797eca30078ca6fadf897da4ad..ca9951490e57b4b6afa3bbee986a55342a40582e 100644 --- a/projects/voxelization/src/main.cpp +++ b/projects/voxelization/src/main.cpp @@ -111,7 +111,7 @@ int main(int argc, const char** argv) { std::vector<std::vector<vkcv::VertexBufferBinding>> vertexBufferBindings; std::vector<vkcv::asset::VertexAttribute> vAttributes; - for (int i = 0; i < scene.vertexGroups.size(); i++) { + for (size_t i = 0; i < scene.vertexGroups.size(); i++) { vBuffers.push_back(scene.vertexGroups[i].vertexBuffer.data); iBuffers.push_back(scene.vertexGroups[i].indexBuffer.data); @@ -452,14 +452,14 @@ int main(int argc, const char** argv) { // prepare meshes std::vector<vkcv::Mesh> meshes; - for (int i = 0; i < scene.vertexGroups.size(); i++) { + for (size_t i = 0; i < scene.vertexGroups.size(); i++) { vkcv::Mesh mesh(vertexBufferBindings[i], indexBuffers[i].getVulkanHandle(), scene.vertexGroups[i].numIndices); meshes.push_back(mesh); } std::vector<vkcv::DrawcallInfo> drawcalls; std::vector<vkcv::DrawcallInfo> prepassDrawcalls; - for (int i = 0; i < meshes.size(); i++) { + for (size_t i = 0; i < meshes.size(); i++) { drawcalls.push_back(vkcv::DrawcallInfo(meshes[i], { vkcv::DescriptorSetUsage(0, core.getDescriptorSet(forwardShadingDescriptorSet).vulkanHandle), diff --git a/src/vkcv/CommandStreamManager.cpp b/src/vkcv/CommandStreamManager.cpp index 5a5b359b912d9cef36e0b03379d7f0f6f0951381..52b73213dbc5837f6be4a2aa25c28615dccf5969 100644 --- a/src/vkcv/CommandStreamManager.cpp +++ b/src/vkcv/CommandStreamManager.cpp @@ -32,11 +32,10 @@ namespace vkcv { // find unused stream int unusedStreamIndex = -1; - for (int i = 0; i < m_commandStreams.size(); i++) { + for (size_t i = 0; i < m_commandStreams.size(); i++) { if (m_commandStreams[i].cmdBuffer) { // still in use - } - else { + } else { unusedStreamIndex = i; break; } diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp index 3af359e7fa302e01e5c42664911ab90c9e9247cc..a66c1e6220261679a85241fff42de08a57428d4c 100644 --- a/src/vkcv/Core.cpp +++ b/src/vkcv/Core.cpp @@ -71,7 +71,6 @@ namespace vkcv const auto& queueManager = context.getQueueManager(); - const int graphicQueueFamilyIndex = queueManager.getGraphicsQueues()[0].familyIndex; const std::unordered_set<int> queueFamilySet = generateQueueFamilyIndexSet(queueManager); const auto commandResources = createCommandResources(context.getDevice(), queueFamilySet); const auto defaultSyncResources = createSyncResources(context.getDevice()); @@ -163,9 +162,9 @@ namespace vkcv nullptr, &imageIndex, {} ); - } catch (vk::OutOfDateKHRError e) { + } catch (const vk::OutOfDateKHRError& e) { result = vk::Result::eErrorOutOfDateKHR; - } catch (vk::DeviceLostError e) { + } catch (const vk::DeviceLostError& e) { result = vk::Result::eErrorDeviceLost; } @@ -268,7 +267,7 @@ namespace vkcv const vk::Rect2D renderArea(vk::Offset2D(0, 0), vk::Extent2D(width, height)); std::vector<vk::ImageView> attachmentsViews; - for (const ImageHandle handle : renderTargets) { + for (const ImageHandle& handle : renderTargets) { vk::ImageView targetHandle; const auto cmdBuffer = m_CommandStreamManager->getStreamCommandBuffer(cmdStreamHandle); @@ -305,8 +304,6 @@ namespace vkcv vk::Rect2D dynamicScissor({0, 0}, {width, height}); - auto &bufferManager = m_BufferManager; - SubmitInfo submitInfo; submitInfo.queueType = QueueType::Graphics; submitInfo.signalSemaphores = { m_SyncResources.renderFinished }; @@ -338,13 +335,12 @@ namespace vkcv cmdBuffer.bindPipeline(vk::PipelineBindPoint::eGraphics, pipeline, {}); const PipelineConfig &pipeConfig = m_PipelineManager->getPipelineConfig(pipelineHandle); - if(pipeConfig.m_UseDynamicViewport) - { + if (pipeConfig.m_UseDynamicViewport) { cmdBuffer.setViewport(0, 1, &dynamicViewport); cmdBuffer.setScissor(0, 1, &dynamicScissor); } - for (int i = 0; i < drawcalls.size(); i++) { + for (size_t i = 0; i < drawcalls.size(); i++) { recordDrawcall(drawcalls[i], cmdBuffer, pipelineLayout, pushConstants, i); } @@ -417,9 +413,9 @@ namespace vkcv try { result = queueManager.getPresentQueue().handle.presentKHR(presentInfo); - } catch (vk::OutOfDateKHRError e) { + } catch (const vk::OutOfDateKHRError& e) { result = vk::Result::eErrorOutOfDateKHR; - } catch (vk::DeviceLostError e) { + } catch (const vk::DeviceLostError& e) { result = vk::Result::eErrorDeviceLost; } @@ -463,8 +459,6 @@ namespace vkcv } CommandStreamHandle Core::createCommandStream(QueueType queueType) { - - const vk::Device& device = m_Context.getDevice(); const vkcv::Queue queue = getQueueForSubmit(queueType, m_Context.getQueueManager()); const vk::CommandPool cmdPool = chooseCmdPool(queue, m_CommandResources); @@ -522,12 +516,12 @@ namespace vkcv multisampling); } - const uint32_t Core::getImageWidth(ImageHandle imageHandle) + uint32_t Core::getImageWidth(ImageHandle imageHandle) { return m_ImageManager->getImageWidth(imageHandle); } - const uint32_t Core::getImageHeight(ImageHandle imageHandle) + uint32_t Core::getImageHeight(ImageHandle imageHandle) { return m_ImageManager->getImageHeight(imageHandle); } diff --git a/src/vkcv/DrawcallRecording.cpp b/src/vkcv/DrawcallRecording.cpp index cae0b3226e5e6bc424123d5bfa21b98a73cb3951..32ed00e98f7ef72f0c391f61924444c26844869b 100644 --- a/src/vkcv/DrawcallRecording.cpp +++ b/src/vkcv/DrawcallRecording.cpp @@ -23,8 +23,6 @@ namespace vkcv { nullptr); } - const size_t drawcallPushConstantOffset = drawcallIndex * pushConstants.getSizePerDrawcall(); - if (pushConstants.getSizePerDrawcall() > 0) { cmdBuffer.pushConstants( pipelineLayout, diff --git a/src/vkcv/ImageManager.cpp b/src/vkcv/ImageManager.cpp index 9ef2d613f3c86b984bee0abaf354f58155a9bba2..ba96cf8ff1be1988dbaf3f9cb01bdaa96c84ac0b 100644 --- a/src/vkcv/ImageManager.cpp +++ b/src/vkcv/ImageManager.cpp @@ -67,7 +67,8 @@ namespace vkcv { for (uint64_t id = 0; id < m_images.size(); id++) { destroyImageById(id); } - for (const auto swapchainImage : m_swapchainImages) { + + for (const auto& swapchainImage : m_swapchainImages) { for (const auto view : swapchainImage.m_viewPerMip) { m_core->getContext().getDevice().destroy(view); } @@ -196,7 +197,7 @@ namespace vkcv { } std::vector<vk::ImageView> views; - for (int mip = 0; mip < mipCount; mip++) { + for (uint32_t mip = 0; mip < mipCount; mip++) { const vk::ImageViewCreateInfo imageViewCreateInfo( {}, image, @@ -504,9 +505,6 @@ namespace vkcv { } void ImageManager::generateImageMipChainImmediate(const ImageHandle& handle) { - - const auto& device = m_core->getContext().getDevice(); - SubmitInfo submitInfo; submitInfo.queueType = QueueType::Graphics; @@ -655,7 +653,6 @@ namespace vkcv { uint32_t ImageManager::getImageMipCount(const ImageHandle& handle) const { const uint64_t id = handle.getId(); - const bool isSwapchainFormat = handle.isSwapchainImage(); if (handle.isSwapchainImage()) { return 1; @@ -685,7 +682,7 @@ namespace vkcv { assert(images.size() == views.size()); m_swapchainImages.clear(); - for (int i = 0; i < images.size(); i++) { + for (size_t i = 0; i < images.size(); i++) { m_swapchainImages.push_back(Image(images[i], nullptr, { views[i] }, width, height, 1, format, 1)); } } diff --git a/src/vkcv/QueueManager.cpp b/src/vkcv/QueueManager.cpp index df6c74cccf6c4652adc6a4c78802f282ea6ae293..b4891c6be387b817b87f059f4155f5708d4f4710 100644 --- a/src/vkcv/QueueManager.cpp +++ b/src/vkcv/QueueManager.cpp @@ -51,7 +51,7 @@ namespace vkcv { } //resort flags with heighest priority before allocating the queues std::vector<vk::QueueFlagBits> newFlags; - for(int i = 0; i < prios.size(); i++) { + for(size_t i = 0; i < prios.size(); i++) { auto minElem = std::min_element(prios.begin(), prios.end()); int index = minElem - prios.begin(); newFlags.push_back(queueFlags[index]); @@ -79,7 +79,7 @@ namespace vkcv { switch (qFlag) { case vk::QueueFlagBits::eGraphics: found = false; - for (int i = 0; i < queueFamilyStatus.size() && !found; i++) { + for (size_t i = 0; i < queueFamilyStatus.size() && !found; i++) { if (queueFamilyStatus[i][0] > 0) { queuePairsGraphics.push_back(std::pair(i, initialQueueFamilyStatus[i][0] - queueFamilyStatus[i][0])); queueFamilyStatus[i][0]--; @@ -89,7 +89,7 @@ namespace vkcv { } } if (!found) { - for (int i = 0; i < queueFamilyStatus.size() && !found; i++) { + for (size_t i = 0; i < queueFamilyStatus.size() && !found; i++) { if (initialQueueFamilyStatus[i][0] > 0) { queuePairsGraphics.push_back(std::pair(i, 0)); found = true; @@ -101,7 +101,7 @@ namespace vkcv { break; case vk::QueueFlagBits::eCompute: found = false; - for (int i = 0; i < queueFamilyStatus.size() && !found; i++) { + for (size_t i = 0; i < queueFamilyStatus.size() && !found; i++) { if (queueFamilyStatus[i][1] > 0) { queuePairsCompute.push_back(std::pair(i, initialQueueFamilyStatus[i][1] - queueFamilyStatus[i][1])); queueFamilyStatus[i][0]--; @@ -111,7 +111,7 @@ namespace vkcv { } } if (!found) { - for (int i = 0; i < queueFamilyStatus.size() && !found; i++) { + for (size_t i = 0; i < queueFamilyStatus.size() && !found; i++) { if (initialQueueFamilyStatus[i][1] > 0) { queuePairsCompute.push_back(std::pair(i, 0)); found = true; @@ -123,7 +123,7 @@ namespace vkcv { break; case vk::QueueFlagBits::eTransfer: found = false; - for (int i = 0; i < queueFamilyStatus.size() && !found; i++) { + for (size_t i = 0; i < queueFamilyStatus.size() && !found; i++) { if (queueFamilyStatus[i][2] > 0) { queuePairsTransfer.push_back(std::pair(i, initialQueueFamilyStatus[i][2] - queueFamilyStatus[i][2])); queueFamilyStatus[i][0]--; @@ -133,7 +133,7 @@ namespace vkcv { } } if (!found) { - for (int i = 0; i < queueFamilyStatus.size() && !found; i++) { + for (size_t i = 0; i < queueFamilyStatus.size() && !found; i++) { if (initialQueueFamilyStatus[i][2] > 0) { queuePairsTransfer.push_back(std::pair(i, 0)); found = true; @@ -149,7 +149,7 @@ namespace vkcv { } // create all requested queues - for (int i = 0; i < qFamilyProperties.size(); i++) { + for (size_t i = 0; i < qFamilyProperties.size(); i++) { uint32_t create = std::abs(initialQueueFamilyStatus[i][0] - queueFamilyStatus[i][0]); if (create > 0) { vk::DeviceQueueCreateInfo qCreateInfo( diff --git a/src/vkcv/Swapchain.cpp b/src/vkcv/Swapchain.cpp index 94e7301d66bfcc513434ef6d22520d1b95f98161..d0aa26db9c661ea40caf06349a72cc9188e791a9 100644 --- a/src/vkcv/Swapchain.cpp +++ b/src/vkcv/Swapchain.cpp @@ -100,18 +100,14 @@ namespace vkcv * @return available Format */ vk::SurfaceFormatKHR chooseSurfaceFormat(vk::PhysicalDevice physicalDevice, vk::SurfaceKHR surface) { - uint32_t formatCount; - physicalDevice.getSurfaceFormatsKHR(surface, &formatCount, nullptr); - std::vector<vk::SurfaceFormatKHR> availableFormats(formatCount); - if (physicalDevice.getSurfaceFormatsKHR(surface, &formatCount, &availableFormats[0]) != vk::Result::eSuccess) { - throw std::runtime_error("Failed to get surface formats"); - } + std::vector<vk::SurfaceFormatKHR> availableFormats = physicalDevice.getSurfaceFormatsKHR(surface); for (const auto& availableFormat : availableFormats) { if (availableFormat.format == vk::Format::eB8G8R8A8Unorm && availableFormat.colorSpace == vk::ColorSpaceKHR::eSrgbNonlinear) { return availableFormat; } } + return availableFormats[0]; } @@ -122,12 +118,7 @@ namespace vkcv * @return available PresentationMode */ vk::PresentModeKHR choosePresentMode(vk::PhysicalDevice physicalDevice, vk::SurfaceKHR surface) { - uint32_t modeCount; - physicalDevice.getSurfacePresentModesKHR( surface, &modeCount, nullptr ); - std::vector<vk::PresentModeKHR> availablePresentModes(modeCount); - if (physicalDevice.getSurfacePresentModesKHR(surface, &modeCount, &availablePresentModes[0]) != vk::Result::eSuccess) { - throw std::runtime_error("Failed to get presentation modes"); - } + std::vector<vk::PresentModeKHR> availablePresentModes = physicalDevice.getSurfacePresentModesKHR(surface); for (const auto& availablePresentMode : availablePresentModes) { if (availablePresentMode == vk::PresentModeKHR::eMailbox) { @@ -145,12 +136,11 @@ namespace vkcv * @return available ImageCount */ uint32_t chooseImageCount(vk::PhysicalDevice physicalDevice, vk::SurfaceKHR surface) { - vk::SurfaceCapabilitiesKHR surfaceCapabilities; - if(physicalDevice.getSurfaceCapabilitiesKHR(surface, &surfaceCapabilities) != vk::Result::eSuccess){ - throw std::runtime_error("cannot get surface capabilities. There is an issue with the surface."); - } - - uint32_t imageCount = surfaceCapabilities.minImageCount + 1; // minImageCount should always be at least 2; set to 3 for triple buffering + vk::SurfaceCapabilitiesKHR surfaceCapabilities = physicalDevice.getSurfaceCapabilitiesKHR(surface); + + // minImageCount should always be at least 2; set to 3 for triple buffering + uint32_t imageCount = surfaceCapabilities.minImageCount + 1; + // check if requested image count is supported if (surfaceCapabilities.maxImageCount > 0 && imageCount > surfaceCapabilities.maxImageCount) { imageCount = surfaceCapabilities.maxImageCount; @@ -215,8 +205,9 @@ namespace vkcv } void Swapchain::updateSwapchain(const Context &context, const Window &window) { - if (!m_RecreationRequired.exchange(false)) - return; + if (!m_RecreationRequired.exchange(false)) { + return; + } vk::SwapchainKHR oldSwapchain = m_Swapchain; vk::Extent2D extent2D = chooseExtent(context.getPhysicalDevice(), m_Surface.handle, window); diff --git a/src/vkcv/Window.cpp b/src/vkcv/Window.cpp index ea72582d67d5350e5fbf3f3c0fa2aae2ba407b0e..025cb388c6880cc8132b454c799d39e2b530ceb3 100644 --- a/src/vkcv/Window.cpp +++ b/src/vkcv/Window.cpp @@ -150,11 +150,15 @@ namespace vkcv { } void Window::onGamepadEvent(int gamepadIndex) { - int activeWindowIndex = std::find_if(s_Windows.begin(), - s_Windows.end(), - [](GLFWwindow* window){return glfwGetWindowAttrib(window, GLFW_FOCUSED);}) - - s_Windows.begin(); - activeWindowIndex *= (activeWindowIndex < s_Windows.size()); // fixes index getting out of bounds (e.g. if there is no focused window) + size_t activeWindowIndex = std::find_if( + s_Windows.begin(), + s_Windows.end(), + [](GLFWwindow* window){return glfwGetWindowAttrib(window, GLFW_FOCUSED);} + ) - s_Windows.begin(); + + // fixes index getting out of bounds (e.g. if there is no focused window) + activeWindowIndex *= (activeWindowIndex < s_Windows.size()); + auto window = static_cast<Window *>(glfwGetWindowUserPointer(s_Windows[activeWindowIndex])); if (window != nullptr) {