nx_morf_draw_core_gate.nx source
↩ module page · 72 lines · 4292 B
1// ORIGINAL. Canonical geometry independently fixes the expected normal direction.
2import "nx_syscalls.nx"
3import "nx_gate_verdict.nx"
4import "nx_morf_draw_core.nx"
5
6func mrdg_equal(a: *i64, b: *i64, n: i64) -> i64 {
7 var i: i64 = 0
8 while i < n { if a[i] != b[i] { return 0 }; i = i+1 }
9 return 1
10}
11func main() -> i64 {
12 let ctr: *i64 = gv_ctr()
13 gv_head("MORF draw composes shared geometric normals" as *u8)
14 let v: *MvcView = sys_mmap(__size_of(MvcView)) as *MvcView
15 let a: *MrdAsset = sys_mmap(__size_of(MrdAsset)) as *MrdAsset
16 let bind: *i64 = sys_mmap(9*8) as *i64
17 let face: *i64 = sys_mmap(8) as *i64
18 let delta: *i64 = sys_mmap(3*8) as *i64
19 let tri: *i64 = sys_mmap(3*8) as *i64
20 let bn: *i64 = sys_mmap(9*8) as *i64
21 let weights: *i64 = sys_mmap(8) as *i64
22 let pos: *i64 = sys_mmap(9*8) as *i64
23 let norm: *i64 = sys_mmap(9*8) as *i64
24 let pos2: *i64 = sys_mmap(9*8) as *i64
25 let norm2: *i64 = sys_mmap(9*8) as *i64
26 var i: i64 = 0
27 while i < 9 { bind[i] = 0; bn[i] = 0; i = i+1 }
28 bind[3] = 100; bind[7] = 100
29 bn[2] = 1000; bn[5] = 1000; bn[8] = 1000
30 face[0] = 2; delta[0] = 0; delta[1] = 0; delta[2] = 100
31 tri[0] = 0; tri[1] = 1; tri[2] = 2; weights[0] = 1000
32 v.bind = bind; v.bind_words = 9; v.face = face; v.face_words = 1
33 v.delta = delta; v.delta_words = 3; v.vertices = 3; v.faces = 1; v.channels = 1; v.unit = 1000
34 a.morph = v; a.triangles = tri; a.triangle_words = 3; a.bind_normals = bn; a.normal_words = 9
35 gv_check_eq("one vertex morphs before normal generation" as *u8,mrd_prepare(a,weights,1,pos,9,norm,9),1,ctr)
36 gv_check_eq("morphed z" as *u8,pos[8],100,ctr)
37 gv_check_eq("normal x" as *u8,norm[0],0,ctr)
38 gv_check_eq("normal y analytical negative diagonal" as *u8,norm[1],0-707,ctr)
39 gv_check_eq("normal z analytical positive diagonal" as *u8,norm[2],707,ctr)
40 gv_check_eq("shared vertex gets same plane normal" as *u8,norm[7],0-707,ctr)
41 gv_check_eq("repeat preparation" as *u8,mrd_prepare(a,weights,1,pos2,9,norm2,9),1,ctr)
42 gv_check("repeat geometry exact" as *u8,mrdg_equal(pos,pos2,9),ctr)
43 gv_check("repeat normals exact" as *u8,mrdg_equal(norm,norm2,9),ctr)
44 weights[0] = 0
45 // Deliberately noncanonical incumbent normal proves the zero path copies it,
46 // rather than silently replacing the consumer's established representation.
47 bn[2] = 777
48 gv_check_eq("zero entity moves nothing" as *u8,mrd_prepare(a,weights,1,pos2,9,norm2,9),0,ctr)
49 gv_check("zero geometry is bind" as *u8,mrdg_equal(pos2,bind,9),ctr)
50 gv_check("zero retains incumbent normals exactly" as *u8,mrdg_equal(norm2,bn,9),ctr)
51 gv_check_eq("first entity normal remains isolated" as *u8,norm[2],707,ctr)
52 weights[0] = 1000
53 gv_check_eq("normal output may not alias positions" as *u8,mrd_prepare(a,weights,1,pos,9,pos,9),MRD_E_ALIAS,ctr)
54 tri[2] = 3
55 gv_check_eq("invalid triangle is refused before normal owner" as *u8,mrd_prepare(a,weights,1,pos2,9,norm2,9),MRD_E_TRIANGLE,ctr)
56 tri[2] = 2
57 delta[2] = 1000000000
58 gv_check_eq("unsafe normal arithmetic gets named refusal" as *u8,mrd_prepare(a,weights,1,pos2,9,norm2,9),MRD_E_NORMAL_RANGE,ctr)
59 delta[2] = 100
60 tri[0] = 0; tri[1] = 0; tri[2] = 0
61 gv_check_eq("degenerate geometry has defined shared fallback" as *u8,mrd_prepare(a,weights,1,pos2,9,norm2,9),1,ctr)
62 gv_check_eq("fallback y is named inherited value" as *u8,norm2[1],VN_FALLBACK_Y,ctr)
63 gv_check_eq("fallback z is named inherited value" as *u8,norm2[2],VN_FALLBACK_Z,ctr)
64 gv_check_eq("empty geometry envelope avoids division" as *u8,mrd_normal_envelope(0 as *i64,0 as *i64,0,0),0,ctr)
65 a.triangle_words = 0
66 gv_check_eq("morphed point cloud has finite shared fallback" as *u8,mrd_prepare(a,weights,1,pos2,9,norm2,9),1,ctr)
67 gv_check_eq("point cloud fallback y" as *u8,norm2[1],VN_FALLBACK_Y,ctr)
68 v.channels = 0; v.faces = 0; v.face_words = 0; v.delta_words = 0
69 gv_check_eq("absent MORF retains geometry" as *u8,mrd_prepare(a,0 as *i64,0,pos2,9,norm2,9),0,ctr)
70 gv_check("absent MORF retains every incumbent normal" as *u8,mrdg_equal(norm2,bn,9),ctr)
71 return gv_verdict("NX-MORF-DRAW-CORE" as *u8,ctr,"shared normals, ownership, range refusal and exact inactive path" as *u8)
72}