Skip to content

Commit

Permalink
Fixes a rather nasty bug w.r.t. the input lambda used in `imgui_man…
Browse files Browse the repository at this point in the history
…ager::update()`, which has led to a lot of useless copying. Also entered characters were not properly passed on in ImGui via `input().entered_characters()`.

Furthermore, some formatting fixes/improvements.
  • Loading branch information
johannesugb committed May 24, 2023
1 parent b15af18 commit 1a6da88
Showing 1 changed file with 15 additions and 13 deletions.
28 changes: 15 additions & 13 deletions auto_vk_toolkit/src/imgui_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,19 +50,20 @@ namespace avk
// allocate more than one descriptor set, therefore setting this to 1 should be sufficient.
const uint32_t magicImguiFactor = 1;
auto allocRequest = avk::descriptor_alloc_request{};
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eSampler, magicImguiFactor });
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eSampler, magicImguiFactor });
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eCombinedImageSampler, std::max(magicImguiFactor, 32u) }); // User could alloc several of these via imgui_manager::get_or_create_texture_descriptor
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eSampledImage, magicImguiFactor });
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eStorageImage, magicImguiFactor });
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eUniformTexelBuffer, magicImguiFactor });
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eStorageTexelBuffer, magicImguiFactor });
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eUniformBuffer, magicImguiFactor });
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eStorageBuffer, magicImguiFactor });
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eSampledImage, magicImguiFactor });
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eStorageImage, magicImguiFactor });
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eUniformTexelBuffer, magicImguiFactor });
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eStorageTexelBuffer, magicImguiFactor });
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eUniformBuffer, magicImguiFactor });
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eStorageBuffer, magicImguiFactor });
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eUniformBufferDynamic, magicImguiFactor }); // TODO: Q1: Is this really required? Q2: Why is the type not abstracted through avk::binding?
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eStorageBufferDynamic, magicImguiFactor }); // TODO: Q1: Is this really required? Q2: Why is the type not abstracted through avk::binding?
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eInputAttachment, magicImguiFactor });
allocRequest.add_size_requirements(vk::DescriptorPoolSize{ vk::DescriptorType::eInputAttachment, magicImguiFactor });
allocRequest.set_num_sets(static_cast<uint32_t>(allocRequest.accumulated_pool_sizes().size() * magicImguiFactor));
mDescriptorPool = context().create_descriptor_pool(allocRequest.accumulated_pool_sizes(), allocRequest.num_sets());;
mDescriptorPool = avk::context().create_descriptor_pool(allocRequest.accumulated_pool_sizes(), allocRequest.num_sets());
mDescriptorPool = context().create_descriptor_pool(allocRequest.accumulated_pool_sizes(), allocRequest.num_sets());

// DescriptorSet chache for user textures
mImTextureDescriptorCache = context().create_descriptor_cache("imgui_manager's texture descriptor cache");
Expand Down Expand Up @@ -122,13 +123,13 @@ namespace avk
construct_render_pass(); // reconstruct render pass
restartImGui();
ImGui::NewFrame(); // got to start a new frame since ImGui::Render is next
});
});
}
mUpdater->on(avk::concurrent_frames_count_changed_event(wnd)).invoke([restartImGui]() {
ImGui::EndFrame(); //end previous (not rendered) frame
restartImGui();
ImGui::NewFrame(); // got to start a new frame since ImGui::Render is next
});
});

// Init it:
ImGui_ImplVulkan_Init(&init_info, mRenderpass->handle());
Expand All @@ -145,7 +146,7 @@ namespace avk
#if defined(_WIN32)
context().dispatch_to_main_thread([]() {
ImGui::GetMainViewport()->PlatformHandleRaw = (void*)glfwGetWin32Window(context().main_window()->handle()->mHandle);
});
});
#endif

// Upload fonts:
Expand All @@ -163,7 +164,8 @@ namespace avk

if (mUserInteractionEnabled) {
// Cursor position:
static const auto input = []() { return composition_interface::current()->input(); };
static const auto input = []() -> input_buffer& { return composition_interface::current()->input(); };

const auto cursorPos = input().cursor_position();
io.AddMousePosEvent(static_cast<float>(cursorPos.x), static_cast<float>(cursorPos.y));

Expand Down

0 comments on commit 1a6da88

Please sign in to comment.