nx_nxa_corner_prepare_t280.nx source
↩ module page · 26 lines · 1594 B
1import "nx_nxa_corner_prepare_candidate_t280.nx"
2import "nx_gate_verdict.nx"
3// Callable chart preparation only. Conformal solving/measurement is a later explicit stage;
4// prepared source coverage does not qualify UVs, anatomy, skinning conversion or rendering.
5func main(argc:i64,argv:*i64)->i64{
6 if argc<3{gv_puts("usage: nx_nxa_corner_prepare source.nxa new-output.ncp [seams.i64]\n");return 2}
7 if argc>4{return 2}
8 let lens:*i64=sys_mmap_try(24) as *i64;if (lens as i64)<=0{return 3}
9 let b:*u8=sys_read_file(argv[1] as *u8,lens);if b==(0 as *u8){return 4}
10 let n:i64=lens[0];let m:*i64=ncp_model_nxa(b,n);if m==(0 as *i64){return 5}
11 if argc==4{
12 let s:*u8=sys_read_file(argv[3] as *u8,lens);if s==(0 as *u8){return 6}
13 if lens[0]%8!=0{return 6}
14 let sr:i64=ncp_seams(m,s as *i64,lens[0]/8);if sr!=UV_OK{gv_puts("NCP seam input refused\n");return 6}
15 }
16 let rc:i64=uv_chart_build(m)
17 let p:*u8=ncp_emit(m,b,n,rc,lens);if p==(0 as *u8){return 7}
18 let fd:i64=sys_openat_exclusive(argv[2] as *u8,MODE_0600);if fd<0{return 8}
19 var wrote:i64=0
20 while wrote<lens[0]{let count:i64=sys_write(fd,((p as i64)+wrote) as *u8,lens[0]-wrote);if count<=0{sys_close(fd);return 9};wrote=wrote+count}
21 sys_close(fd)
22 let w:*i64=p as *i64
23 gv_puts("NCP prepared source corners=");gv_num(w[6]);gv_puts(" charts=");gv_num(w[9]);gv_puts(" uvQualifiedCorners=");gv_num(w[10]);gv_puts(" stage=");gv_num(w[7]);gv_puts(" result=");gv_num(rc);gv_puts(" bytes=");gv_num(lens[0]);gv_puts("\n")
24 sys_munmap_direct(p,lens[0]);ncp_model_free(m);sys_munmap_direct(lens as *u8,24)
25 if rc!=UV_OK{return 10};return 0
26}