subagent transcript
session 18e25685 · workflow wf_23df5b1c
delegated task
You are an adversarial verifier for a FreeCAD-wasm code review. A reviewer claims: SEVERITY: info CATEGORY: material-fidelity FILE: src/Gui/WasmGLFixe
▸ Magik
You are an adversarial verifier for a FreeCAD-wasm code review. A reviewer claims:
SEVERITY: info
CATEGORY: material-fidelity
FILE: src/Gui/WasmGLFixedFunc.cpp
SUMMARY: Only diffuse/ambient-and-diffuse material is honored; specular, emission, shininess and separate ambient are ignored, and CULL_FACE is forced off globally.
DETAIL/EVIDENCE: glMaterialfv maps only GL_DIFFUSE/GL_AMBIENT_AND_DIFFUSE to the base color (lines 295-300); glMaterialf/i are no-ops so shininess/specular are lost. The shader has no specular term (lines 86-91) so surfaces look flat-lit. ff draws force g.disable(CULL_FACE) (lines 189,431) and use two-sided abs(dot) lighting; acceptable for a visible shaded box but means no back-face culling and slightly non-physical shading. glLightfv(GL_POSITION) is stored raw as a direction without transforming by the modelview at call time (lines 309-314) - fine for Coin's eye-space headlight, approximate otherwise. Acceptable for an MVP box.
RECOMMENDATION: (none)
Independently verify by reading the actual file(s) and running git/grep as needed (repo at /home/magik6k/lcad-wasm/freecad-port/FreeCAD, toolchain at /opt/toolchains, deploy at /home/magik6k/lcad-wasm/freecad-port/deploy-gui). Default to REFUTED if you cannot confirm the evidence. Adjust severity to what the evidence actually supports.
Fable
thinking
I should check the actual file to confirm what's being claimed.
Fable
⚙ Read {"file_path": "/home/magik6k/lcad-wasm/freecad-port/FreeCAD/src/Gui/WasmGLFixedFunc.cpp"}
Fable
thinking
I'm checking the file to verify these claims about the material mapping. Lines 295-300 confirm that glMaterialfv only maps GL_DIFFUSE and GL_AMBIENT_AND_DIFFUSE to the base color, and lines 301-302 show that glMaterialf and glMateriali are no-ops, meaning shininess and specular information gets lost in the conversion.
The shader itself has no specular term—just diffuse lighting with two-sided absolute dot product (lines 86-91). The light position is stored raw without modelview transformation (lines 309-314), and separate ambient, specular, and emission properties are all ignored since only GL_DIFFUSE and GL_AMBIENT_AND_DIFFUSE are handled. All the claims check out as accurate limitations o …
Fable
All claims are directly confirmed by the file.
- Lines 295-300: `glMaterialfv` maps only `0x1201` (GL_DIFFUSE) and `0x1602` (GL_AMBIENT_AND_DIFFUSE) to `ffColor4`. GL_SPECULAR (0x1202), GL_EMISSION (0x1600), and separate GL_AMBIENT (0x1200) are silently ignored.
- Lines 301-302: `glMaterialf`/`glMateriali` are empty no-ops, so GL_SHININESS is dropped.
- Lines 86-91: shader lighting is diffuse-only (`0.35 + 0.65*d`), no specular/emission term.
- Line 89: `abs(dot(n, L))` two-sided lighting, confirmed.
- Lines 189, 431: `g.disable(g.CULL_FACE)` in both the array and immediate-mode draw paths.
- Lines 309-314 + 281: `glLightfv(GL_POSITION)` calls `ffLightDir`, which stores `params` raw into `lightDir` with no modelview transform.
The evidence is entirely accurate. It correctly describes real limitations of the fixed-function emulation. These are intentional MVP scoping decisions (the file header explicitly states it covers only the FreeCAD viewport subset), not defects — nothing produces incorrect behavior relative to its stated goal of drawing a shaded box. Info severity is appropriate.
Fable
⚙ StructuredOutput {"verdict": "CONFIRMED", "reason": "Every cited fact is verified in src/Gui/WasmGLFixedFunc.cpp. glMaterialfv (lines 295-300) only maps GL_DIFFUSE (0x1201) and GL_AMBIENT_AND_DIFFUSE (0x1602) to the surface color; GL_SPECULAR, GL_EMISSION a…