1872 Commits

Author SHA1 Message Date
Ahmidou Lyazidi
a21461b2e5
Backends: OSX: keep torn-off viewport windows above the main window
Torn-off (secondary) multi-viewport windows now stay above the main window, but not above
other apps. While the app is active they are independent windows at NSFloatingWindowLevel
(above the main window, but not children — so dragging the main window doesn't drag them).
While the app is inactive they become children of the main window at the normal level:
children are occluded together with the app by other apps, and the window server keeps a
child above its parent at all times, so clicking the main window to reactivate can't flash
it over them for a frame. Relative order is preserved across the transitions, and the main
window is brought forward on activation so the whole app comes up as a unit.

Replaces the previous transient parenting (attach-on-create / detach-on-mouse-release in
ImGui_ImplOSX_UpdateWindow, which is removed). ImGui_ImplOSX_RestackSecondaryWindows is
driven from the app activate/deactivate observers; DestroyWindow now detaches a parented
window before hiding it.

Examples: Metal4: resume rendering on app activation (idle-throttle fix)

Cmd-Tab / clicking to reactivate the app doesn't produce a local input event, so the idle
render throttle left the window on the slow heartbeat for up to ~1s after switching back,
which looked like a lag. Bump the render counter on NSApplicationDidBecomeActive so the
window redraws immediately on activation while keeping the idle CPU savings.
2026-09-25 14:33:22 -07:00
Ahmidou Lyazidi
6555153b21 Backends + Examples: Metal4: robust CAMetalLayer multi-viewport on macOS
Rework the Metal 4 backend and example for correct, glitch-free multi-viewport
rendering on macOS, and convert example_apple_metal4 off MTKView.

Backend (imgui_impl_metal4.mm):
- Per-window argument tables so overlapping per-window GPU work within a frame can't
  corrupt each other's bindings (multi-viewport flicker).
- Hold per-slot vertex/index buffers until their frame completes, so a second viewport
  rendered later in the same frame can't overwrite a buffer still in flight (blink).
- Make hand-built render-pass drawables resident, and evict stale (resized-away)
  drawables from the residency set so it can't grow without bound during a live resize.
- Present secondary viewports in-transaction on the frame they were resized so content
  stays glued to the new size (no stutter).

Example (example_apple_metal4/main.mm):
- Replace MTKView with a custom NSView/UIView + CAMetalLayer driven by a display link.
- Proper frames-in-flight: per-slot command allocators, rotating slots, and a semaphore
  gate released on GPU completion via an MTLSharedEvent listener.
- Glitch-free main-window resize: present in-transaction during a live resize, driven by
  AppKit (the display link steps aside) so the transaction commits and drawables aren't
  starved; async present otherwise (avoids a ~1s nextDrawable stall / freeze).
- Idle CPU throttling: only redraw on input/activity plus a slow heartbeat, so the main
  thread sleeps when nothing changes.
2026-09-18 14:35:49 -07:00
ocornut
a2b7d6e792 Merge branch 'master' into docking
# Conflicts:
#	backends/imgui_impl_dx10.cpp
#	backends/imgui_impl_dx12.cpp
#	backends/imgui_impl_metal.mm
#	backends/imgui_impl_metal4.mm
#	backends/imgui_impl_opengl2.cpp
#	backends/imgui_impl_opengl3.cpp
#	backends/imgui_impl_sdlgpu3.cpp
#	backends/imgui_impl_vulkan.cpp
#	imgui.cpp
2026-09-07 19:52:24 +02:00
ocornut
4898533613 Backends: DX10, DX11, DX12, Metal/4, OpenGL2/3, SDLGPU3, Vulkan: round framebuffer dimensions instead of truncating. (#9538, #9515, #8628) 2026-09-07 12:47:03 +02:00
ocornut
7e1b65d26d Merge branch 'master' into docking
# Conflicts:
#	imgui_internal.h
2026-09-02 17:27:51 +02:00
ocornut
4dbb921b22 Examples: disabled /JMC in Visual Studio projects (unnecessary overhead). 2026-09-02 17:15:39 +02:00
ocornut
7e0de0e411 Examples: GLFW/SDL2/SDL3+WebGPU: fixed running with wgpu-native missing wgpuInstanceWaitAny(). (#9377) 2026-08-31 12:30:37 +02:00
ocornut
e44b1129bd Backends, Examples: WebGPU: fixed warnings, renamed .sln, fixed SDL2+WGPU cmakefile. 2026-08-31 12:11:39 +02:00
ocornut
fd13a1e892 Merge branch 'master' into docking
# Conflicts:
#	examples/example_apple_opengl2/main.mm
2026-08-19 13:39:46 +02:00
ocornut
5de45fb1d9 Trim trailing white spaces. Changes some NULL to nullptr. 2026-08-07 16:00:53 +02:00
ocornut
5b6e19bb50 Examples: Apple+OpenGL3: added new example. 2026-08-06 23:10:56 +02:00
ocornut
70e60a3c4c Examples: Apple+OpenGL2: silence warnings.
Example is precisely to demonstrate OpenGL.
2026-08-06 23:01:56 +02:00
ocornut
9c473a34ce Example: GLFW+Metal: fix. 2026-08-06 22:40:28 +02:00
ocornut
cf27a555ad Example: SDL3+Metal: fixed missing multi-viewport support. 2026-08-06 22:02:03 +02:00
ocornut
e236e74206 Merge branch 'master' into docking
# Conflicts:
#	backends/imgui_impl_dx12.cpp
#	backends/imgui_impl_sdl2.cpp
#	examples/example_sdl2_metal/main.mm
#	imgui_internal.h
2026-08-06 21:32:43 +02:00
ocornut
2ddb5fc095 Examples: SDL2+Metal: stop using SDL_CreateRenderer(). (#5592) 2026-08-06 21:28:57 +02:00
ocornut
98f3efcf07 Examples: SDL2+Metal: fixed mismatches with other examples. 2026-08-06 21:19:59 +02:00
ocornut
724c69b182 Backends: SDL2: fixed querying framebuffer scale/density when using Metal. (#5592) 2026-08-06 18:34:33 +02:00
ocornut
11bd4e7731 Merge branch 'master' into docking
# Conflicts:
#	imgui.cpp
2026-08-04 14:34:04 +02:00
ocornut
7c9f0c148c Backends, Examples: QNX: amends. Moved ignore list to main file. Removed .use files. (#9492)
Moved functions in example_qnx_opengl3/main.cpp to match structure of other examples.
2026-08-04 14:20:12 +02:00
Mike Gorchak
40ec568762 Backends+Examples: QNX Screen: added initial QNX support to backends and examples. (#9492) 2026-08-04 14:10:19 +02:00
ocornut
9b4eb24cee Merge branch 'master' into docking 2026-07-25 13:45:27 +02:00
ocornut
d94d0f3649 Examples: SDL+WebGPU: removed stray glfw from cmakefiles. (#9387, #9428) 2026-07-23 18:56:53 +02:00
ocornut
81c008f90d Examples: SDL3+Metal4: fixed bad merge. 2026-07-16 16:28:51 +02:00
Jonathan Hoffstadt
6029ee3789 Examples: Apple+Metal4, SDL3+Metal4: amends for multi-viewport support. (#9466, #9451) 2026-07-10 15:08:29 +02:00
Jonathan Hoffstadt
e95dc87df2 Examples: Apple+Metal4: added example (#9466, #9451)
+ Amend edit to EXAMPLES.md, comment build.xml
2026-07-10 15:08:29 +02:00
Jonathan Hoffstadt
62399b5bfe Examples: Apple + Metal4: add example (#9466, #9451)
+ Amend edit to EXAMPLES.md, comment build.xml
2026-07-08 18:04:30 +02:00
ocornut
a23e9fb1b5 Merge branch 'master' into docking
# Conflicts:
#	imgui.cpp
#	imgui.h
2026-07-08 15:10:22 +02:00
ocornut
776bf2ab0d Examples: OpenGL3+Win32: rework OpenGL initialization to allow Wine compatibility. Fix. (#9427, #6577)
Fixed commented out test code.
2026-07-03 18:59:37 +02:00
ocornut
4f1ea369ea Examples: OpenGL3+Win32: rework OpenGL initialization to allow Wine compatibility. (#9427, #6577) 2026-07-03 18:57:14 +02:00
ocornut
a977144955 Examples: OpenGL3+GLFW,SDL2,SDL3: improve Wine compatibility by passing empty GLSL version to ImGui_ImplOpenGL3_Init(). (#9427, #6577) 2026-07-03 18:57:10 +02:00
ocornut
e616ace74d CI, Backends: Metal4: fixed CI, added comments. (#9458) 2026-07-03 17:48:11 +02:00
ocornut
d098bf9657 Merge branch 'master' into docking
# Conflicts:
#	backends/imgui_impl_glfw.cpp
#	backends/imgui_impl_sdl2.cpp
#	backends/imgui_impl_sdl3.cpp
#	imgui.cpp
#	imgui.h
#	imgui_internal.h
2026-07-03 16:59:31 +02:00
ocornut
6824e2c2e4 Examples: Android: update to AGP 9.2.0 to support Gradle 9.6.0. 2026-07-02 14:26:46 +02:00
ocornut
caddd26fb9 Backends: Metal4: minor tweaks/comments. (#9458, #9451) 2026-07-02 12:09:06 +02:00
Amélie Heinrich
fc6395365d Backends: Metal4: Added Metal 4 backend. Added SDL3+Metal4 example. (#9458, #9451) 2026-07-02 12:00:10 +02:00
ocornut
c66d9a8190 Examples, SDL2/SDL3: use SDL_GetWindowSizeInPixels() to create framebuffers. (#8761, #9124)
+ cc #7433
2026-06-29 11:50:42 +02:00
ocornut
036bf939b6 Merge branch 'master' into docking
# Conflicts:
#	imgui.cpp
#	imgui_internal.h
2026-06-16 15:26:09 +02:00
Oliver Dixon
5220a3f48d
Examples: WebGPU: Require C++20 to build Dawn examples (#9433, #9432) 2026-06-07 09:58:58 +02:00
ocornut
2af6dd9694 Merge branch 'master' into docking
# Conflicts:
#	backends/imgui_impl_opengl3.cpp
#	imgui.cpp
2026-06-04 13:53:55 +02:00
ocornut
fc5e2f28fe Examples: WGPU: fixed typo for wvgk cloning. (#9428, #9387) 2026-06-03 19:24:06 +02:00
ocornut
b61e56346a Merge branch 'master' into docking
# Conflicts:
#	imgui_demo.cpp
2026-05-12 16:43:34 +02:00
manuel
2b31f65167 Examples: WebGPU+GLFW/SDL2/SDL3: wire up the IMGUI_WGVK_DIR path. (#9387)
The block was a stub - find Vulkan, detect Wayland/X11, set the SUPPORT_*_SURFACE defines that wgvk.c needs.
2026-05-11 15:42:16 +02:00
ocornut
310f3c8370 Merge branch 'master' into docking
# Conflicts:
#	backends/imgui_impl_metal.h
#	backends/imgui_impl_metal.mm
#	imgui.cpp
2026-05-06 12:30:38 +02:00
ocornut
e3033c3975 Examples: moving example_win32_directx11 on top of the .sln makes it the default selected project. 2026-04-24 17:38:51 +02:00
ocornut
dee5bf3ec3 Merge branch 'master' into docking
# Conflicts:
#	backends/imgui_impl_dx10.cpp
#	backends/imgui_impl_dx9.cpp
#	backends/imgui_impl_glfw.cpp
#	backends/imgui_impl_metal.mm
#	backends/imgui_impl_opengl2.cpp
#	backends/imgui_impl_opengl3.cpp
#	backends/imgui_impl_vulkan.cpp
#	imgui.cpp
2026-04-23 16:07:01 +02:00
ocornut
4739af2d51 Update VS toolset in all .vcxproj from VS2015 (v140) to VS2017 (v141).
It supports vcpkg.
2026-04-23 15:58:04 +02:00
ocornut
fb308c14ce Remove noise from 0453ae9 + amend comments. (#914) 2026-04-22 14:50:15 +02:00
ocornut
ac261203a5 (Breaking) Backends: Vulkan: redesigned to use separate ImageView + Sampler instead of Combined Image Sampler. (fixes, amends) (#914) 2026-04-22 14:43:44 +02:00
yaz0r
0453ae96e8 (Breaking) Backends: Vulkan: redesigned to use separate ImageView + Sampler instead of Combined Image Sampler. (WIP) (#914) 2026-04-22 14:43:44 +02:00