code wiki / (root) / nx_gltf_normal_descriptor_gate_t281.nx

nx_gltf_normal_descriptor_gate_t281.nx source

↩ module page · 49 lines · 3577 B

1import "nx_gltf_render_descriptor_normal_t281.nx" 2import "nx_fs_create_lib.nx" 3// Synthetic material GLBs test the actual native preparation boundary. 4// Four BIN bytes are a structural image fixture, not a decoded PNG qualification. 5func ng_fixture(label:*u8,material:*u8)->i64{ 6 let pre:*u8="{\"asset\":{\"version\":\"2.0\"},\"buffers\":[{\"byteLength\":4}],\"bufferViews\":[{\"buffer\":0,\"byteLength\":4}],\"images\":[{\"bufferView\":0,\"mimeType\":\"image/png\"}],\"textures\":[{\"source\":0}],\"materials\":[" 7 let post:*u8="]}";let pn:i64=gll_slen(pre);let mn:i64=gll_slen(material);let en:i64=gll_slen(post) 8 let jn:i64=pn+mn+en;let pad:i64=gll_align4(jn);let total:i64=28+pad+4 9 let src:*u8=sys_mmap_try(total);if (src as i64)==0{return 1} 10 glp_u32(src,0,1179937895);glp_u32(src,4,2);glp_u32(src,8,total);glp_u32(src,12,pad);glp_u32(src,16,1313821514) 11 var i:i64=0;while i<pn{src[20+i]=pre[i];i=i+1};i=0;while i<mn{src[20+pn+i]=material[i];i=i+1};i=0;while i<en{src[20+pn+mn+i]=post[i];i=i+1};i=jn;while i<pad{src[20+i]=32 as u8;i=i+1} 12 glp_u32(src,20+pad,4);glp_u32(src,24+pad,5130562);glp_u32(src,28+pad,0) 13 let cb:i64=GLD_CONTEXT_WORDS*__size_of(i64);let cx:*i64=sys_mmap_try(cb) as *i64 14 if (cx as i64)==0{sys_munmap_direct(src,total);return 1} 15 i=0;while i<GLD_CONTEXT_WORDS{cx[i]=0;i=i+1} 16 var rc:i64=gltf_view_open(src,total,cx);let wb:i64=4*__size_of(i64);let w:*i64=sys_mmap_try(wb) as *i64 17 if (w as i64)==0{gltf_view_close(cx);sys_munmap_direct(cx as *u8,cb);sys_munmap_direct(src,total);return 1} 18 i=0;while i<4{w[i]=0;i=i+1} 19 let mat:i64=0 20 if rc==0{rc=gpd_material(w,cx,mat)} 21 let n:i64=w[2];var out:*u8=0 as *u8 22 if rc==0&&w[3]==0&&n>0{ 23 out=sys_mmap_try(n);if (out as i64)==0{rc=-7}else{ 24 w[0]=out as i64;w[1]=n;w[2]=0;w[3]=0;rc=gpd_material(w,cx,mat) 25 if rc==0&&w[3]==0&&w[2]==n{ 26 fsx_puts("{\"case\":\"");fsx_puts(label);fsx_puts("\",\"sourceBytes\":");fsx_putn(total);fsx_puts(",\"material\":");sys_write(1,out,n);fsx_puts("}\n") 27 }else{rc=-1} 28 } 29 }else{rc=-1} 30 if (out as i64)!=0{sys_munmap_direct(out,n)};sys_munmap_direct(w as *u8,wb);gltf_view_close(cx);sys_munmap_direct(cx as *u8,cb);sys_munmap_direct(src,total);return rc 31} 32func main()->i64{ 33 var rc:i64=0 34 rc=rc+ng_fixture("absent","{}") 35 rc=rc+ng_fixture("default","{\"normalTexture\":{\"index\":0}}") 36 rc=rc+ng_fixture("negative-scale","{\"normalTexture\":{\"index\":0,\"scale\":-0.5}}") 37 rc=rc+ng_fixture("zero-scale","{\"normalTexture\":{\"index\":0,\"scale\":0}}") 38 rc=rc+ng_fixture("uv1","{\"normalTexture\":{\"index\":0,\"texCoord\":1}}") 39 rc=rc+ng_fixture("transform","{\"normalTexture\":{\"index\":0,\"extensions\":{\"KHR_texture_transform\":{\"rotation\":0.5}}}}") 40 rc=rc+ng_fixture("unknown-extension","{\"normalTexture\":{\"index\":0,\"extensions\":{\"UNKNOWN_normal\":{}}}}") 41 rc=rc+ng_fixture("string-scale","{\"normalTexture\":{\"index\":0,\"scale\":\"1\"}}") 42 rc=rc+ng_fixture("huge-scale","{\"normalTexture\":{\"index\":0,\"scale\":1e300}}") 43 rc=rc+ng_fixture("missing-image","{\"normalTexture\":{\"index\":1}}") 44 rc=rc+ng_fixture("negative-index","{\"normalTexture\":{\"index\":-1}}") 45 rc=rc+ng_fixture("null-normal","{\"normalTexture\":null}") 46 rc=rc+ng_fixture("null-uv","{\"normalTexture\":{\"index\":0,\"texCoord\":null}}") 47 if ntb_normal_encoding_admit(0,0)!=0||ntb_normal_encoding_admit(1,99)>=0||ntb_normal_encoding_admit(0,2)>=0||ntb_normal_encoding_admit(1,1)!=1||ntb_normal_encoding_admit(1,2)!=2{rc=-1} 48 if rc!=0{fsx_puts("NORMAL-DESCRIPTOR FAIL\n");return 1};fsx_puts("NORMAL-DESCRIPTOR native-fixtures-emitted admission-controls-PASS\n");return 0 49}