bugfix(treebuffer): Fix crash in W3DTreeBuffer::updateVertexBuffer()#2526
bugfix(treebuffer): Fix crash in W3DTreeBuffer::updateVertexBuffer()#2526xezon merged 3 commits intoTheSuperHackers:mainfrom
Conversation
|
| Filename | Overview |
|---|---|
| Core/GameEngineDevice/Source/W3DDevice/GameClient/W3DTreeBuffer.cpp | Correct fix: resets bufferNdx to -1 before rebuild, adds null VB guard with continue, consolidates mesh checks, and replaces silent type=0 fallback with DEBUG_ASSERTCRASH |
Sequence Diagram
sequenceDiagram
participant LT as loadTreesInVertexAndIndexBuffers
participant Tree as m_trees[t]
participant UV as updateVertexBuffer
LT->>Tree: Reset all bufferNdx = -1
loop For each visible tree with valid mesh
LT->>Tree: Set bufferNdx = bNdx, firstIndex = startVertex
end
Note over LT,Tree: Trees absent from rebuild keep bufferNdx = -1
UV->>UV: Lock vertex buffer[bNdx]
alt Lock fails (vb == null)
UV->>UV: continue to next bNdx
else Lock succeeds
loop For each tree
UV->>Tree: Check bufferNdx != bNdx?
alt bufferNdx == -1 (absent/deleted)
UV->>UV: skip (continue)
else bufferNdx matches
UV->>Tree: Write push-aside vertices at firstIndex
end
end
end
Reviews (4): Last reviewed commit: "implemented review feedback" | Re-trigger Greptile
replaced break with continue
|
Undrafted, thought I ran into regression, but this happened on weekly as well. Ready for review. |
Fixes a crash in W3DTreeBuffer::updateVertexBuffer caused by stale bufferNdx/firstIndex values from a previous vertex buffer rebuild. When a tree was pushed aside after the buffer layout changed, the old offset was used to write into the wrong location. Additional guards were added for failed vertex buffer locks and missing tree meshes.
Fixes Air force general challenge 2 easy on 1280 x 960 with raised camera height (or anywhere there is massive tree culling)