Crafter.Graphics/interfaces
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Jorijn van der Graaf 670df31cc6
fix(wayland): open windows on compositors without xdg-decoration, viewporter or fractional scale
Window
- The constructor made a fractional scale, a toplevel decoration and a
  viewport from Device::fractionalScaleManager, Device::manager and
  Device::wpViewporter without looking at them. Device::handle_global
  binds those globals only when the compositor advertises them, and
  Initialize requires only wl_shm, wl_compositor and xdg_wm_base, so on a
  compositor without one of the three (GNOME's Mutter has no
  xdg-decoration) the constructor handed libwayland a null proxy and
  crashed before the window existed (#162). Each object is now made only
  when its global is there, which Resize and the destructor already
  assumed.
- The fractional scale needs the viewporter too: the preferred scale is
  applied through the viewport, which shows the buffer's physical pixels at
  width/scale x height/scale. A surface without a viewport is as large as
  its buffer, so there the scale stays 1, which keeps pointer and touch
  positions, configure sizes and the text-input caret, all converted by
  it, in physical pixels; the compositor scales the window up on a HiDPI
  output. A scale that changes after the constructor is still applied only
  by the next resize, which is #165.
- Without xdg-decoration the window has no title bar, since the library
  draws no client-side decorations.

Device
- The optional globals say they are optional, and that a request on a
  null proxy crashes.

Tests
- WindowOptionalGlobals: hides xdg-decoration, wp_viewporter and
  wp_fractional_scale_v1 from the Window one at a time and all at once,
  by nulling the Device statics after Initialize, and renders, resizes
  and closes a window each time without a protocol error. Before the fix
  it crashed on the window without xdg-decoration. A global the compositor
  does not offer is reported as a SKIP line, since the path that uses it
  goes untested there.

README
- Which Wayland protocols the window needs, and what it does without the
  optional ones.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-31 09:59:13 +01:00
..
Crafter.Graphics-Animation.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-Clipboard.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-ComputeShader.cppm feat: windows on their own clock, deferred deletion for every handle owner, staged re-uploads, and RTPass push data 2026-10-20 20:20:29 +02:00
Crafter.Graphics-Decompress.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-DescriptorHeapVulkan.cppm feat: windows on their own clock, deferred deletion for every handle owner, staged re-uploads, and RTPass push data 2026-10-20 20:20:29 +02:00
Crafter.Graphics-DescriptorHeapWebGPU.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-Device.cppm fix(wayland): open windows on compositors without xdg-decoration, viewporter or fractional scale 2026-10-31 09:59:13 +01:00
Crafter.Graphics-Dom.cppm wasm improvements 2026-08-05 04:08:13 +02:00
Crafter.Graphics-DomEvents.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-Font.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-FontAtlas.cppm fix(font-atlas): wait for the GPU before the image goes; DOM stubs for SetAppId and SetTextInput 2026-10-18 03:28:11 +02:00
Crafter.Graphics-ForwardDeclarations.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-Gamepad.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-GraphicsTypes.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-Image2D.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-ImageVulkan.cppm feat: windows on their own clock, deferred deletion for every handle owner, staged re-uploads, and RTPass push data 2026-10-20 20:20:29 +02:00
Crafter.Graphics-Input.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-InputField.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-Keys.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-Mesh.cppm feat: windows on their own clock, deferred deletion for every handle owner, staged re-uploads, and RTPass push data 2026-10-20 20:20:29 +02:00
Crafter.Graphics-PipelineRTVulkan.cppm feat: windows on their own clock, deferred deletion for every handle owner, staged re-uploads, and RTPass push data 2026-10-20 20:20:29 +02:00
Crafter.Graphics-PipelineRTWebGPU.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-PlainComputeShader.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-RenderingElement3D.cppm fix(rt): rebuild TLASes in place, after earlier traces, and queue their handles like a Mesh's 2026-10-31 02:32:48 +01:00
Crafter.Graphics-RenderPass.cppm feat: windows on their own clock, deferred deletion for every handle owner, staged re-uploads, and RTPass push data 2026-10-20 20:20:29 +02:00
Crafter.Graphics-Router.cppm wasm improvements 2026-08-05 04:08:13 +02:00
Crafter.Graphics-RT.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-RTPass.cppm feat: windows on their own clock, deferred deletion for every handle owner, staged re-uploads, and RTPass push data 2026-10-20 20:20:29 +02:00
Crafter.Graphics-SamplerVulkan.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-ShaderBindingTableVulkan.cppm feat(vulkan): run the compute/UI path without VK_EXT_descriptor_heap 2026-10-06 17:28:46 +02:00
Crafter.Graphics-ShaderBindingTableWebGPU.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-ShaderVulkan.cppm feat(device): applications ask for the device features their shaders use 2026-10-31 06:40:02 +01:00
Crafter.Graphics-Types.cppm feat(wayland): text input through zwp_text_input_v3 2026-10-18 01:57:09 +02:00
Crafter.Graphics-UI.cppm feat: windows on their own clock, deferred deletion for every handle owner, staged re-uploads, and RTPass push data 2026-10-20 20:20:29 +02:00
Crafter.Graphics-UIComponents.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-VulkanBuffer.cppm feat: windows on their own clock, deferred deletion for every handle owner, staged re-uploads, and RTPass push data 2026-10-20 20:20:29 +02:00
Crafter.Graphics-VulkanTransition.cppm feat(vulkan): run the compute/UI path without VK_EXT_descriptor_heap 2026-10-06 17:28:46 +02:00
Crafter.Graphics-WebGPU.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-WebGPUBuffer.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-WebGPUComputeShader.cppm SPDX license update 2026-07-22 18:09:06 +02:00
Crafter.Graphics-Window.cppm fix(win32): restore mouse moves, add enter and leave, capture drags, and close and destroy windows cleanly 2026-10-31 03:29:50 +01:00
Crafter.Graphics.cppm SPDX license update 2026-07-22 18:09:06 +02:00