sum changes

This commit is contained in:
Mars 2024-11-17 22:10:56 -05:00
parent d4163fa7d6
commit a6fa5b0570
Signed by: pupbrained
GPG key ID: 874E22DF2F9DFCB5
2 changed files with 21 additions and 29 deletions

View file

@ -28,7 +28,7 @@ fn VulkanInstance::create() -> vk::UniqueInstance {
}; };
// Get required extensions // Get required extensions
auto extensions = getRequiredExtensions(); std::vector<const char*> extensions = getRequiredExtensions();
#ifndef NDEBUG #ifndef NDEBUG
fmt::println("Available extensions:"); fmt::println("Available extensions:");
@ -52,7 +52,7 @@ fn VulkanInstance::create() -> vk::UniqueInstance {
.ppEnabledExtensionNames = extensions.data() .ppEnabledExtensionNames = extensions.data()
}; };
auto instance = vk::createInstanceUnique(createInfo); vk::UniqueInstance instance = vk::createInstanceUnique(createInfo);
// Initialize the dynamic dispatcher with the instance // Initialize the dynamic dispatcher with the instance
VULKAN_HPP_DEFAULT_DISPATCHER.init(instance.get()); VULKAN_HPP_DEFAULT_DISPATCHER.init(instance.get());
@ -81,23 +81,21 @@ fn VulkanInstance::getRequiredExtensions() -> std::vector<const char*> {
fn VulkanInstance::checkValidationLayerSupport() -> bool { fn VulkanInstance::checkValidationLayerSupport() -> bool {
// Get available layers // Get available layers
auto availableLayers = vk::enumerateInstanceLayerProperties(); std::vector<vk::LayerProperties> availableLayers = vk::enumerateInstanceLayerProperties();
// Check if all requested validation layers are available // Check if all requested validation layers are available
for (const char* layerName : validationLayers) { for (const char* layerName : validationLayers) {
bool layerFound = false; bool layerFound = false;
for (const auto& layerProperties : availableLayers) { for (const vk::LayerProperties& layerProperties : availableLayers)
if (strcmp(layerName, layerProperties.layerName) == 0) { if (strcmp(layerName, layerProperties.layerName) == 0) {
layerFound = true; layerFound = true;
break; break;
} }
}
if (!layerFound) { if (!layerFound)
return false; return false;
} }
}
return true; return true;
} }

View file

@ -40,10 +40,6 @@
#include <imgui_impl_glfw.h> #include <imgui_impl_glfw.h>
#include <imgui_impl_vulkan.h> #include <imgui_impl_vulkan.h>
// GLFW configuration and inclusion
#define VKFW_NO_STRUCT_CONSTRUCTORS // Use aggregate initialization for GLFW structs
#include "vkfw.hpp" // Include GLFW C++ bindings
using namespace constants; using namespace constants;
/** /**
@ -467,16 +463,14 @@ class VulkanApp {
if (ImGui::CollapsingHeader("Camera Settings", ImGuiTreeNodeFlags_DefaultOpen)) { if (ImGui::CollapsingHeader("Camera Settings", ImGuiTreeNodeFlags_DefaultOpen)) {
ImGui::SliderFloat("Camera Speed", &mCameraSpeed, 0.1F, 10.0F, "%.1f"); ImGui::SliderFloat("Camera Speed", &mCameraSpeed, 0.1F, 10.0F, "%.1f");
ImGui::SliderFloat("Field of View", &mFieldOfView, 45.0F, 120.0F, "%.1f"); ImGui::SliderFloat("Field of View", &mFieldOfView, 45.0F, 120.0F, "%.1f");
if (ImGui::Button("Reset Camera")) { if (ImGui::Button("Reset Camera"))
mCamera = Camera(); mCamera = Camera();
} }
}
// Rendering Settings // Rendering Settings
if (ImGui::CollapsingHeader("Rendering Settings", ImGuiTreeNodeFlags_DefaultOpen)) { if (ImGui::CollapsingHeader("Rendering Settings", ImGuiTreeNodeFlags_DefaultOpen)) {
if (ImGui::Checkbox("Wireframe Mode", &mWireframeMode)) { if (ImGui::Checkbox("Wireframe Mode", &mWireframeMode))
recreateSwapChain(); recreateSwapChain();
}
if (mWireframeMode) { if (mWireframeMode) {
if (mWideLineSupport) { if (mWideLineSupport) {
@ -501,7 +495,6 @@ class VulkanApp {
ImGui::BulletText("WASD to move horizontally"); ImGui::BulletText("WASD to move horizontally");
ImGui::BulletText("Space/Shift to move up/down"); ImGui::BulletText("Space/Shift to move up/down");
ImGui::BulletText("ESC to toggle mouse capture"); ImGui::BulletText("ESC to toggle mouse capture");
ImGui::BulletText("Tab to toggle this menu");
} }
} }
@ -1130,9 +1123,9 @@ class VulkanApp {
mCrosshairPipelineLayout = mDevice->createPipelineLayoutUnique(pipelineLayoutInfo); mCrosshairPipelineLayout = mDevice->createPipelineLayoutUnique(pipelineLayoutInfo);
// Load shaders // Load shaders
auto vertShaderCode = std::vector<u32> vertShaderCode =
ShaderCompiler::getCompiledShader(CROSSHAIR_VERTEX_SHADER_PATH, shaderc_vertex_shader); ShaderCompiler::getCompiledShader(CROSSHAIR_VERTEX_SHADER_PATH, shaderc_vertex_shader);
auto fragShaderCode = std::vector<u32> fragShaderCode =
ShaderCompiler::getCompiledShader(CROSSHAIR_FRAGMENT_SHADER_PATH, shaderc_fragment_shader); ShaderCompiler::getCompiledShader(CROSSHAIR_FRAGMENT_SHADER_PATH, shaderc_fragment_shader);
vk::UniqueShaderModule vertShaderModule = createShaderModule(vertShaderCode); vk::UniqueShaderModule vertShaderModule = createShaderModule(vertShaderCode);
@ -1149,8 +1142,9 @@ class VulkanApp {
std::array shaderStages = { vertShaderStageInfo, fragShaderStageInfo }; std::array shaderStages = { vertShaderStageInfo, fragShaderStageInfo };
// Vertex input // Vertex input
auto bindingDescription = CrosshairVertex::getBindingDescription(); vk::VertexInputBindingDescription bindingDescription = CrosshairVertex::getBindingDescription();
auto attributeDescriptions = CrosshairVertex::getAttributeDescriptions(); std::array<vk::VertexInputAttributeDescription, 2> attributeDescriptions =
CrosshairVertex::getAttributeDescriptions();
vk::PipelineVertexInputStateCreateInfo vertexInputInfo { vk::PipelineVertexInputStateCreateInfo vertexInputInfo {
.vertexBindingDescriptionCount = 1, .vertexBindingDescriptionCount = 1,
@ -1226,7 +1220,7 @@ class VulkanApp {
// Create vertex buffer // Create vertex buffer
vk::DeviceSize bufferSize = sizeof(crosshairVertices[0]) * crosshairVertices.size(); vk::DeviceSize bufferSize = sizeof(crosshairVertices[0]) * crosshairVertices.size();
auto stagingBuffer = createBuffer( std::pair<vk::UniqueBuffer, vk::UniqueDeviceMemory> stagingBuffer = createBuffer(
bufferSize, bufferSize,
vk::BufferUsageFlagBits::eTransferSrc, vk::BufferUsageFlagBits::eTransferSrc,
vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent
@ -1249,7 +1243,7 @@ class VulkanApp {
// Create index buffer // Create index buffer
bufferSize = sizeof(crosshairIndices[0]) * crosshairIndices.size(); bufferSize = sizeof(crosshairIndices[0]) * crosshairIndices.size();
auto stagingBufferIndices = createBuffer( std::pair<vk::UniqueBuffer, vk::UniqueDeviceMemory> stagingBufferIndices = createBuffer(
bufferSize, bufferSize,
vk::BufferUsageFlagBits::eTransferSrc, vk::BufferUsageFlagBits::eTransferSrc,
vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent vk::MemoryPropertyFlagBits::eHostVisible | vk::MemoryPropertyFlagBits::eHostCoherent
@ -2409,7 +2403,7 @@ class VulkanApp {
glm::translate(glm::mat4(1.0F), glm::vec3(-2.0F, 0.0F, 0.0F)), glm::translate(glm::mat4(1.0F), glm::vec3(-2.0F, 0.0F, 0.0F)),
glm::translate(glm::mat4(1.0F), glm::vec3(0.0F, 2.0F, 0.0F)) }; glm::translate(glm::mat4(1.0F), glm::vec3(0.0F, 2.0F, 0.0F)) };
for (const auto& modelMatrix : modelMatrices) { for (const glm::mat4& modelMatrix : modelMatrices) {
// Update model matrix for each clone // Update model matrix for each clone
ubo.model = modelMatrix; ubo.model = modelMatrix;
memcpy(mUniformBuffersMapped[mCurrentFrame], &ubo, sizeof(ubo)); memcpy(mUniformBuffersMapped[mCurrentFrame], &ubo, sizeof(ubo));
@ -2432,18 +2426,17 @@ class VulkanApp {
// Draw the crosshair // Draw the crosshair
commandBuffer.bindPipeline(vk::PipelineBindPoint::eGraphics, mCrosshairPipeline.get()); commandBuffer.bindPipeline(vk::PipelineBindPoint::eGraphics, mCrosshairPipeline.get());
std::array<vk::Buffer, 1> vertexBuffers = { mCrosshairVertexBuffer.get() }; commandBuffer.bindVertexBuffers(
std::array<vk::DeviceSize, 1> offsets = { 0 }; 0, 1, &mCrosshairVertexBuffer.get(), std::array<vk::DeviceSize, 1> { 0 }.data()
commandBuffer.bindVertexBuffers(0, 1, vertexBuffers.data(), offsets.data()); );
commandBuffer.bindIndexBuffer(mCrosshairIndexBuffer.get(), 0, vk::IndexType::eUint16); commandBuffer.bindIndexBuffer(mCrosshairIndexBuffer.get(), 0, vk::IndexType::eUint16);
// Draw the crosshair // Draw the crosshair
commandBuffer.drawIndexed(static_cast<u32>(crosshairIndices.size()), 1, 0, 0, 0); commandBuffer.drawIndexed(static_cast<u32>(crosshairIndices.size()), 1, 0, 0, 0);
// Render ImGui if we have a draw data (ImGui::Render was called) // Render ImGui if we have a draw data (ImGui::Render was called)
if (ImGui::GetDrawData()) { if (ImGui::GetDrawData())
ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), commandBuffer); ImGui_ImplVulkan_RenderDrawData(ImGui::GetDrawData(), commandBuffer);
}
// End the render pass // End the render pass
commandBuffer.endRenderPass(); commandBuffer.endRenderPass();
@ -2670,7 +2663,8 @@ class VulkanApp {
) -> vk::PresentModeKHR { ) -> vk::PresentModeKHR {
// Check if mailbox mode is available (adaptive sync) // Check if mailbox mode is available (adaptive sync)
for (const vk::PresentModeKHR& availablePresentMode : availablePresentModes) for (const vk::PresentModeKHR& availablePresentMode : availablePresentModes)
if (availablePresentMode == vk::PresentModeKHR::eMailbox) if (availablePresentMode == vk::PresentModeKHR::eMailbox ||
availablePresentMode == vk::PresentModeKHR::eImmediate)
return availablePresentMode; return availablePresentMode;
// If mailbox mode is not available, use FIFO mode (vsync) // If mailbox mode is not available, use FIFO mode (vsync)