diff options
| -rw-r--r-- | include/vk-renderer.hpp | 1 | ||||
| -rw-r--r-- | include/window.hpp | 2 | ||||
| -rw-r--r-- | src/main.cpp | 26 | ||||
| -rw-r--r-- | src/vk-renderer.cpp | 31 | ||||
| -rw-r--r-- | src/window.cpp | 2 |
5 files changed, 44 insertions, 18 deletions
diff --git a/include/vk-renderer.hpp b/include/vk-renderer.hpp index 709ec9d..199900e 100644 --- a/include/vk-renderer.hpp +++ b/include/vk-renderer.hpp @@ -37,6 +37,7 @@ class vkrenderer { uint32_t swapchain_image_index = 0; std::vector<Image> accumulation_images; + VkSampler ui_texture_sampler; Image ui_texture; std::vector<VkCommandBuffer> command_buffers; diff --git a/include/window.hpp b/include/window.hpp index 4de4c9f..5a8bcc8 100644 --- a/include/window.hpp +++ b/include/window.hpp @@ -120,7 +120,7 @@ enum EVENT_TYPES: int32_t { KEY_RELEASE, BUTTON_PRESS, BUTTON_RELEASE, - MOVE + MOUSE_MOVE }; struct event { diff --git a/src/main.cpp b/src/main.cpp index 07e799b..9d201a1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -67,6 +67,7 @@ int main() { start = std::chrono::high_resolution_clock::now(); ImGuiIO& io = ImGui::GetIO(); + io.DeltaTime = delta_time; wnd.poll_events(); @@ -129,6 +130,31 @@ int main() { break; } + case EVENT_TYPES::BUTTON_PRESS: { + if (event.button == BUTTONS::LEFT) { + io.MouseDown[0] = true; + } + if (event.button == BUTTONS::RIGHT) { + io.MouseDown[1] = true; + } + break; + } + case EVENT_TYPES::BUTTON_RELEASE: { + if (event.button == BUTTONS::LEFT) { + io.MouseDown[0] = false; + } + if (event.button == BUTTONS::RIGHT) { + io.MouseDown[1] = false; + } + break; + } + case EVENT_TYPES::MOUSE_MOVE: { + io.MousePos = ImVec2 { + (float)event.x, + (float)event.y + }; + break; + } default: break; } diff --git a/src/vk-renderer.cpp b/src/vk-renderer.cpp index 9636465..7f23da6 100644 --- a/src/vk-renderer.cpp +++ b/src/vk-renderer.cpp @@ -139,7 +139,6 @@ vkrenderer::vkrenderer(window& wnd, const input_data& inputs) { ui_texture = api.create_image(atlas_size, VK_FORMAT_R8G8B8A8_UNORM, VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT); io.Fonts->SetTexID((void*)&ui_texture); - VKRESULT(vkWaitForFences(api.context.device, 1, &submission_fences[frame_index], VK_TRUE, UINT64_MAX)) VKRESULT(vkResetFences(api.context.device, 1, &submission_fences[frame_index])) auto cmd_buf = command_buffers[frame_index]; @@ -167,12 +166,12 @@ vkrenderer::vkrenderer(window& wnd, const input_data& inputs) { api.end_record(cmd_buf); + api.submit(cmd_buf, VK_NULL_HANDLE, VK_NULL_HANDLE, submission_fences[frame_index]); - // VKRESULT(vkWaitForFences(api.context.device, 1, &submission_fences[frame_index], VK_TRUE, UINT64_MAX)) - // VKRESULT(vkResetFences(api.context.device, 1, &submission_fences[frame_index])) + VKRESULT(vkWaitForFences(api.context.device, 1, &submission_fences[frame_index], VK_TRUE, UINT64_MAX)) - // api.destroy_buffer(staging_buffer); + api.destroy_buffer(staging_buffer); frame_index++; @@ -195,11 +194,10 @@ vkrenderer::vkrenderer(window& wnd, const input_data& inputs) { sampler_create_info.borderColor = VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK; sampler_create_info.unnormalizedCoordinates = VK_FALSE; - VkSampler sampler; - VKRESULT(vkCreateSampler(api.context.device, &sampler_create_info, VK_NULL_HANDLE, &sampler)) + VKRESULT(vkCreateSampler(api.context.device, &sampler_create_info, VK_NULL_HANDLE, &ui_texture_sampler)) for (size_t index = 0; index < swapchain.image_count; index++) { - api.update_descriptor_set_image(ui_sets[index], ui_sets_bindings[2], ui_texture.view, sampler); + api.update_descriptor_set_image(ui_sets[index], ui_sets_bindings[2], ui_texture.view, ui_texture_sampler); } ui_vertex_buffers.resize(swapchain.image_count); @@ -224,6 +222,8 @@ vkrenderer::~vkrenderer() { api.destroy_render_pass(render_pass); + vkDestroySampler(api.context.device, ui_texture_sampler, VK_NULL_HANDLE); + api.destroy_image(ui_texture); for (auto& framebuffer: framebuffers) { @@ -254,6 +254,14 @@ void vkrenderer::begin_frame() { ImGui::Render(); ImDrawData* draw_data = ImGui::GetDrawData(); + ((UiTransforms*)ui_transforms_buffers[frame_index].alloc_info.pMappedData)->scale_x = 2.f / draw_data->DisplaySize.x; + ((UiTransforms*)ui_transforms_buffers[frame_index].alloc_info.pMappedData)->scale_y = 2.f / draw_data->DisplaySize.y; + ((UiTransforms*)ui_transforms_buffers[frame_index].alloc_info.pMappedData)->translate_x = -1.f - draw_data->DisplayPos.x * (2.f / draw_data->DisplaySize.x); + ((UiTransforms*)ui_transforms_buffers[frame_index].alloc_info.pMappedData)->translate_y = -1.f - draw_data->DisplayPos.y * (2.f / draw_data->DisplaySize.y); + + VKRESULT(vkWaitForFences(api.context.device, 1, &submission_fences[frame_index], VK_TRUE, UINT64_MAX)) + VKRESULT(vkResetFences(api.context.device, 1, &submission_fences[frame_index])) + // Update descriptor with only the part of the buffer we are interested in if (ui_vertex_buffers[frame_index].size < draw_data->TotalVtxCount * sizeof(VkVertex)) { api.destroy_buffer(ui_vertex_buffers[frame_index]); @@ -267,11 +275,6 @@ void vkrenderer::begin_frame() { ui_index_buffers[frame_index] = api.create_buffer(draw_data->TotalIdxCount * sizeof(ImDrawIdx), VK_BUFFER_USAGE_INDEX_BUFFER_BIT, VMA_MEMORY_USAGE_CPU_TO_GPU); } - ((UiTransforms*)ui_transforms_buffers[frame_index].alloc_info.pMappedData)->scale_x = 2.f / draw_data->DisplaySize.x; - ((UiTransforms*)ui_transforms_buffers[frame_index].alloc_info.pMappedData)->scale_y = 2.f / draw_data->DisplaySize.y; - ((UiTransforms*)ui_transforms_buffers[frame_index].alloc_info.pMappedData)->translate_x = -1.f - draw_data->DisplayPos.x * (2.f / draw_data->DisplaySize.x); - ((UiTransforms*)ui_transforms_buffers[frame_index].alloc_info.pMappedData)->translate_y = -1.f - draw_data->DisplayPos.y * (2.f / draw_data->DisplaySize.y); - off_t vertex_buffer_offset = 0; off_t index_buffer_offset = 0; for (uint32_t draw_list_index = 0; draw_list_index < draw_data->CmdListsCount; draw_list_index++) { @@ -290,10 +293,6 @@ void vkrenderer::begin_frame() { index_buffer_offset += index_buffer.Size; } - - VKRESULT(vkWaitForFences(api.context.device, 1, &submission_fences[frame_index], VK_TRUE, UINT64_MAX)) - VKRESULT(vkResetFences(api.context.device, 1, &submission_fences[frame_index])) - swapchain_image_index = 0; auto acquire_result = vkAcquireNextImageKHR(api.context.device, swapchain.handle, UINT64_MAX, acquire_semaphores[frame_index], VK_NULL_HANDLE, &swapchain_image_index); handle_swapchain_result(acquire_result); diff --git a/src/window.cpp b/src/window.cpp index a353809..320e282 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -335,7 +335,7 @@ LRESULT window::message_handler(HWND hwnd, UINT umsg, WPARAM wparam, LPARAM lpar events.push_back({ .x = GET_X_LPARAM(lparam), .y = GET_Y_LPARAM(lparam), - .type = EVENT_TYPES::MOVE, + .type = EVENT_TYPES::MOUSE_MOVE, }); break; } |
