code wiki / (root) / nx_game_normal_encoding_emit.nx

nx_game_normal_encoding_emit.nx source

↩ module page · 11 lines · 1594 B

1// Browser binding adapter. Encoding identities and admission belong to the native contract. 2import "nx_normal_encoding_contract.nx" 3func gpe_normal_encoding_runtime(out:*u8,pos:i64)->i64{ 4 let native:i64=ntb_normal_encoding_admit(1,NTB_NORMAL_ENCODING_NATIVE_MID_SCALE) 5 let gltf:i64=ntb_normal_encoding_admit(1,NTB_NORMAL_ENCODING_GLTF_UNORM) 6 if native<=0||gltf<=0{gsb_failed=1;return pos} 7 var p:i64=gpe_ap(out,pos,"const NX_NORMAL_ENCODING_IDS=Object.freeze([") 8 p=gpe_num(out,p,native);p=gpe_ap(out,p,",");p=gpe_num(out,p,gltf) 9 p=gpe_ap(out,p,"]);\nfunction nxNormalEncoding(descriptor){\n if(descriptor===undefined)return 0;\n if(!descriptor||typeof descriptor!=='object'||!Number.isSafeInteger(descriptor.id)||!NX_NORMAL_ENCODING_IDS.includes(descriptor.id))throw Error('normal-encoding-descriptor-refused');\n return descriptor.id;\n}\nfunction nxBindNormalEncodingGL(g,locations,descriptor){\n const id=nxNormalEncoding(descriptor),location=locations.uNrmEncoding;\n if(location===null||location===undefined){if(id!==0)throw Error('normal-encoding-shader-unavailable');return;}\n g.uniform1i(location,id);\n}\nfunction nxBindNormalEncodingGPU(words,layout,descriptor){\n const id=nxNormalEncoding(descriptor),offset=layout.uNrmEncoding;\n if(offset===undefined){if(id!==0)throw Error('normal-encoding-shader-unavailable');return;}\n if(!Number.isSafeInteger(offset)||offset<0||offset%Int32Array.BYTES_PER_ELEMENT!==0||offset/Int32Array.BYTES_PER_ELEMENT>=words.length)throw Error('normal-encoding-layout-refused');\n words[offset/Int32Array.BYTES_PER_ELEMENT]=id;\n}\n") 10 return p 11}