Cleaned up the code but had to add -Wno-sign-conversion to get glm to shut up.
This commit is contained in:
parent
8a7ef61c78
commit
55e38788b4
4 changed files with 30 additions and 21 deletions
18
meson.build
18
meson.build
|
|
@ -10,7 +10,7 @@ project('hellovulk', 'cpp',
|
||||||
cmake = import('cmake')
|
cmake = import('cmake')
|
||||||
|
|
||||||
# use this for common options only for our executables
|
# use this for common options only for our executables
|
||||||
cpp_args=[]
|
cpp_args=['-Wno-sign-conversion']
|
||||||
link_args=[]
|
link_args=[]
|
||||||
# these are passed as override_defaults
|
# these are passed as override_defaults
|
||||||
exe_defaults = [ 'warning_level=2' ]
|
exe_defaults = [ 'warning_level=2' ]
|
||||||
|
|
@ -56,16 +56,24 @@ elif build_machine.system() == 'darwin'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
vma = subproject('vulkan-memory-allocator').get_variable('vma_allocator_dep')
|
vma = subproject('vulkan-memory-allocator').get_variable('vma_allocator_dep')
|
||||||
glm = subproject('glm').get_variable('glm_dep')
|
|
||||||
imgui = subproject('imgui').get_variable('imgui_dep')
|
imgui = subproject('imgui').get_variable('imgui_dep')
|
||||||
sdl2 = subproject('sdl2').get_variable('sdl2_dep')
|
sdl2 = subproject('sdl2').get_variable('sdl2_dep')
|
||||||
|
|
||||||
opts = cmake.subproject_options()
|
|
||||||
opts.add_cmake_defines({
|
glm_opts = cmake.subproject_options()
|
||||||
|
glm_opts.add_cmake_defines({
|
||||||
|
'GLM_ENABLE_CXX_20': true,
|
||||||
|
})
|
||||||
|
glm_proj = cmake.subproject('glm', options: glm_opts)
|
||||||
|
glm = glm_proj.get_variable('glm_dep')
|
||||||
|
|
||||||
|
|
||||||
|
vk_opts = cmake.subproject_options()
|
||||||
|
vk_opts.add_cmake_defines({
|
||||||
'VK_BOOTSTRAP_TEST': false,
|
'VK_BOOTSTRAP_TEST': false,
|
||||||
'VK_BOOTSTRAP_INSTALL': false,
|
'VK_BOOTSTRAP_INSTALL': false,
|
||||||
})
|
})
|
||||||
vkbootstrap_proj = cmake.subproject('vk-bootstrap', options: opts)
|
vkbootstrap_proj = cmake.subproject('vk-bootstrap', options: vk_opts)
|
||||||
vkbootstrap = vkbootstrap_proj.get_variable('vk_bootstrap_dep')
|
vkbootstrap = vkbootstrap_proj.get_variable('vk_bootstrap_dep')
|
||||||
|
|
||||||
dependencies += [
|
dependencies += [
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,4 @@
|
||||||
/*
|
#include "vk_engine.h"
|
||||||
* Stopped at https://vkguide.dev/docs/new_chapter_1/vulkan_mainloop_code/
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "vk_engine.h"
|
|
||||||
#include "vk_images.h"
|
#include "vk_images.h"
|
||||||
#include <print>
|
#include <print>
|
||||||
|
|
||||||
|
|
@ -56,7 +52,7 @@ void VulkanEngine::cleanup()
|
||||||
if (_isInitialized) {
|
if (_isInitialized) {
|
||||||
vkDeviceWaitIdle(_device);
|
vkDeviceWaitIdle(_device);
|
||||||
|
|
||||||
for(int i = 0; i < FRAME_OVERLAP; i++) {
|
for(size_t i = 0; i < FRAME_OVERLAP; i++) {
|
||||||
vkDestroyCommandPool(_device, _frames[i]._commandPool, nullptr);
|
vkDestroyCommandPool(_device, _frames[i]._commandPool, nullptr);
|
||||||
|
|
||||||
//destroy sync objects
|
//destroy sync objects
|
||||||
|
|
@ -96,7 +92,7 @@ void VulkanEngine::draw()
|
||||||
vkutil::transition_image(cmd, _swapchainImages[swapchainImageIndex], VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL);
|
vkutil::transition_image(cmd, _swapchainImages[swapchainImageIndex], VK_IMAGE_LAYOUT_UNDEFINED, VK_IMAGE_LAYOUT_GENERAL);
|
||||||
|
|
||||||
VkClearColorValue clearValue;
|
VkClearColorValue clearValue;
|
||||||
float flash = std::abs(std::sin(_frameNumber / 120.0f));
|
float flash = std::abs(std::sin(float(_frameNumber) / 120.0f));
|
||||||
clearValue = { { 0.0f, 0.0f, flash, 1.0f} };
|
clearValue = { { 0.0f, 0.0f, flash, 1.0f} };
|
||||||
|
|
||||||
VkImageSubresourceRange clearRange = vkinit::image_subresource_range(VK_IMAGE_ASPECT_COLOR_BIT);
|
VkImageSubresourceRange clearRange = vkinit::image_subresource_range(VK_IMAGE_ASPECT_COLOR_BIT);
|
||||||
|
|
@ -199,12 +195,15 @@ void VulkanEngine::init_vulkan() {
|
||||||
SDL_Vulkan_CreateSurface(_window, _instance, &_surface);
|
SDL_Vulkan_CreateSurface(_window, _instance, &_surface);
|
||||||
|
|
||||||
//vulkan 1.3 features
|
//vulkan 1.3 features
|
||||||
VkPhysicalDeviceVulkan13Features features{ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES };
|
VkPhysicalDeviceVulkan13Features features{};
|
||||||
|
|
||||||
|
features.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES;
|
||||||
features.dynamicRendering = true;
|
features.dynamicRendering = true;
|
||||||
features.synchronization2 = true;
|
features.synchronization2 = true;
|
||||||
|
|
||||||
//vulkan 1.2 features
|
//vulkan 1.2 features
|
||||||
VkPhysicalDeviceVulkan12Features features12{ .sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES };
|
VkPhysicalDeviceVulkan12Features features12{};
|
||||||
|
features12.sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES;
|
||||||
features12.bufferDeviceAddress = true;
|
features12.bufferDeviceAddress = true;
|
||||||
features12.descriptorIndexing = true;
|
features12.descriptorIndexing = true;
|
||||||
|
|
||||||
|
|
@ -233,10 +232,12 @@ void VulkanEngine::create_swapchain(uint32_t width, uint32_t height) {
|
||||||
vkb::SwapchainBuilder swapchainBuilder{ _chosenGPU, _device, _surface};
|
vkb::SwapchainBuilder swapchainBuilder{ _chosenGPU, _device, _surface};
|
||||||
|
|
||||||
_swapchainImageFormat = VK_FORMAT_B8G8R8A8_UNORM;
|
_swapchainImageFormat = VK_FORMAT_B8G8R8A8_UNORM;
|
||||||
|
VkSurfaceFormatKHR surfaceFormat{};
|
||||||
|
surfaceFormat.format=_swapchainImageFormat;
|
||||||
|
|
||||||
vkb::Swapchain vkbSwapchain = swapchainBuilder
|
vkb::Swapchain vkbSwapchain = swapchainBuilder
|
||||||
//.use_default_format_selection()
|
//.use_default_format_selection()
|
||||||
.set_desired_format(VkSurfaceFormatKHR{.format=_swapchainImageFormat})
|
.set_desired_format(surfaceFormat)
|
||||||
// use vsync present mode
|
// use vsync present mode
|
||||||
.set_desired_present_mode(VK_PRESENT_MODE_FIFO_KHR)
|
.set_desired_present_mode(VK_PRESENT_MODE_FIFO_KHR)
|
||||||
.set_desired_extent(width, height)
|
.set_desired_extent(width, height)
|
||||||
|
|
@ -267,7 +268,7 @@ void VulkanEngine::init_commands() {
|
||||||
//we also want the pool to allow for resetting of individual command buffers
|
//we also want the pool to allow for resetting of individual command buffers
|
||||||
VkCommandPoolCreateInfo commandPoolInfo = vkinit::command_pool_create_info(_graphicsQueueFamily, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT);
|
VkCommandPoolCreateInfo commandPoolInfo = vkinit::command_pool_create_info(_graphicsQueueFamily, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT);
|
||||||
|
|
||||||
for (int i = 0; i < FRAME_OVERLAP; i++) {
|
for (size_t i = 0; i < FRAME_OVERLAP; i++) {
|
||||||
|
|
||||||
VK_CHECK(vkCreateCommandPool(_device, &commandPoolInfo, nullptr, &_frames[i]._commandPool));
|
VK_CHECK(vkCreateCommandPool(_device, &commandPoolInfo, nullptr, &_frames[i]._commandPool));
|
||||||
|
|
||||||
|
|
@ -282,7 +283,7 @@ void VulkanEngine::init_sync_structures() {
|
||||||
VkFenceCreateInfo fenceCreateInfo = vkinit::fence_create_info(VK_FENCE_CREATE_SIGNALED_BIT);
|
VkFenceCreateInfo fenceCreateInfo = vkinit::fence_create_info(VK_FENCE_CREATE_SIGNALED_BIT);
|
||||||
VkSemaphoreCreateInfo semaphoreCreateInfo = vkinit::semaphore_create_info();
|
VkSemaphoreCreateInfo semaphoreCreateInfo = vkinit::semaphore_create_info();
|
||||||
|
|
||||||
for (int i = 0; i < FRAME_OVERLAP; i++) {
|
for (size_t i = 0; i < FRAME_OVERLAP; i++) {
|
||||||
VK_CHECK(vkCreateFence(_device, &fenceCreateInfo, nullptr, &_frames[i]._renderFence));
|
VK_CHECK(vkCreateFence(_device, &fenceCreateInfo, nullptr, &_frames[i]._renderFence));
|
||||||
|
|
||||||
VK_CHECK(vkCreateSemaphore(_device, &semaphoreCreateInfo, nullptr, &_frames[i]._swapchainSemaphore));
|
VK_CHECK(vkCreateSemaphore(_device, &semaphoreCreateInfo, nullptr, &_frames[i]._swapchainSemaphore));
|
||||||
|
|
|
||||||
|
|
@ -33,7 +33,7 @@ public:
|
||||||
VkExtent2D _swapchainExtent;
|
VkExtent2D _swapchainExtent;
|
||||||
|
|
||||||
// frames/command buffer
|
// frames/command buffer
|
||||||
int _frameNumber {0};
|
unsigned int _frameNumber = 0;
|
||||||
FrameData _frames[FRAME_OVERLAP];
|
FrameData _frames[FRAME_OVERLAP];
|
||||||
|
|
||||||
FrameData& get_current_frame() {
|
FrameData& get_current_frame() {
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,8 @@
|
||||||
|
|
||||||
void vkutil::transition_image(VkCommandBuffer cmd, VkImage image, VkImageLayout currentLayout, VkImageLayout newLayout)
|
void vkutil::transition_image(VkCommandBuffer cmd, VkImage image, VkImageLayout currentLayout, VkImageLayout newLayout)
|
||||||
{
|
{
|
||||||
VkImageMemoryBarrier2 imageBarrier {.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2};
|
VkImageMemoryBarrier2 imageBarrier{};
|
||||||
|
imageBarrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2;
|
||||||
imageBarrier.pNext = nullptr;
|
imageBarrier.pNext = nullptr;
|
||||||
|
|
||||||
imageBarrier.srcStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT;
|
imageBarrier.srcStageMask = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT;
|
||||||
|
|
@ -22,7 +23,6 @@ void vkutil::transition_image(VkCommandBuffer cmd, VkImage image, VkImageLayout
|
||||||
VkDependencyInfo depInfo{};
|
VkDependencyInfo depInfo{};
|
||||||
depInfo.sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO;
|
depInfo.sType = VK_STRUCTURE_TYPE_DEPENDENCY_INFO;
|
||||||
depInfo.pNext = nullptr;
|
depInfo.pNext = nullptr;
|
||||||
|
|
||||||
depInfo.imageMemoryBarrierCount = 1;
|
depInfo.imageMemoryBarrierCount = 1;
|
||||||
depInfo.pImageMemoryBarriers = &imageBarrier;
|
depInfo.pImageMemoryBarriers = &imageBarrier;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue