CNA-BUG-243: docs/gltf-limitations.md says CNA reverses the winding of mirrored glTF placements; the importer leaves it unchanged

CNA snapshot 009d40f5  ·  Known Issues › Current bugs  ·  source links pinned to 009d40f5

✓

Evidence basis: source-verified at the pinned commit; tests exist (not executed for this page). Claims on this page were checked by reading the CNA source at commit 009d40f5; unless a sentence says otherwise, nothing here was built or executed. Nothing on this page was executed unless the Evidence section says so.

The limitations table's mirrored-transform row says 'CNA reverses it and marks the placement', while ContentManager.cpp, the import report (mirrored-winding-unapplied) and GltfMirroringTests.cpp all establish that the winding is not reversed.

Identifier
CNA-BUG-243
Category
Bug
Subsystem
Documentation & release tooling
Status
Open
Verified against
CNA 009d40f5 (009d40f5dd085c4e674d3479675fac84b12b3e0a)
Severity
Low (a triage suggestion, not a project priority)
Evidence basis
Source-verified: read at TARGET, not executed
Tests touching this area
Yes: see Current tests
Affected contract
docs/gltf-limitations.md (section 2, the 'A mirrored node transform' row)

Expected behaviour

CNA's limitations document is the authority an asset author reads to learn what the importer does.

Actual behaviour at TARGET

The row in gltf-limitations.md reads: “… §3.7.4 requires the winding to be reversed for front faces to stay front-facing. CNA reverses it and marks the placement, rather than leaving the model inside-out.” The code does the opposite: ContentManager.cpp warns that “CNA does not reverse the triangle winding for it”, GltfImportCore.cpp reports mirrored-winding-unapplied, and GltfMirroringTests.cpp states that CNA “carries the fact rather than applying it”. The same document's material-state table and docs/gltf-conventions.md correctly leave the reversal to the application.

Source locations

Evidence

Checked by reading at 009d40f5; not executed.

Independent re-verification: Checked by reading at 009d40f5; not executed. Only detection and reporting consume mirroredEXT; no draw path reverses culling. gltf-limitations.md is under a partial mechanical gate: GltfLimitationsDoc.EveryReportFieldNamedHereExistsInTheHeader checks that the row's report field (mirroredEXT) is declared, and GltfMirroringTests pins detection through hierarchies and untouched shared buffers, but nothing checks the row's prose, so the false claim that CNA reverses the winding is not caught. CNA-GAP-038 tracks the missing reversal itself.

Focused reproduction

No focused reproduction is known. Nothing has been invented here; the evidence above is what exists.

Current tests

None; documentation is not tested.

Regression test

Correct the row to say the placement is reported (mirrored-winding-unapplied) and the cull reversal is left to the application.

Blast radius

Readers of the limitations document, who are told mirrored meshes render correctly when they render back-facing (CNA-GAP-038).

Workaround

No workaround is known.

The same subject is explained at several altitudes. These are the neighbouring pages at each one.

Known issues
Bug index