fix(sdk): click-to-pick fills its view, the camera-controls proof waits for the lock (#527) - #782
Merged
Merged
Conversation
…ends the move the head drops (#527)
…l, and a drift test of the model's call sites (#527)
…slot, a released lock rejects (#527)
…, the model's diffuse text shared by both languages, a matcap's unread base map asks no UV, the lock wait drops both listeners (#527)
…ief map and asks no UV for one, as on WebGPU (#527)
… settle for the lock wait, the verdict labelled from the run (#527)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #527
What changed
The examples proof's remaining causes, fixed where they live.
(0,4,6)→(0,3.2,4.8). It drew 9.3 % on WebGL2 against a bound of 10 %: six small shapes on a thin grid. The ring now fills the view on both backends.scripts/docs-examples-draw.test.tslists it at the tenth on both backends.pointerLocked,tests/browser/support/cameraControlsPage.ts), never by a fixed delay; a released or refused lock rejects. It spends the one move the head drops by design (Engine fixes from the review of 24 Sept.: a failed resolution, lost children, lights, device loss, one raycast #385), then counts four moves out and four back. It checks the pose before the image, each with its own message.Image change, accepted by the CTO: click-to-pick's framing, on both backends. No engine code changes.
For the measurer: the closer framing may hide a WebGL2 divergence, grid lines under a pixel drawn with no antialiasing. Record WebGPU's share next to WebGL2's.
Proof
pnpm run build, thenpnpm run check:changed: 15 pass, 0 fail.pnpm run test:changed: 15 pass, 0 fail.pnpm run validate --group typescript: pass.pnpm run validate --group quick: formatting passes.check-file-linesfails onbackend/types.ts(202 lines) andworld/session/backends.ts(201 lines), both identical to develop after feat(fluids): one GPU particle pool, stepped by a WebGPU compute pass; WebGL2 refused by name until #759 (#420) #776; this branch does not touch them.node scripts/check-pr-size.ts: 49 hand-written lines added.camera/controls/firstPerson.test.ts: the dropped-move test also turns the head back in four moves. The head returns to where it started, and a lost or counted extra move fails it.node tests/browser/test-gpu.ts scripts/docs-examples.browser.tsandtests/browser/renders/native-camera-controls.browser.ts.Local review before push
simplifyskill on the remaining diff, with 4 agents (reuse, simplification, efficiency, altitude). The efficiency agent found nothing to change. Fixed: the new first-person test copied the dropped-move test, so it is folded into it as "a turn and its reverse return the head"; default-backend's loop runs over the runs and names each machine from the run itself;pointerLockedhas onesettlefor both events and still waits on the event, as the CTO's To-do asks. Kept:page.waitForFunctionfor the lock (the To-do asks for an event), and default-backend's message (the CTO's decision, cause on Audit of #438: a second scene model in the engine, witness code and Three.js wording left in the package #457).code-review --fixskill, with five findings and no fix needed. Skipped: a lock refused beforepointerLockedstarts listening hangs until the harness timeout ends the run rather than failing; listening before the press would change a Chrome proof the reviewer cannot run. Also skipped: a move Chrome might send when it grants the lock, which only the measurer's run can confirm; the sparse-list entry, which does not guard the framing (the examples proof does); and two robustness notes that hold under today's asserts and single-canvas page.Closes #527. Nothing underwebgl/,host/surfaceGate.ts,scene/surfaceModel.tsor the WGSL differs from develop. The dropped-move test fails if one move of the reverse is lost or the jump counts (rounding to 6 digits). The framing is an image change accepted by the CTO, proven by the measurer.Not proven / left out
Lead verification
site/examples/click-to-pick.html(camera (0,4,6) → (0,3.2,4.8), framed to fill the view, accepted by the CTO) andscripts/docs-examples-draw.test.ts:52-61(it keeps the tenth on both backends); proved bya sparse example is declared by name and backend under the tenth; every other keeps the tenthand by the measurer on this branch: WebGPU 0.168, WebGL2 0.151, no error, no WebGL2 grid-line loss.tests/browser/support/cameraControlsPage.ts:107(pointerLocked, the lock awaited as an event, a refusal named) andtests/browser/renders/native-camera-controls.browser.ts:127(one move spent for the drop of Engine fixes from the review of 24 Sept.: a failed resolution, lost children, lights, device loss, one raycast #385, the pose checked before the image); proved bythe first move after the lock is granted is dropped: the cursor jump never turns the head, and a turn and its reverse return the headand by the measurer: the proof passes 2 of 2 at d172bb0.tests/browser/renders/default-backend.browser.ts), whose first run is on Audit of #438: a second scene model in the engine, witness code and Three.js wording left in the package #457.webgl/,host/surfaceGate.ts,scene/surfaceModel.tsor the WGSL differs from develop).pointerLockedsearched (no lock-wait helper existed;waitForFunctionwould poll and lose the refusal);machineLabelreused.in reviewset;to measureafter the merge (the click-to-pick thumbnail, the full examples proof). Streaming without holes: rules and objectives for geometry, memory and shadows #483 checklist and CONTRIBUTING.md §Streaming, memory and shadows: no engine path touched.