Terrain edit (VK): brush/selection area overlay not rendered, and edited terrain updates seconds late #235
Labels
No labels
amd
avatars
bug
builder
cannot-reproduce
crash
epic
feature
from-viewer
gl-removal
known-limitation
monitoring
parity
perf
platform
priority
critical
priority
high
priority
low
priority
medium
provenance
rendering
rt
status
in-progress
status
testing
status
up-next
triage
ui
upstream
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
sky_line/Slipstream#235
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Problems (Vulkan)
Causes (from code reading)
1. Tool overlay never drawn
The VK world-overlay block (
llappviewer.cpp,vk_worldOverlays, insidebeginWorldOverlay()/endWorldOverlay()) draws:renderSelections,LLTracker::render3D;LLWorld::renderPropertyLines;LLViewerParcelMgr::render/renderParcelCollision.It never calls the current tool's
render(). LL callsLLToolMgr::getInstance()->getCurrentTool()->render()from the (diverted) GL pipeline path. SoLLToolBrushLand::render()/renderOverlay()(lltoolbrush.cpp), the brush area outline over the land, never runs under VK.Fix: call the current tool's
render()inside the world-overlay scope (world camera loaded, depth test on, no depth write), gated as LL gates it. Check other tools'render()too: the select-land tool's parcel selection and any manip whose 3D render was LL-pipeline-only. Each may need a VK-safe path (immediate-mode through the LLRender backend is fine here).2. Terrain patch re-ingest waits for the sweep
Under VK, terrain geometry is rebuilt by
vkIngestTerrainPatch()(llcleaningest.cpp), straight from the region heightfield. It is only reached from the ingest sweep (sweepIngestObject->PARTITION_TERRAIN). The sweep is time-sliced and drops to 1/8 rate when idle, so an edited patch waits for the cursor to come round: seconds.LL marks edited patches dirty (
LLSurfacePatch::dirtyZ()/LLVOSurfacePatch::dirtyPatch()/dirtyGeom) when height data arrives from the sim (LLSurface::decompressDCTPatch/ layer data) or from the local preview of a brush stroke.Fix: hook the patch-dirty path to push the patch object onto the priority ingest (
LLCleanIngest::noteObjectChanged(patchObj)or a dedicated terrain-dirty queue):captureTerrain's identical-rebuild de-dup.Also check:
rtSlotChanged), or RT shadows lag the new ground.Test