sum changes
This commit is contained in:
parent
d4163fa7d6
commit
a6fa5b0570
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
38
src/main.cpp
38
src/main.cpp
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue