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}