code wiki / (root) / nx_gltf_fullclip_pose_gate_t321.nx

nx_gltf_fullclip_pose_gate_t321.nx source

↩ module page · 38 lines · 4257 B

1// Arbitrary-time native reference for full authored clip evaluator qualification. 2import "nx_gltf_render_descriptor_candidate_t181.nx" 3import "nx_atomic_rewrite.nx" 4import "nx_itoa_lib.nx" 5func gcp_reference_poses(cx:*i64,animation:i64,skin:i64,position:i64,jointattr:i64,weightattr:i64,times:*i64,samples:i64,w:*i64)->i64{ 6 if samples<=0||(times as i64)<=0{return -1};let st:*i64=cx[5] as *i64;let count:i64=st[5];let sk:i64=gld_nth(cx,0,"skins",skin);if sk<0{return -1};let joints:i64=gli_array(cx,sk,"joints",0) 7 if count<=0||joints<=0||count>GLD_I64_MAX/368||joints>GLD_I64_MAX/128{return -1} 8 let need:i64=count*368;if joints*128>GLD_I64_MAX-need-GLD_VIEW_WORDS*24-72{return -1};let bytes:i64=need+joints*128+GLD_VIEW_WORDS*24+72 9 let mem:*u8=sys_mmap_try(bytes);if (mem as i64)==0{return -7};let parents:*i64=mem as *i64;let local:*i64=(mem as i64+count*8) as *i64;let world:*i64=(local as i64+count*128) as *i64;let done:*i64=(world as i64+count*128) as *i64;let trs:*i64=(done as i64+count*8) as *i64;let flags:*i64=(trs as i64+count*80) as *i64;let masks:*i64=(flags as i64+count*8) as *i64;let palette:*i64=(masks as i64+count*8) as *i64;let pv:*i64=(palette as i64+joints*128) as *i64;let jv:*i64=(pv as i64+GLD_VIEW_WORDS*8) as *i64;let wv:*i64=(jv as i64+GLD_VIEW_WORDS*8) as *i64;let vertex:*i64=(wv as i64+GLD_VIEW_WORDS*8) as *i64;let bounds:*i64=(vertex as i64+24) as *i64 10 var rc:i64=0 11 if gltf_accessor_view(cx,position,st[2],pv)!=0||gltf_accessor_view(cx,jointattr,st[2],jv)!=0||gltf_accessor_view(cx,weightattr,st[2],wv)!=0||gld_parents(cx,count,parents)!=0{rc=-2} 12 gpd_s(w,"{");if gpd_source_identity(w,cx)!=0{sys_munmap_direct(mem,bytes);return -7};gpd_s(w,"\"schema\":\"nishi-native-palette-reference/1\",\"q\":");gpd_n(w,FBB_Q);gpd_s(w,",\"timeQ\":");gpd_n(w,VM_Q30);gpd_s(w,",\"animation\":");gpd_n(w,animation);gpd_s(w,",\"skin\":");gpd_n(w,skin);gpd_s(w,",\"samples\":[") 13 var sample:i64=0 14 while sample<samples&&rc==0{ 15 var i:i64=0;while i<count{flags[i]=gld_node_trs(cx,i,(trs as i64+i*80) as *i64,(local as i64+i*128) as *i64);if flags[i]<0{rc=-2;break};i=i+1};if rc!=0{break} 16 let channels:i64=gld_animate(cx,animation,times[sample],trs,count,masks);if channels<0{rc=-3;break} 17 i=0;while i<count{if flags[i]==0{if gld_trs_matrix((trs as i64+i*80) as *i64,(local as i64+i*128) as *i64)!=0{rc=-4;break}};i=i+1};if rc!=0{break} 18 if gld_world_matrices(count,parents,local,world,done)!=0||gld_skin_palette(cx,skin,world,count,palette,joints)!=joints{rc=-5;break} 19 if sample>0{gpd_s(w,",")};gpd_s(w,"{\"time\":");gpd_i(w,times[sample]);gpd_s(w,",\"channels\":");gpd_n(w,channels);gpd_s(w,",\"palette\":[");i=0 20 while i<joints*16{if i>0{gpd_s(w,",")};gpd_i(w,palette[i]);i=i+1};gpd_s(w,"],\"jointWorld\":[");i=0 21 while i<joints{let at:i64=gld_nth(cx,sk,"joints",i);let tok:*NxJsonTok=cx[2] as *NxJsonTok;glp_reset(tok,cx[0] as *u8,cx[1],at);let sourceNode:i64=gld_uint(tok);if sourceNode<0||sourceNode>=count{rc=-5;break};if i>0{gpd_s(w,",")};gpd_s(w,"[");var axis:i64=0;while axis<3{if axis>0{gpd_s(w,",")};gpd_i(w,world[sourceNode*16+12+axis]);axis=axis+1};gpd_s(w,"]");i=i+1};if rc!=0{break};gpd_s(w,"]}");sample=sample+1 22 } 23 gpd_s(w,"]}");sys_munmap_direct(mem,bytes);if w[3]!=0{return -3};return rc 24} 25func main(argc:i64,argv:*i64)->i64{ 26 if argc!=3{return 2};let ln:*i64=sys_mmap(8) as *i64;let src:*u8=sys_read_file(argv[1] as *u8,ln);if (src as i64)==0{return 3} 27 let cx:*i64=sys_mmap(GLD_CONTEXT_WORDS*8) as *i64;if gltf_view_open(src,ln[0],cx)!=0{return 4} 28 let w:*i64=sys_mmap(32) as *i64;var i:i64=0;while i<4{w[i]=0;i=i+1} 29 let times:*i64=sys_mmap(40) as *i64 30 let duration:i64=1252698752 // Exact retained Tifa source accessor endpoint, Q30 seconds. 31 times[0]=0;times[1]=duration/7;times[2]=duration*3/7;times[3]=duration-1;times[4]=duration 32 if gcp_reference_poses(cx,0,0,0,1,2,times,5,w)!=0{return 5} 33 let n:i64=w[2];let out:*u8=sys_mmap_try(n);if (out as i64)==0{return 6};w[0]=out as i64;w[1]=n;w[2]=0;w[3]=0 34 if gcp_reference_poses(cx,0,0,0,1,2,times,5,w)!=0||w[2]!=n{return 7} 35 if atomic_rewrite_checked(argv[2] as *u8,out,n)!=0{return 8} 36 sys_write(1,"FULL_CLIP_NATIVE_WITNESSES bytes=",32);nxi_out(n);sys_write(1,"\n",1) 37 gltf_view_close(cx);sys_free_file(src,ln[0]);sys_munmap_direct(out,n);return 0 38}