Skip to content

Commit

Permalink
extract renderer assignment from ImGui_ImplVulkan_Init
Browse files Browse the repository at this point in the history
  • Loading branch information
scribam committed Sep 22, 2024
1 parent fea8044 commit a745ba2
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 17 deletions.
2 changes: 1 addition & 1 deletion vita3k/gui/include/gui/functions.h
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ void update_time_app_used(GuiState &gui, EmuEnvState &emuenv, const std::string
void save_notice_list(EmuEnvState &emuenv);

void draw_begin(GuiState &gui, EmuEnvState &emuenv);
void draw_end(GuiState &gui);
void draw_end(GuiState &gui, EmuEnvState &emuenv);
void draw_vita_area(GuiState &gui, EmuEnvState &emuenv);
void draw_ui(GuiState &gui, EmuEnvState &emuenv);

Expand Down
2 changes: 1 addition & 1 deletion vita3k/gui/include/gui/imgui_impl_sdl_vulkan.h
Original file line number Diff line number Diff line change
Expand Up @@ -166,7 +166,7 @@ IMGUI_IMPL_API void ImGui_ImplVulkan_DeleteTexture(ImGui_VulkanState &state, ImT
IMGUI_IMPL_API bool ImGui_ImplVulkan_CreateDeviceObjects(ImGui_VulkanState &state);

// Follow "Getting Started" link and check examples/ folder to learn about using backends!
IMGUI_IMPL_API ImGui_VulkanState *ImGui_ImplVulkan_Init(renderer::State *renderer, ImGui_ImplVulkan_InitInfo* info);
IMGUI_IMPL_API bool ImGui_ImplVulkan_Init(ImGui_VulkanState &state, ImGui_ImplVulkan_InitInfo* info);
IMGUI_IMPL_API void ImGui_ImplVulkan_Shutdown(ImGui_VulkanState &state);
IMGUI_IMPL_API void ImGui_ImplVulkan_NewFrame(ImGui_VulkanState &state);
IMGUI_IMPL_API void ImGui_ImplVulkan_RenderDrawData(ImGui_VulkanState &state, ImDrawData* draw_data, vk::CommandBuffer command_buffer, VkPipeline pipeline = VK_NULL_HANDLE);
Expand Down
8 changes: 5 additions & 3 deletions vita3k/gui/src/gui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -721,6 +721,8 @@ void pre_init(GuiState &gui, EmuEnvState &emuenv) {
ImGui_ImplOpenGL3_Init(nullptr);
ImGui_ImplSDL2_InitForOpenGL(emuenv.window.get(), nullptr);
} else if (emuenv.renderer->current_backend == renderer::Backend::Vulkan) {
gui.imgui_state = std::make_unique<ImGui_VulkanState>();
gui.imgui_state->renderer = emuenv.renderer.get();
ImGui_ImplSDL2_InitForVulkan(emuenv.window.get());
ImGui_ImplVulkan_InitInfo init_info = {};
init_info.Instance = dynamic_cast<renderer::vulkan::VKState &>(*emuenv.renderer).instance;
Expand All @@ -744,7 +746,7 @@ void pre_init(GuiState &gui, EmuEnvState &emuenv) {
}, init_info.Instance);
#endif

gui.imgui_state.reset(ImGui_ImplVulkan_Init(emuenv.renderer.get(), &init_info));
ImGui_ImplVulkan_Init(dynamic_cast<ImGui_VulkanState &>(*gui.imgui_state), &init_info);
ImGui_ImplVulkan_CreateDeviceObjects(dynamic_cast<ImGui_VulkanState &>(*gui.imgui_state));
} else {
LOG_ERROR("Missing ImGui init for backend {}.", static_cast<int>(emuenv.renderer->current_backend));
Expand Down Expand Up @@ -788,10 +790,10 @@ void draw_begin(GuiState &gui, EmuEnvState &emuenv) {
gui.app_selector.icon_async_loader->commit(gui);
}

void draw_end(GuiState &gui) {
void draw_end(GuiState &gui, EmuEnvState &emuenv) {
ImGui::Render();

switch (gui.imgui_state->renderer->current_backend) {
switch (emuenv.renderer->current_backend) {
case renderer::Backend::OpenGL:
return ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData());

Expand Down
9 changes: 3 additions & 6 deletions vita3k/gui/src/imgui_impl_sdl_vulkan.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1241,7 +1241,7 @@ bool ImGui_ImplVulkan_LoadFunctions(PFN_vkVoidFunction(*loader_func)(const ch
return true;
}

ImGui_VulkanState *ImGui_ImplVulkan_Init(renderer::State *renderer, ImGui_ImplVulkan_InitInfo* info)
bool ImGui_ImplVulkan_Init(ImGui_VulkanState &state, ImGui_ImplVulkan_InitInfo* info)
{
//IM_ASSERT(g_FunctionsLoaded && "Need to call ImGui_ImplVulkan_LoadFunctions() if IMGUI_IMPL_VULKAN_NO_PROTOTYPES or VK_NO_PROTOTYPES are set!");

Expand Down Expand Up @@ -1281,12 +1281,9 @@ ImGui_VulkanState *ImGui_ImplVulkan_Init(renderer::State *renderer, ImGui_ImplVu

bd->VulkanInitInfo = *info;

auto *state = new ImGui_VulkanState;
state->renderer = renderer;
ImGui_ImplVulkan_CreateShaderModules(state);

ImGui_ImplVulkan_CreateShaderModules(*state);

return state;
return true;
}

void ImGui_ImplVulkan_Shutdown(ImGui_VulkanState &state)
Expand Down
2 changes: 1 addition & 1 deletion vita3k/interface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,7 @@ bool install_archive_content(EmuEnvState &emuenv, GuiState *gui, const ZipPtr &z
gui::draw_begin(*gui, emuenv);
gui::draw_ui(*gui, emuenv);
gui::draw_reinstall_dialog(&status, *gui, emuenv);
gui::draw_end(*gui);
gui::draw_end(*gui, emuenv);
emuenv.renderer->swap_window(emuenv.window.get());
}
switch (status) {
Expand Down
10 changes: 5 additions & 5 deletions vita3k/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ int main(int argc, char *argv[]) {
if (handle_events(emuenv, gui)) {
gui::draw_begin(gui, emuenv);
gui::draw_initial_setup(gui, emuenv);
gui::draw_end(gui);
gui::draw_end(gui, emuenv);
emuenv.renderer->swap_window(emuenv.window.get());
} else
return QuitRequested;
Expand Down Expand Up @@ -294,7 +294,7 @@ int main(int argc, char *argv[]) {
gui::draw_vita_area(gui, emuenv);
gui::draw_ui(gui, emuenv);

gui::draw_end(gui);
gui::draw_end(gui, emuenv);
emuenv.renderer->swap_window(emuenv.window.get());
FrameMark; // Tracy - Frame end mark for UI rendering loop
} else {
Expand Down Expand Up @@ -381,7 +381,7 @@ int main(int argc, char *argv[]) {
emuenv.renderer->precompile_shader(hash);
gui::draw_pre_compiling_shaders_progress(gui, emuenv, uint32_t(emuenv.renderer->shaders_cache_hashs.size()));

gui::draw_end(gui);
gui::draw_end(gui, emuenv);
emuenv.renderer->swap_window(emuenv.window.get());
}
}
Expand All @@ -405,7 +405,7 @@ int main(int argc, char *argv[]) {
gui::draw_common_dialog(gui, emuenv);
draw_app_background(gui, emuenv);

gui::draw_end(gui);
gui::draw_end(gui, emuenv);
emuenv.renderer->swap_window(emuenv.window.get());
FrameMark; // Tracy - Frame end mark for game loading loop
}
Expand Down Expand Up @@ -439,7 +439,7 @@ int main(int argc, char *argv[]) {
gui::draw_ui(gui, emuenv);
}

gui::draw_end(gui);
gui::draw_end(gui, emuenv);
emuenv.renderer->swap_window(emuenv.window.get());
FrameMark; // Tracy - Frame end mark for game rendering loop
}
Expand Down

0 comments on commit a745ba2

Please sign in to comment.