Skip to content

Commit 6a86bfa

Browse files
committed
Use ImGui functions directly in renderer vtables
Remove small per-backend wrapper functions and wire the vtables to the real ImGui functions and existing helpers. Added renderer_noop_wait_idle and a renderer_call_backend_new_frame template in the header to avoid duplicated no-op/new-frame wrappers. Updated Metal, OpenGL and Vulkan backends to use ImGui_Impl* Shutdown/NewFrame directly and to reference existing functions (e.g. platform_glfw_supports_vulkan, imiv_vulkan_screen_capture). This reduces boilerplate and keeps behavior unchanged. Signed-off-by: Vlad <shaamaan@gmail.com>
1 parent 6235eae commit 6a86bfa

4 files changed

Lines changed: 25 additions & 46 deletions

File tree

src/imiv/imiv_renderer.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,12 +131,29 @@ renderer_noop_quiesce_texture_preview_submission(RendererState& renderer_state,
131131
return true;
132132
}
133133

134+
inline bool
135+
renderer_noop_wait_idle(RendererState& renderer_state,
136+
std::string& error_message)
137+
{
138+
(void)renderer_state;
139+
error_message.clear();
140+
return true;
141+
}
142+
134143
inline void
135144
renderer_noop_platform_windows(RendererState& renderer_state)
136145
{
137146
(void)renderer_state;
138147
}
139148

149+
template<void (*Fn)()>
150+
inline void
151+
renderer_call_backend_new_frame(RendererState& renderer_state)
152+
{
153+
(void)renderer_state;
154+
Fn();
155+
}
156+
140157
void
141158
renderer_select_backend(RendererState& renderer_state, BackendKind backend);
142159
BackendKind

src/imiv/imiv_renderer_metal.mm

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2036,8 +2036,6 @@ bool metal_imgui_init(RendererState& renderer_state,
20362036
return true;
20372037
}
20382038

2039-
void metal_imgui_shutdown() { ImGui_ImplMetal_Shutdown(); }
2040-
20412039
void metal_imgui_new_frame(RendererState& renderer_state)
20422040
{
20432041
RendererBackendState* state = backend_state<RendererBackendState>(
@@ -2279,7 +2277,7 @@ bool metal_probe_runtime_support(std::string& error_message)
22792277
metal_cleanup,
22802278
metal_wait_idle,
22812279
metal_imgui_init,
2282-
metal_imgui_shutdown,
2280+
ImGui_ImplMetal_Shutdown,
22832281
metal_imgui_new_frame,
22842282
renderer_framebuffer_size_changed,
22852283
metal_resize_main_window,

src/imiv/imiv_renderer_opengl.cpp

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1634,14 +1634,6 @@ void main()
16341634
renderer_state.backend = nullptr;
16351635
}
16361636

1637-
bool opengl_wait_idle(RendererState& renderer_state,
1638-
std::string& error_message)
1639-
{
1640-
(void)renderer_state;
1641-
error_message.clear();
1642-
return true;
1643-
}
1644-
16451637
bool opengl_imgui_init(RendererState& renderer_state,
16461638
std::string& error_message)
16471639
{
@@ -1661,14 +1653,6 @@ void main()
16611653
return false;
16621654
}
16631655

1664-
void opengl_imgui_shutdown() { ImGui_ImplOpenGL3_Shutdown(); }
1665-
1666-
void opengl_imgui_new_frame(RendererState& renderer_state)
1667-
{
1668-
(void)renderer_state;
1669-
ImGui_ImplOpenGL3_NewFrame();
1670-
}
1671-
16721656
void opengl_prepare_platform_windows(RendererState& renderer_state)
16731657
{
16741658
RendererBackendState* state = backend_state<RendererBackendState>(
@@ -1891,10 +1875,10 @@ void main()
18911875
renderer_clear_backend_window<RendererBackendState>,
18921876
renderer_noop_platform_windows,
18931877
opengl_cleanup,
1894-
opengl_wait_idle,
1878+
renderer_noop_wait_idle,
18951879
opengl_imgui_init,
1896-
opengl_imgui_shutdown,
1897-
opengl_imgui_new_frame,
1880+
ImGui_ImplOpenGL3_Shutdown,
1881+
renderer_call_backend_new_frame<ImGui_ImplOpenGL3_NewFrame>,
18981882
renderer_framebuffer_size_changed,
18991883
renderer_set_framebuffer_size,
19001884
renderer_set_clear_color,

src/imiv/imiv_renderer_vulkan.cpp

Lines changed: 4 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -285,14 +285,6 @@ namespace {
285285
return false;
286286
}
287287

288-
void vulkan_imgui_shutdown() { ImGui_ImplVulkan_Shutdown(); }
289-
290-
void vulkan_imgui_new_frame(RendererState& renderer_state)
291-
{
292-
(void)renderer_state;
293-
ImGui_ImplVulkan_NewFrame();
294-
}
295-
296288
bool vulkan_needs_main_window_resize(RendererState& renderer_state,
297289
int width, int height)
298290
{
@@ -351,21 +343,9 @@ namespace {
351343
frame_present(*vk_state);
352344
}
353345

354-
bool vulkan_screen_capture(ImGuiID viewport_id, int x, int y, int w, int h,
355-
unsigned int* pixels, void* user_data)
356-
{
357-
return imiv_vulkan_screen_capture(viewport_id, x, y, w, h, pixels,
358-
user_data);
359-
}
360-
361-
bool vulkan_probe_runtime_support(std::string& error_message)
362-
{
363-
return platform_glfw_supports_vulkan(error_message);
364-
}
365-
366346
const RendererBackendVTable k_vulkan_vtable = {
367347
BackendKind::Vulkan,
368-
vulkan_probe_runtime_support,
348+
platform_glfw_supports_vulkan,
369349
vulkan_get_viewer_texture_refs,
370350
vulkan_texture_is_loading,
371351
vulkan_create_texture,
@@ -381,16 +361,16 @@ namespace {
381361
vulkan_cleanup,
382362
vulkan_wait_idle,
383363
vulkan_imgui_init,
384-
vulkan_imgui_shutdown,
385-
vulkan_imgui_new_frame,
364+
ImGui_ImplVulkan_Shutdown,
365+
renderer_call_backend_new_frame<ImGui_ImplVulkan_NewFrame>,
386366
vulkan_needs_main_window_resize,
387367
vulkan_resize_main_window,
388368
vulkan_set_main_clear_color,
389369
renderer_noop_platform_windows,
390370
renderer_noop_platform_windows,
391371
vulkan_frame_render,
392372
vulkan_frame_present,
393-
vulkan_screen_capture,
373+
imiv_vulkan_screen_capture,
394374
};
395375

396376
} // namespace

0 commit comments

Comments
 (0)