code wiki / (root) / nx_gltf_pose_packet_gate_t316.nx

nx_gltf_pose_packet_gate_t316.nx source

↩ module page · 33 lines · 2572 B

1import "nx_gltf_pose_packet_t316.nx" 2import "nx_syscalls.nx" 3func gpat_put(s:*u8)->i64{var n:i64=0;while s[n]!=0 as u8{n=n+1};return sys_write(1,s,n)} 4func main(argc:i64,argv:*i64)->i64{ 5 if argc<1||argc>3{return 2} 6 var packet_path:*u8="knowledge/fixtures/gltf_pose_packet_t316_v1.bin" 7 var reference_path:*u8="knowledge/fixtures/gltf_pose_reference_t316_v1.bin" 8 if argc==3{packet_path=argv[1] as *u8;reference_path=argv[2] as *u8} 9 let probe_len:*i64=sys_mmap(16) as *i64;let probe:*i64=sys_read_file(packet_path,probe_len) as *i64 10 if probe_len[0]<=0{packet_path="buildroot/knowledge/fixtures/gltf_pose_packet_t316_v1.bin";reference_path="buildroot/knowledge/fixtures/gltf_pose_reference_t316_v1.bin"}else{sys_free_file(probe,probe_len[0])} 11 let ps:*i64=sys_mmap(16) as *i64;let p:*i64=sys_read_file(packet_path,ps) as *i64 12 let rs:*i64=sys_mmap(16) as *i64;let ref:*i64=sys_read_file(reference_path,rs) as *i64 13 if (p as i64)<=0||(ref as i64)<=0||ps[0]%8!=0||rs[0]%8!=0||ps[0]<160||rs[0]<16{return 2} 14 let pw:i64=ps[0]/8;let samples:i64=ref[0];let joints:i64=ref[1];let ow:i64=joints*16 15 if joints!=p[4]||samples<=0||samples>(rs[0]/8-2)/(ow+1)||rs[0]/8!=2+samples*(ow+1){return 2} 16 let ww:i64=gltf_pose_work_words(p[3]);if ww<=0{return 2} 17 let work:*i64=sys_mmap(ww*8) as *i64;let out:*i64=sys_mmap(ow*8) as *i64 18 var i:i64=0;while i<samples{let pos:i64=2+i*(ow+1);let time:i64=ref[pos] 19 let rc:i64=gpa_frame(p,pw,time,0,work,ww,out,ow);if rc!=joints{gpat_put("POSE-REFERENCE evaluator refused\n");return 3} 20 var j:i64=0;while j<ow{if out[j]!=ref[pos+1+j]{gpat_put("POSE-REFERENCE matrix mismatch\n");return 4};j=j+1};i=i+1 21 } 22 if gpa_frame(p,pw,p[6],1,work,ww,out,ow)!=joints{return 5} 23 i=0;while i<ow{if out[i]!=ref[3+i]{gpat_put("POSE-LOOP duration mismatch\n");return 5};i=i+1} 24 let pos:i64=2+(ow+1);if gpa_frame(p,pw,p[6]+ref[pos],1,work,ww,out,ow)!=joints{return 5} 25 i=0;while i<ow{if out[i]!=ref[pos+1+i]{gpat_put("POSE-LOOP offset mismatch\n");return 5};i=i+1} 26 if gpa_frame(p,pw,-1,0,work,ww,out,ow)>=0{return 6} 27 if gpa_frame(p,pw,0,0,work,ww-1,out,ow)>=0{return 6} 28 if gpa_frame(p,pw,0,0,work,ww,out,ow-1)>=0{return 6} 29 let saved:i64=p[p[9]];p[p[9]]=0;let bad:i64=gpa_frame(p,pw,0,0,work,ww,out,ow);p[p[9]]=saved;if bad>=0{return 6} 30 let track:i64=p[15];let oldoff:i64=p[track+4];p[track+4]=pw;let badspan:i64=gpa_frame(p,pw,0,0,work,ww,out,ow);p[track+4]=oldoff;if badspan>=0{return 6} 31 gpat_put("GLTF-PACKET PASS native full-source matrices exact at all reference times; duration and offset wrap exact; five negative boundaries refused\n") 32 return 0 33}