catbot
97c79c23ee
perf(font): upload only the dirty sub-rect of the glyph atlas ( #51 )
...
FontAtlas::Update re-uploaded the entire 1024x1024 R8 atlas (1 MiB)
whenever a single glyph was rasterized, so warm-up / language-switch /
size-churn cost roughly one full-atlas copy per frame that added a
codepoint.
Accumulate a dirty bounding box (FontAtlas::DirtyRect) in MarkDirty as
glyphs are placed, and copy only that sub-rect. On Vulkan this is a new
ImageVulkan::UpdateRegion: the staging buffer keeps the full atlas row
stride, so bufferRowLength stays the atlas width and bufferOffset points
at the rect origin while imageOffset/imageExtent carve out the rect.
Layout transitions stay whole-image (cheap); only the copy extent
shrinks. WebGPU passes the rect straight to wgpuWriteAtlasRegion, which
already took x/y/w/h.
The freshly-zeroed atlas marks its whole extent dirty in Initialize so
the first Update clears the image once; thereafter every untouched texel
stays the zero it was uploaded as, keeping the image byte-identical to
the staging copy.
Tested: new FontAtlasDirtyRect unit test covers the accumulation /
clamp / lockstep-with-`dirty` math (no GPU needed); HelloUI renders text
correctly on both Vulkan (NVIDIA, validation-clean) and WebGPU.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-16 15:40:37 +00:00
..
Crafter.Graphics-Animation.cppm
cleaned up renderer
2026-03-09 20:10:19 +01:00
Crafter.Graphics-Clipboard.cppm
clipboard
2026-05-19 00:45:22 +02:00
Crafter.Graphics-ComputeShader.cppm
fix(vulkan-rt): configurable recursion depth + per-shader TLAS push for compute ( #21 )
2026-06-03 18:35:39 +00:00
Crafter.Graphics-Decompress.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-DescriptorHeapVulkan.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-DescriptorHeapWebGPU.cppm
webgpu improvements
2026-05-24 13:32:08 +02:00
Crafter.Graphics-Device.cppm
feat(vulkan-rt): BLAS build options — fast-build/fast-trace + in-place refit ( #36 )
2026-06-16 13:37:46 +00:00
Crafter.Graphics-Dom.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-DomEvents.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-Font.cppm
webgpu support
2026-05-18 04:58:52 +02:00
Crafter.Graphics-FontAtlas.cppm
perf(font): upload only the dirty sub-rect of the glyph atlas ( #51 )
2026-06-16 15:40:37 +00:00
Crafter.Graphics-ForwardDeclarations.cppm
rendertargetvulkan
2026-04-11 18:48:00 +02:00
Crafter.Graphics-Gamepad.cppm
new input system
2026-05-12 00:24:48 +02:00
Crafter.Graphics-GraphicsTypes.cppm
webgpu support
2026-05-18 04:58:52 +02:00
Crafter.Graphics-Image2D.cppm
feat(webgpu): HDR post-process primitives — float textures, storage-texture bindings, RESOLVE→HDR target ( #27 )
2026-06-09 12:55:14 +00:00
Crafter.Graphics-ImageVulkan.cppm
perf(font): upload only the dirty sub-rect of the glyph atlas ( #51 )
2026-06-16 15:40:37 +00:00
Crafter.Graphics-Input.cppm
new input system
2026-05-12 00:24:48 +02:00
Crafter.Graphics-InputField.cppm
webgpu improvements
2026-05-24 13:32:08 +02:00
Crafter.Graphics-Keys.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-Mesh.cppm
feat(rt): BuildProcedural/RefitProcedural from a device AABB buffer ( #37 )
2026-06-16 14:12:04 +00:00
Crafter.Graphics-PipelineRTVulkan.cppm
fix(vulkan-rt): configurable recursion depth + per-shader TLAS push for compute ( #21 )
2026-06-03 18:35:39 +00:00
Crafter.Graphics-PipelineRTWebGPU.cppm
feat(webgpu): HDR post-process primitives — float textures, storage-texture bindings, RESOLVE→HDR target ( #27 )
2026-06-09 12:55:14 +00:00
Crafter.Graphics-PlainComputeShader.cppm
webgpu improvements
2026-05-24 13:32:08 +02:00
Crafter.Graphics-RenderingElement3D.cppm
tlas build options
2026-06-16 15:49:17 +02:00
Crafter.Graphics-RenderPass.cppm
webgpu support
2026-05-18 04:58:52 +02:00
Crafter.Graphics-Router.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-RT.cppm
feat(webgpu-rt): add intersection stage, procedural hit group, AABB BLAS API
2026-06-02 22:09:14 +00:00
Crafter.Graphics-RTPass.cppm
feat(webgpu-rt): atomic pixel accumulator + raysPerPixel for >1 ray/pixel/bounce ( #30 )
2026-06-09 22:45:25 +00:00
Crafter.Graphics-SamplerVulkan.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-ShaderBindingTableVulkan.cppm
fix(vulkan-rt): configurable recursion depth + per-shader TLAS push for compute ( #21 )
2026-06-03 18:35:39 +00:00
Crafter.Graphics-ShaderBindingTableWebGPU.cppm
feat(webgpu-rt): add intersection stage, procedural hit group, AABB BLAS API
2026-06-02 22:09:14 +00:00
Crafter.Graphics-ShaderVulkan.cppm
fix(vulkan-rt): configurable recursion depth + per-shader TLAS push for compute ( #21 )
2026-06-03 18:35:39 +00:00
Crafter.Graphics-Types.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-UI.cppm
webgpu improvements
2026-05-24 13:32:08 +02:00
Crafter.Graphics-UIComponents.cppm
webgpu support
2026-05-18 04:58:52 +02:00
Crafter.Graphics-VulkanBuffer.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-VulkanTransition.cppm
browser DOM support
2026-05-18 02:07:48 +02:00
Crafter.Graphics-WebGPU.cppm
feat(rt): BuildProcedural/RefitProcedural from a device AABB buffer ( #37 )
2026-06-16 14:12:04 +00:00
Crafter.Graphics-WebGPUBuffer.cppm
webgpu improvements
2026-05-24 13:32:08 +02:00
Crafter.Graphics-WebGPUComputeShader.cppm
feat(webgpu): HDR post-process primitives — float textures, storage-texture bindings, RESOLVE→HDR target ( #27 )
2026-06-09 12:55:14 +00:00
Crafter.Graphics-Window.cppm
Merge pull request 'perf(window): drop dead present-mode queries from swapchain recreate ( #45 )' ( #79 ) from claude/issue-45 into master
2026-06-16 17:29:00 +02:00
Crafter.Graphics.cppm
webgpu improvements
2026-05-24 13:32:08 +02:00