code wiki / _hdl_build / nx_character_shared_parity_gate_t340.nx

nx_character_shared_parity_gate_t340.nx source

↩ module page · 23 lines · 46327 B

1import "nx_game_page_shared_candidate_t340.nx" 2func gpe_visitors_gpu_before_t340(out: *u8,pos: i64) -> i64 { 3 let p:i64=gpe_ap(out,gpe_mip_emit(out,gpe_rig_inspection_emit(out,gpe_prepared_body_emit(out,gpe_prepared_catalogue(out,pos)))),nx_prepared_motion_js()) 4 if gsb_failed!=0{return p} 5 return gpe_ap(out,p,"function nxVisitorFrameUniforms(F,H,V,K){const camera=[Number(nxView(\"view_x\",\"camx\"))/256,Number(nxView(\"view_y\",\"camy\"))/256,Number(nxView(\"view_z\",\"camz\"))/256],yaw=Number(nxView(\"view_yaw\",\"yaw\"))/4096,pitch=Number(nxView(\"view_pitch\",\"pitch\"))/4096,sun=nxCastSun(),time=Number(ex.tnow())/60;F.set(camera,V.uCamM/4);H.set(camera,K.uCamM/4);F.set([Math.sin(yaw),Math.cos(yaw),Math.sin(pitch),Math.cos(pitch)],V.uYPM/4);F.set([cv.width,cv.height],V.uResM/4);F.set(sun,V.uSunM/4);H.set(sun,K.uSunM/4);F[V.uTm/4]=time;H[K.uTm/4]=time;}\nfunction nxVisitorTangentStream(P){const count=P.pos.length/3*4;if(P.tangent instanceof Float32Array&&P.tangent.length===count)return P.tangent;if(P.normal)throw Error('normal-map-tangent-stream-unavailable');const neutral=new Float32Array(count);for(let i=3;i<count;i+=4)neutral[i]=1;return neutral;}\nasync function nxGpuUploadVisitor(P){\nconst owner=GPU,owned=[];if(!owner||!owner.cpl)throw Error('visitor renderer unavailable');\nconst dev=owner.dev,usage=GPUTextureUsage.TEXTURE_BINDING|GPUTextureUsage.COPY_DST;\ndev.pushErrorScope('validation');let D,failure;\ntry{\nconst buffer=function(a,type){const b=dev.createBuffer({size:a.byteLength,usage:type|GPUBufferUsage.COPY_DST,mappedAtCreation:true});owned.push(b);new Uint8Array(b.getMappedRange()).set(new Uint8Array(a.buffer,a.byteOffset,a.byteLength));b.unmap();return b;};\nconst vertex=GPUBufferUsage.VERTEX;\nconst shared=P.shared;let vertices=shared?.buffers;if(!vertices){vertices={bp:buffer(P.pos,vertex),bj:buffer(P.aj,vertex),bw:buffer(P.aw,vertex),bn:buffer(P.nrm,vertex),buv:buffer(P.uv,vertex),bhs:buffer(new Float32Array(P.pos.length/3),vertex),bt:buffer(nxVisitorTangentStream(P),vertex)};if(shared)shared.buffers=vertices;}D={...vertices,ib:buffer(P.idx,GPUBufferUsage.INDEX),ni:P.idx.length,material:P.material||null,geometryMode:P.geometryMode||'skinned',hasAlbedo:!!P.image};\nif(P.palette){const columns=P.geometryMode==='static'?1:P.nj;D.jt=P.paletteShared?.texture;if(!D.jt){D.jt=dev.createTexture({size:[columns,4],format:'rgba32float',usage});owned.push(D.jt);dev.queue.writeTexture({texture:D.jt},P.palette,{bytesPerRow:columns*16},[columns,4]);if(P.paletteShared)P.paletteShared.texture=D.jt;}}else{\nD.jt=dev.createTexture({size:[P.nj,3],format:'rgba32float',usage});owned.push(D.jt);\ndev.queue.writeTexture({texture:D.jt},P.bind,{bytesPerRow:P.nj*16},[P.nj,1]);\nconst identity=new Float32Array(P.nj*4);for(let j=0;j<P.nj;j++)identity[j*4+3]=1;\ndev.queue.writeTexture({texture:D.jt,origin:[0,1]},identity,{bytesPerRow:P.nj*16},[P.nj,1]);\nidentity.fill(0);dev.queue.writeTexture({texture:D.jt,origin:[0,2]},identity,{bytesPerRow:P.nj*16},[P.nj,1]);\n}\nconst wrap={10497:'repeat',33071:'clamp-to-edge',33648:'mirror-repeat'};if(!P.image){if(P.geometryMode!=='static')throw Error('visitor-image-required');D.textureSampling={levels:1,state:'absent',reason:'No source texture'};D.atl=owner.dum;D.samp=dev.createSampler();}else{D.textureSampling=nxMipPlan(P);D.atl=dev.createTexture({size:[P.image.width,P.image.height],mipLevelCount:D.textureSampling.levels,format:'rgba8unorm',viewFormats:['rgba8unorm-srgb'],usage:usage|GPUTextureUsage.RENDER_ATTACHMENT});owned.push(D.atl);\ndev.queue.copyExternalImageToTexture({source:P.image},{texture:D.atl},[P.image.width,P.image.height]);\nawait nxMipGenerate(owner,D,owned);\nconst sampler=P.sampler;D.samplerDescriptor=sampler?{magFilter:sampler.mag===9728?'nearest':'linear',minFilter:[9728,9984,9986].includes(sampler.min)?'nearest':'linear',mipmapFilter:[9986,9987].includes(sampler.min)?'linear':'nearest',addressModeU:wrap[sampler.wrapS],addressModeV:wrap[sampler.wrapT],lodMaxClamp:D.textureSampling.levels-1}:{magFilter:'linear',minFilter:'linear',addressModeU:'clamp-to-edge',addressModeV:'clamp-to-edge'};D.samp=dev.createSampler(D.samplerDescriptor);}if(P.normal){const N={textureSampling:nxMipPlan({...P.normal,textureRole:'normal'}),encoding:P.normal.encoding,scale:P.normal.scale};N.atl=dev.createTexture({size:[P.normal.image.width,P.normal.image.height],mipLevelCount:N.textureSampling.levels,format:'rgba8unorm',usage:usage|GPUTextureUsage.RENDER_ATTACHMENT});owned.push(N.atl);dev.queue.copyExternalImageToTexture({source:P.normal.image},{texture:N.atl},[P.normal.image.width,P.normal.image.height]);await nxMipGenerate(owner,N,owned);const ns=P.normal.sampler;N.samplerDescriptor={magFilter:ns.mag===9728?'nearest':'linear',minFilter:[9728,9984,9986].includes(ns.min)?'nearest':'linear',mipmapFilter:[9986,9987].includes(ns.min)?'linear':'nearest',addressModeU:wrap[ns.wrapS],addressModeV:wrap[ns.wrapT],lodMaxClamp:N.textureSampling.levels-1};N.samp=dev.createSampler(N.samplerDescriptor);D.normal=N;}\nD.vb=dev.createBuffer({size:NXCV_SIZE,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});owned.push(D.vb);\nD.fb=dev.createBuffer({size:NXCF_SIZE,usage:GPUBufferUsage.UNIFORM|GPUBufferUsage.COPY_DST});owned.push(D.fb);\nD.vdata=new ArrayBuffer(NXCV_SIZE);D.fdata=new ArrayBuffer(NXCF_SIZE);\nD.release=function(){while(owned.length){const r=owned.pop();r.destroy();}D.dead=true;};\n}catch(e){failure=e;}\nconst validation=await dev.popErrorScope();\nif(failure||validation||GPU!==owner){while(owned.length)owned.pop().destroy();throw failure||Error(validation?validation.message:'visitor renderer replaced');}\nif(D.normal){D.normal.textureSampling.validation='passed';D.normal.textureSampling.state=D.normal.textureSampling.levels>1?'ready':'source-level-only';}D.textureSampling.validation='passed';D.textureSampling.state=D.textureSampling.levels>1?'ready':'source-level-only';dev.lost.then(function(){D.release();});return D;\n}\nfunction nxGpuDrawVisitors(dev,G,rp){\nif(!G.cvb||!G.cfb||!G.dum||!G.cpl||!DN.length)return;\nlet submitted=0;\nfor(const entry of DN){\nnxVisitorLocal(entry);if(entry.support?.state!=='ready'&&!(entry.prepared&&entry.support?.state==='initially-seated'))continue;\nfor(const D of entry.gpu?.parts||[entry.gpu]){if(!D||D.dead)continue;const pipeline=D.material?G.authoredPipeline(D.material.alpha,D.material.doubleSided):G.cpl;\ndev.pushErrorScope('validation');\ntry{\nif(!D.bgv){\nD.bgv=dev.createBindGroup({layout:pipeline.getBindGroupLayout(0),entries:[{binding:0,resource:{buffer:D.vb}},{binding:1,resource:D.jt.createView()},{binding:3,resource:G.dum.createView()}]});\nD.bgf=dev.createBindGroup({layout:pipeline.getBindGroupLayout(1),entries:[{binding:0,resource:{buffer:D.fb}},{binding:1,resource:G.t3.createView()},{binding:2,resource:D.atl.createView()},{binding:3,resource:D.samp},{binding:4,resource:D.normal?D.normal.atl.createView():G.dum.createView()},{binding:5,resource:D.normal?D.normal.samp:D.samp}]});\n}\nnew Uint8Array(D.vdata).set(new Uint8Array(G.cvb));new Uint8Array(D.fdata).set(new Uint8Array(G.cfb));\nconst F=new Float32Array(D.vdata),I=new Int32Array(D.vdata),H=new Float32Array(D.fdata),J=new Int32Array(D.fdata),V=NXCV,K=NXCF;\nF.set([entry.px,entry.py,entry.pz],V.uIP/4);F.set([Math.sin(entry.A),Math.cos(entry.A),entry.sc,1],V.uIH/4);\nI[V.uAuth/4]=1;I[V.uGar/4]=0;I[V.uShd/4]=0;I[V.uGK/4]=0;\nF[V.uZMN/4]=entry.zmn;F[V.uH/4]=entry.H;\nfor(const key of ['uDNL','uDNR','uDNB','uDNG','uDNTl','uDNTr'])if(V[key]!==undefined)F.fill(0,V[key]/4,V[key]/4+4);\nF.fill(0,V.uSB/4,V.uSB/4+72*4);\nfor(const pair of [[F,V],[H,K]]){const values=pair[0],offsets=pair[1];for(const field of ['uGB','uGT'])if(offsets[field]!==undefined)values[offsets[field]/4]=0;if(offsets.uOF!==undefined)values[offsets.uOF/4]=2;if(offsets.uGN!==undefined)values[offsets.uGN/4]=0;if(offsets.uMoodF!==undefined)values[offsets.uMoodF/4]=0;}\nJ[K.uAuth/4]=1;J[K.uGar/4]=0;J[K.uGK/4]=0;J[K.uGM/4]=0;J[K.uGMH/4]=0;J[K.uEyeG/4]=0;J[K.uAnatM/4]=0;J[K.uShd/4]=0;\nJ[K.uAtlOn/4]=NOATL9||D.hasAlbedo===false?0:1;J[K.uNrmOn/4]=0;nxBindNormalEncodingGPU(J,K,entry.normalEncoding);J[K.uSkinMaps/4]=0;J[K.uInspect/4]=0;H[K.uZMN/4]=entry.zmn;H[K.uH/4]=entry.H;\nH.set([Math.sin(entry.A),Math.cos(entry.A),entry.sc,1],K.uIH/4);\nif(V.uSkinMode!==undefined){I[V.uSkinMode/4]=D.geometryMode==='static'?2:D.material?1:0;I[V.uAssetBasis/4]=D.material?1:0;}if(K.uMaterialMode!==undefined){J[K.uMaterialMode/4]=D.material?(entry.prepared?.materialMode||1):0;if(D.material){F[V.uIH/4+3]=0;J[K.uInspect/4]=(window.__nx_inspection?.active&&nxInspect.asset===entry.sourceId&&nxInspect.surface>0)?nxInspect.surface:(J[K.uMaterialMode/4]===2?0:1);J[K.uAlphaMode/4]=D.material.alpha;H[K.uAlphaCutoff/4]=D.material.cutoff;H.set(D.material.factor,K.uBaseColorFactor/4);if(J[K.uMaterialMode/4]===2){const lighting=entry.prepared.lighting;if(lighting.state!=='ready')throw Error(lighting.reason);H[K.uMetallicFactor/4]=D.material.metallicFactor;H[K.uRoughnessFactor/4]=D.material.roughnessFactor;H.set(D.material.emissiveFactor,K.uEmissiveFactor/4);H.set(lighting.directRadiance,K.uMaterialLight/4);H.set(lighting.diffuseIrradiance,K.uMaterialAmbient/4);J[K.uMaterialDoubleSided/4]=D.material.doubleSided?1:0;}}}\nif(D.normal&&J[K.uMaterialMode/4]===2){nxBindNormalEncodingGPU(J,K,D.normal.encoding);J[K.uNrmOn/4]=1;H[K.uNrmScale/4]=D.normal.scale;}nxVisitorFrameUniforms(F,H,V,K);\ndev.queue.writeBuffer(D.vb,0,D.vdata);dev.queue.writeBuffer(D.fb,0,D.fdata);\nrp.setPipeline(pipeline);rp.setBindGroup(0,D.bgv);rp.setBindGroup(1,D.bgf);\nrp.setVertexBuffer(0,D.bp);rp.setVertexBuffer(1,D.bj);rp.setVertexBuffer(2,D.bw);rp.setVertexBuffer(3,D.bn);rp.setVertexBuffer(4,D.buv);rp.setVertexBuffer(5,D.bhs);rp.setVertexBuffer(6,D.bt);rp.setIndexBuffer(D.ib,'uint32');rp.drawIndexed(D.ni,1);submitted++;\n}catch(e){D.dead=true;D.error=String(e);}\ndev.popErrorScope().then(function(error){if(error){D.dead=true;D.error=error.message;window.__nx_visiting_draw={state:'validation-failed',reason:error.message};}});\n}\n}\nconst failed=DN.flatMap(entry=>(entry.gpu?.parts||[entry.gpu]).filter(p=>p?.error).map(p=>entry.l+': '+p.error));\nwindow.__nx_visiting_draw={state:failed.length?'needs-intervention':submitted?'submitted':'waiting',count:submitted,failed:failed.length,reason:failed.join(' | '),observed_at:new Date().toISOString(),pose:DN.some(entry=>entry.prepared?.motion&&entry.prepared.motionActive!==false)?'includes-native-fullclip-current-poses':DN.some(entry=>entry.prepared)?'includes-discrete-native-poses':'legacy-visitor-context',scope:'Draw submission; visual and animation review required'};\n}\n\n// Transport adapter for a native-prepared descriptor; it never parses glTF JSON.\nasync function nxPreparedBytes(record){\n if(!record||!Number.isSafeInteger(record.bytes)||record.bytes<1||!/^[a-f0-9]{64}$/.test(record.sha256)||typeof record.url!=='string')throw Error('prepared-artifact-contract');\n const response=await fetch(record.url);if(!response.ok)throw Error('prepared-http-'+response.status);const bytes=await response.arrayBuffer();\n const hash=Array.from(new Uint8Array(await crypto.subtle.digest('SHA-256',bytes)),b=>b.toString(16).padStart(2,'0')).join('');if(bytes.byteLength!==record.bytes||hash!==record.sha256)throw Error('prepared-artifact-identity');return bytes;\n}\nfunction nxPreparedView(bytes,base,view,components){\n if(!Array.isArray(view)||view.length!==9||!view.every(Number.isSafeInteger)||view.some(x=>x<0)||view[6]!==components||view[7]!==0||view[3]!==view[5]*components||view[8]!==view[3])throw Error('prepared-stream-layout');\n const offset=base+view[1],length=view[2]*components,needed=length*view[5];if(!Number.isSafeInteger(offset+needed)||offset<0||needed<1||offset+needed>bytes.byteLength)throw Error('prepared-stream-bounds');\n const kind=({5121:Uint8Array,5123:Uint16Array,5125:Uint32Array,5126:Float32Array})[view[4]];if(!kind||kind.BYTES_PER_ELEMENT!==view[5])throw Error('prepared-stream-type');\n const src=offset%kind.BYTES_PER_ELEMENT?new kind(bytes.slice(offset,offset+needed)):new kind(bytes,offset,length);return src;\n}\nfunction nxPreparedPalette(packet,index,joints){\n if(packet?.schema!=='nishi-native-discrete-lbs/1'||packet.q!==1048576||packet.timeQ!==1073741824||!Array.isArray(packet.samples))throw Error('prepared-pose-contract');\n const sample=packet.samples[index];if(!sample||sample.palette?.length!==joints*16||sample.bounds?.length!==6||!sample.palette.every(Number.isSafeInteger)||!sample.bounds.every(Number.isSafeInteger)||!Number.isSafeInteger(sample.time))throw Error('prepared-pose-data');\n const rows=new Float32Array(joints*16);for(let j=0;j<joints;j++)for(let c=0;c<4;c++)for(let k=0;k<4;k++)rows[c*joints*4+j*4+k]=sample.palette[j*16+c*4+k]/packet.q;return rows;\n}\n\nfunction nxPreparedMotionStatus(D){const motion=D.prepared.motion;return motion?{asset:D.sourceId,active:D.prepared.motionActive!==false,displayRootMotion:D.prepared.motionPolicy,...motion.status()}:{asset:D.sourceId,state:D.prepared.motionError?'needs-intervention':'unavailable',reason:D.prepared.motionError||'No full source clip declared'};}\nfunction nxPreparedMotionRefresh(D){const state=nxPreparedMotionStatus(D);window.__nx_prepared_motion=state;if(D.prepared.motionStatus){const text=state.state==='needs-intervention'||state.state==='failed'?'Motion unavailable: '+(state.reason||state.error?.message):state.active===false?'Discrete pose selected. Play resumes the full source clip.':state.state+' · '+(state.time/state.timeQ).toFixed(3)+' s · '+(state.bounds||'bounds pending');if(D.prepared.motionStatus.textContent!==text)D.prepared.motionStatus.textContent=text;}return state;}\nasync function nxPreparedMotionLoad(D,owner){\n if(!D.prepared.manifest.motion)return;\n try{const m=await NishiPreparedMotion.create(D.prepared.manifest.motion,nxPreparedBytes,(sample,rows)=>{if(GPU!==owner)throw Error('Prepared renderer changed; reload the character before playback');GPU.dev.queue.writeTexture({texture:D.gpu.parts[0].jt},rows,{bytesPerRow:D.nj*16},[D.nj,4]);},D.prepared.descriptor.sourceSha256);D.prepared.motion=m;D.prepared.motionRootOrigin=m.sample.rootWorld.slice();D.prepared.motionPolicy='in-place-horizontal';D.prepared.motionActive=true;D.prepared.motionError=null;}\n catch(error){D.prepared.motionError=String(error.message||error);}\n}\nfunction nxPreparedPlayback(asset,operation,value){\n const D=DN.find(d=>d.sourceId===asset&&d.prepared);if(!D)return {ok:false,state:'unavailable',reason:'Prepared character is not loaded',asset};const m=D.prepared.motion;if(operation==='status')return {ok:!!m,...nxPreparedMotionStatus(D)};if(!m)return {ok:false,...nxPreparedMotionRefresh(D)};\n try{if(operation==='policy'){if(!['in-place-horizontal','authored'].includes(value))throw Error('Choose in-place-horizontal or authored root motion');D.prepared.motionPolicy=value;}else if(operation==='once'||operation==='loop'){m.evaluate(m.time,false);D.prepared.motionActive=true;m.play(operation);}else if(operation==='pause')m.pause();else if(operation==='reset'){m.reset();D.prepared.motionActive=true;}else if(operation==='seek'){m.seek(value);D.prepared.motionActive=true;}else if(operation==='audit-bounds'){m.auditBounds();D.prepared.motionActive=true;}else return {ok:false,state:'refused',reason:'Use status, once, loop, pause, reset, seek, policy, or audit-bounds'};nxAuthoredLocal(D);D.prepared.rigRefresh?.();return {ok:!m.error,...nxPreparedMotionRefresh(D)};}\n catch(error){m.pause();m.error={code:'prepared-motion-command',message:String(error.message||error)};nxPreparedBodyUpdate(D);return {ok:false,...nxPreparedMotionRefresh(D)};}\n}\nfunction nxPreparedMotionMount(D,box){if(!D.prepared.manifest.motion)return;const row=document.createElement('div'),status=document.createElement('p');status.setAttribute('aria-live','polite');D.prepared.motionStatus=status;for(const [op,label]of [['once','Play source walk'],['pause','Pause'],['loop','Loop (resets source position)'],['reset','Reset']]){const button=document.createElement('button');button.type='button';button.textContent=label;button.disabled=!D.prepared.motion;button.addEventListener('click',()=>nxPreparedPlayback(D.sourceId,op));row.append(button);}const policy=document.createElement('select');policy.setAttribute('aria-label','Source root motion');for(const [value,text]of [['in-place-horizontal','Walk in place (horizontal root compensated)'],['authored','Authored source travel']]){const o=document.createElement('option');o.value=value;o.textContent=text;policy.append(o);}policy.addEventListener('change',()=>nxPreparedPlayback(D.sourceId,'policy',policy.value));row.append(policy,status);box.append(row);nxPreparedMotionRefresh(D);}\nwindow.nishiPreparedPlayback=nxPreparedPlayback;\n\nfunction nxPreparedInitialSeat(D){\n const observed_at=new Date().toISOString();try{if(typeof ex.wc_place_floor_q!=='function')throw Error('Native initial placement export unavailable');const sample=D.prepared.motion?.sample||D.prepared.packet.samples[0];if(sample.boundsKind&&sample.boundsKind!=='native-exact-all-vertices')throw Error('Initial placement requires exact source bounds');const xq=(D.wx-ex.wox())*256n+128n,zq=(D.wz-ex.woz())*256n+128n,floor=ex.wc_place_floor_q(0n,xq,zq);if(floor<0n)throw Error('Native surface unavailable at character anchor');const y=Number(floor)/256-sample.bounds[1]/D.prepared.packet.q*D.displayScale;if(!Number.isFinite(y))throw Error('Initial placement height invalid');D.py=y;D.initialPlacement={state:'initially-seated',observed_at,floorQ8:String(floor),localXZQ8:[String(xq),String(zq)],exactPoseTime:sample.time,scope:'Exact initial whole-mesh lower bound seated on native surface; deformed-foot contact and walking support unqualified'};}catch(error){D.initialPlacement={state:'needs-intervention',observed_at,reason:String(error.message||error),scope:'Initial native placement unavailable; camera-relative fallback recorded but prepared draw is refused'};}\n}\n\nfunction nxAuthoredLocal(D){\n const base=new Float32Array(GPU.cvb)[NXCV.uSc/4];if(!Number.isFinite(base)||base<=0)throw Error('prepared-runtime-scale');D.sc=D.displayScale/base;\n const m=D.prepared.motion,active=!!m&&D.prepared.motionActive!==false,before=active?m.revision:null;if(active)m.step(Number(ex.tnow())*1000/60);\n D.motionOffsetX=0;D.motionOffsetZ=0;\n if(active&&D.prepared.motionPolicy==='in-place-horizontal'&&!m.error){const r=m.sample.rootWorld,o=D.prepared.motionRootOrigin,q=m.header[7],dx=(r[0]-o[0])/q*D.displayScale,dz=(r[2]-o[2])/q*D.displayScale;D.motionOffsetX=-(dx*Math.cos(D.A)-dz*Math.sin(D.A));D.motionOffsetZ=-(dx*Math.sin(D.A)+dz*Math.cos(D.A));}\n if(!Number.isFinite(D.motionOffsetX)||!Number.isFinite(D.motionOffsetZ))throw Error('prepared-motion-placement');\n D.px=Number(D.wx-ex.wox())+.5+D.motionOffsetX;D.pz=Number(D.wz-ex.woz())+.5+D.motionOffsetZ;\n D.support=D.initialPlacement||{state:'waiting',scope:'Native initial placement pending; deformed-foot contact unqualified'};nxPreparedBodyUpdate(D);\n if(active){nxPreparedMotionRefresh(D);if(m.revision!==before)D.prepared.rigRefresh?.();}return D;\n}\nfunction nxPreparedPose(asset,index){\n const D=DN.find(d=>d.sourceId===asset);if(!D?.prepared||!Number.isSafeInteger(index)||index<0||index>=D.prepared.packet.samples.length)return {ok:false,code:'prepared-pose-selection'};\n if(D.prepared.geometryMode==='static')return {ok:false,code:'static-source-has-no-pose-animation'};if(D.prepared.motion){D.prepared.motion.pause();D.prepared.motionActive=false;}const rows=nxPreparedPalette(D.prepared.packet,index,D.nj);GPU.dev.queue.writeTexture({texture:D.gpu.parts[0].jt},rows,{bytesPerRow:D.nj*16},[D.nj,4]);D.prepared.selected=index;nxAuthoredLocal(D);nxPreparedMotionRefresh(D);D.prepared.rigRefresh?.();\n window.__nx_prepared_pose={state:'discrete-native-pose-upload-submitted',gpuValidation:'pending',asset,index,time:D.prepared.packet.samples[index].time,timeQ:D.prepared.packet.timeQ,continuousPlayback:false,worldNavigation:'unbound',facialAnimation:'unexercised'};return {ok:true,...window.__nx_prepared_pose};\n}\nfunction nxPreparedMaterialSchema(mode,layout,metadata,bytes,shader){\n const fail=(reason,field)=>({state:'needs-intervention',reason,field:field||null,mode});\n if(![1,2].includes(mode))return fail('material-mode-contract');\n if(!layout||!metadata||typeof layout!=='object'||typeof metadata!=='object'||Array.isArray(layout)||Array.isArray(metadata)||!Number.isSafeInteger(bytes)||bytes<=0||bytes%16!==0||typeof shader!=='string')return fail('material-schema-unavailable');\n const names=Object.keys(layout),metaNames=Object.keys(metadata),ranges=[];\n if(!names.length||names.length!==metaNames.length)return fail('material-schema-field-set');\n for(const name of names){const m=metadata[name];\n if(!Object.hasOwn(metadata,name)||!m||typeof m!=='object'||Array.isArray(m)||![m.offset,m.size,m.align].every(Number.isSafeInteger)||m.offset<0||m.size<=0||m.align<=0||(BigInt(m.align)&(BigInt(m.align)-1n))!==0n||m.offset%m.align!==0||!Number.isSafeInteger(m.offset+m.size)||m.offset+m.size>bytes||layout[name]!==m.offset)return fail('material-schema-field-range',name);\n ranges.push({name,start:m.offset,end:m.offset+m.size});\n }\n ranges.sort((a,b)=>a.start-b.start);for(let i=1;i<ranges.length;i++)if(ranges[i].start<ranges[i-1].end)return fail('material-schema-field-overlap',ranges[i].name);\n const declarations=Array.from(shader.matchAll(/\\bstruct\\s+U\\s*\\{([^}]*)\\}/g));\n if(declarations.length!==1||!shader.replace(/\\s+/g,'').includes('@group(1)@binding(0)var<uniform>u:U;'))return fail('material-schema-uniform-binding');\n const body=declarations[0][1].replace(/\\s+/g,''),declared=Array.from(body.matchAll(/(?:^|,)([A-Za-z_][A-Za-z0-9_]*):/g),m=>m[1]),declaredNames=new Set(declared);\n if(declared.length!==names.length||declaredNames.size!==declared.length||names.some(name=>!declaredNames.has(name)))return fail('material-schema-declared-field-set');\n const required=[['uMaterialMode','i32',4,4],['uInspect','i32',4,4],['uAtlOn','i32',4,4],['uAuth','i32',4,4],['uGar','i32',4,4],['uShd','i32',4,4],['uBaseColorFactor','vec4f',16,16],['uAlphaMode','i32',4,4],['uAlphaCutoff','f32',4,4]];\n if(mode===2)required.push(['uCamM','vec3f',12,16],['uSunM','vec3f',12,16],['uMetallicFactor','f32',4,4],['uRoughnessFactor','f32',4,4],['uEmissiveFactor','vec3f',12,16],['uMaterialLight','vec3f',12,16],['uMaterialAmbient','vec3f',12,16],['uMaterialDoubleSided','i32',4,4]);\n for(const [name,type,size,align] of required){const m=metadata[name],found=Array.from(body.matchAll(new RegExp('(?:^|,)'+name+':([^,]+)(?=,)','g')));if(!Object.hasOwn(layout,name)||!Object.hasOwn(metadata,name)||found.length!==1||found[0][1]!==type||m.size!==size||m.align!==align)return fail('material-schema-required-field',name);}\n return {state:'ready',mode,scope:'generated struct U native metadata and required field types; not general WGSL validation',bytes,fields:names.length};\n}\nfunction nxPreparedMaterialCapability(mode){return nxPreparedMaterialSchema(mode,typeof NXCF==='undefined'?null:NXCF,typeof NXCF_META==='undefined'?null:NXCF_META,typeof NXCF_SIZE==='undefined'?0:NXCF_SIZE,typeof WGSL_CASTF==='undefined'?null:WGSL_CASTF);}\nfunction nxPreparedLitAdmission(descriptor,lighting,normalsEligible,normalAdmissions){\n const fail=reason=>({state:'needs-intervention',reason});\n const schema=nxPreparedMaterialCapability(2);if(schema.state!=='ready')return schema;\n if(normalsEligible!==true)return fail('nonzero-source-normals-required');\n if(!lighting||lighting.units!=='relative-display'||lighting.ambientModel!=='uniform-diffuse-irradiance')return fail('declared-relative-lighting-required');\n const vector=a=>Array.isArray(a)&&a.length===3&&a.every(x=>Number.isFinite(x)&&x>=0&&Number.isFinite(Math.fround(x)));\n if(!vector(lighting.directRadiance)||!vector(lighting.diffuseIrradiance))return fail('finite-nonnegative-light-inputs-required');\n for(const part of descriptor.parts){const m=part.material;\n const normalOnly=m.mapInputs?.normalTexture!=null&&m.litUnsupportedInputs===1&&['occlusionTexture','emissiveTexture','metallicRoughnessTexture'].every(k=>m.mapInputs[k]===null);const mapped=normalAdmissions?.get(part);if(!(m.litEligible===true||(normalOnly&&mapped?.state==='admitted-inputs'))||part.litGeometryEligible!==true)return fail(mapped?.reason||m.litReason||part.litGeometryReason||'unmapped-material-input');\n if(!Number.isFinite(m.metallicFactor)||m.metallicFactor<0||m.metallicFactor>1||!Number.isFinite(m.roughnessFactor)||m.roughnessFactor<0||m.roughnessFactor>1||!vector(m.emissiveFactor)||m.emissiveFactor.some(x=>x>1))return fail('typed-source-material-factors-required');\n if(m.roughnessFactor===0)return fail('ideal-specular-delta-lobe-not-rendered');\n const r=Math.fround(m.roughnessFactor),a=Math.fround(r*r),a2=Math.fround(a*a),peak=Math.fround(1/(Math.PI*a2));\n const normalMinimum=2**-126; // IEEE754 binary32 minimum normal; subnormal preservation is not assumed.\n const response=1/Math.PI+peak/(2*a);\n if(!(a2>=normalMinimum)||!Number.isFinite(peak)||!Number.isFinite(Math.fround(peak/(2*a)))||lighting.directRadiance.some((x,i)=>!Number.isFinite(Math.fround(x*response+lighting.diffuseIrradiance[i]/Math.PI+m.emissiveFactor[i]))))return fail('material-light-sum-outside-f32-representation');\n }\n return {state:'ready',scope:'direct-BRDF-plus-diffuse-ambient-approximation',directRadiance:lighting.directRadiance,diffuseIrradiance:lighting.diffuseIrradiance};\n}\nfunction nxPreparedNormalCapability(){const base=nxPreparedMaterialCapability(2);if(base.state!=='ready')return base;const m=NXCF_META.uNrmScale;if(!m||m.size!==4||m.align!==4||m.offset!==NXCF.uNrmScale||!WGSL_CASTF.replace(/\\s+/g,'').includes('uNrmScale:f32,'))return {state:'refused',reason:'normal-map-native-scale-uniform-unavailable'};return {state:'ready',scope:'native mapped shader uniform contract; input and draw qualification separate'};}\nfunction nxPreparedNormalState(source,part,P,indices){\n const fail=reason=>({state:'refused',reason,scope:'mapped-input-admission'});\n const m=part.material,n=m.normalMap;\n if(n===undefined){return m.mapInputs?.normalTexture==null?{state:'absent'}:fail('normal-map-descriptor-required');}\n if(!n||typeof n!=='object'||n.state!=='prepared')return fail(n?.reason||'normal-map-descriptor-refused');\n if(n.sourceIdentity!=='descriptor.sourceSha256+sourceBytes'||n.texCoord!==0||n.tangentFrame!=='gltf-tangent-xyz-and-w-handedness')return fail('normal-map-source-frame-contract');\n const e=n.normalEncoding;\n if(!e||e.id!==2||e.name!=='gltf-rgb8-unorm-v1'||e.linearTransfer!==true||e.normalizationRequired!==true)return fail('normal-map-explicit-encoding-required');\n if(!Number.isFinite(n.scale)||!Number.isFinite(Math.fround(n.scale))||(n.scale!==0&&Math.fround(n.scale)===0))return fail('normal-map-scale-not-representable');\n const image=n.image;\n if(!image||image.mime!=='image/png'||!Number.isSafeInteger(image.offset)||!Number.isSafeInteger(image.bytes)||image.offset<0||image.bytes<=0||image.offset>source.byteLength||image.bytes>source.byteLength-image.offset)return fail('normal-map-image-range');\n const s=image.sampler;\n if(!s||![9728,9729].includes(s.mag)||![9728,9729,9984,9985,9986,9987].includes(s.min)||![10497,33071,33648].includes(s.wrapS)||![10497,33071,33648].includes(s.wrapT))return fail('normal-map-source-sampler');\n const t=P.tangent,N=P.nrm;\n if(!(t instanceof Float32Array)||t.length/4!==N.length/3||!t.every(Number.isFinite))return fail('normal-map-tangent-stream');\n for(let i=0,j=0;i<t.length;i+=4,j+=3){\n if(t[i+3]!==1&&t[i+3]!==-1)return fail('normal-map-tangent-handedness');\n const x=N[j+1]*t[i+2]-N[j+2]*t[i+1],y=N[j+2]*t[i]-N[j]*t[i+2],z=N[j]*t[i+1]-N[j+1]*t[i];\n if(x===0&&y===0&&z===0)return fail('normal-map-degenerate-tangent-frame');\n }\n for(let i=0;i<indices.length;i+=3){const w=t[indices[i]*4+3];if(w!==t[indices[i+1]*4+3]||w!==t[indices[i+2]*4+3])return fail('normal-map-mixed-triangle-handedness');}\n return {state:'admitted-inputs',image,scale:n.scale,encoding:e,scope:'Source frame and map inputs only; posed determinant, upload and draw qualification separate'};\n}\nfunction nxPreparedInspectionLabel(D){return D.l+' · '+(D.prepared.materialMode===2?'lit reference':'source albedo')+(D.prepared.geometryMode==='static'?' · static unrigged source':D.prepared.motionActive!==false&&D.prepared.motion?' · native clip '+(nxPreparedCurrentSample(D).time/D.prepared.packet.timeQ).toFixed(3)+' s':' · discrete pose '+(nxPreparedCurrentSample(D).time/D.prepared.packet.timeQ).toFixed(3)+' s');}\nfunction nxPreparedMaterialMode(asset,mode){\n const D=DN.find(d=>d.sourceId===asset);if(!D?.prepared||![1,2].includes(mode))throw Error('prepared-material-mode-contract');\n const schema=nxPreparedMaterialCapability(mode);if(schema.state!=='ready')throw Error(schema.reason+(schema.field?':'+schema.field:''));\n if(mode===2&&D.prepared.lighting.state!=='ready')throw Error(D.prepared.lighting.reason);\n D.prepared.materialMode=mode;if(nxInspect.asset===asset&&window.__nx_inspection?.active){nxInspect.status.textContent=nxPreparedInspectionLabel(D);window.__nx_inspection.materialMode=mode;}return {state:'selected-awaiting-draw-review',asset,mode:mode===1?'source-albedo':'direct-BRDF-diffuse-ambient'};\n}\nfunction nxPreparedAdmission(){\n const report=(state,code,reason)=>({ok:state==='ready',state,code,reason,scope:'prepared-character-runtime-prerequisites'});\n const schema=nxPreparedMaterialCapability(1);if(schema.state!=='ready')return report('needs-intervention',schema.reason,'Prepared material schema is incompatible.');\n if(typeof GPU==='undefined'||!GPU)return report('waiting','prepared-renderer-starting','Waiting for the character renderer.');\n if(GPU.castdead)return report('needs-intervention','prepared-cast-refused',String(window.__nx_cast_draw||'Character preparation failed.'));\n if(!GPU.cpl||!GPU.authoredPipeline)return report('waiting','prepared-pipeline-starting','Waiting for the authored character pipeline.');\n if(typeof ex==='undefined'||!ex||['wox','woz','camx','camy','camz','yaw'].some(k=>typeof ex[k]!=='function'))return report('waiting','prepared-native-starting','Waiting for native world initialization.');\n if(!GPU.cvb||!GPU.cfb||!GPU.dum||!GPU.castPreparedRows)return report('waiting','prepared-frame-starting','Waiting for a prepared native character frame.');\n const offset=NXCV.uSc;if(!Number.isSafeInteger(offset)||offset<0||offset%4!==0||offset+4>GPU.cvb.byteLength)return report('needs-intervention','prepared-scale-layout','Character scale layout is invalid.');\n const scale=new Float32Array(GPU.cvb)[offset/4];if(!Number.isFinite(scale)||scale<=0)return report('needs-intervention','prepared-runtime-scale','Prepared native character scale is invalid.');\n return report('ready','prepared-runtime-ready','Character runtime ready.');\n}\nlet nxPreparedControlState='';const nxPreparedControlRows=[];\nfunction nxPreparedRefresh(){const admission=nxPreparedAdmission(),key=admission.state+':'+admission.code;if(key===nxPreparedControlState)return;nxPreparedControlState=key;window.__nx_prepared_admission={...admission,observed_at:new Date().toISOString()};for(const row of nxPreparedControlRows){if(row.busy||row.loaded)continue;row.button.disabled=!admission.ok;row.status.textContent=admission.ok?' Ready to load.':' '+admission.reason;}}\nclass NishiStaticPrepared {\n static admit(descriptor,manifest){\n const fail=reason=>{throw Error('prepared-static-'+reason)};\n if(descriptor.geometryMode!=='static'||descriptor.skin!==null||descriptor.joints!==0||manifest.poses||manifest.motion)fail('unrigged-contract');\n if(descriptor.q!==1048576||descriptor.transformContract!=='positive-uniform-axis-scale')fail('transform-contract');\n const a=descriptor.nodeMatrixQ20,b=descriptor.boundsQ20;\n if(!Array.isArray(a)||a.length!==16||!a.every(Number.isSafeInteger)||a[0]<=0||a[0]!==a[5]||a[0]!==a[10]||a[15]!==descriptor.q||[1,2,3,4,6,7,8,9,11].some(i=>a[i]!==0))fail('positive-uniform-affine-required');\n if(!a.every(v=>Number.isFinite(Math.fround(v/descriptor.q)))||!Number.isFinite(Math.fround(descriptor.q/a[0])))fail('matrix-f32-range');\n if(!Array.isArray(b)||b.length!==6||!b.every(Number.isSafeInteger)||b.slice(0,3).some((v,i)=>v>=b[i+3]))fail('bounds');\n const rows=new Float32Array(a.map(v=>v/descriptor.q));\n return {rows,packet:{schema:'nishi-native-static-geometry/1',sourceSha256:descriptor.sourceSha256,skin:null,q:descriptor.q,timeQ:1,samples:[{time:0,bounds:b.slice(),boundsKind:'native-exact-all-vertices',boundsState:'ready',geometryMode:'static'}]},rigEvidence:{state:'absent',reason:'Source geometry is unrigged; joints and animation are absent.'}};\n }\n static streams(source,descriptor,attributes){\n if(Object.keys(attributes).some(k=>!['POSITION','NORMAL'].includes(k)))throw Error('prepared-static-unsupported-attribute');\n const pos=nxPreparedView(source,descriptor.binOffset,attributes.POSITION,3),nrm=nxPreparedView(source,descriptor.binOffset,attributes.NORMAL,3);\n if(!(pos instanceof Float32Array)||!(nrm instanceof Float32Array)||pos.length===0||pos.length!==nrm.length||!pos.every(Number.isFinite)||!nrm.every(Number.isFinite))throw Error('prepared-static-attribute-contract');\n // The shared pipeline requires bound slots; static shader never reads joint/weight/UV slots.\n return {pos,nrm,aj:new Float32Array(pos.length/3*4),aw:new Float32Array(pos.length/3*4),uv:new Float32Array(pos.length/3*2),geometryMode:'static',shared:{}};\n }\n}\nasync function nxPreparedImportRun(manifest){\n const admission=nxPreparedAdmission();if(!admission.ok){window.__nx_prepared_import={...admission,asset:manifest?.id};return window.__nx_prepared_import;}\n const albedoSchema=nxPreparedMaterialCapability(1);if(albedoSchema.state!=='ready')throw Error(albedoSchema.reason+(albedoSchema.field?':'+albedoSchema.field:''));\n if(!manifest||typeof manifest.id!=='string'||!manifest.id||!Number.isFinite(manifest.displayHeight)||manifest.displayHeight<=0)throw Error('prepared-manifest-contract');\n const previous=DN.find(d=>d.sourceId===manifest.id);if(previous){const held=previous.prepared?.manifest;if(!held||['source','descriptor','poses'].some(k=>held[k]?.sha256!==manifest[k]?.sha256))throw Error('prepared-instance-id-conflict');return {ok:true,state:'already-loaded',asset:manifest.id,instancePolicy:'One source revision per scene instance id'};}\n const owner=GPU,source=await nxPreparedBytes(manifest.source),descriptor=JSON.parse(new TextDecoder().decode(await nxPreparedBytes(manifest.descriptor))),isStatic=descriptor.geometryMode==='static',staticData=isStatic?NishiStaticPrepared.admit(descriptor,manifest):null,packet=isStatic?staticData.packet:JSON.parse(new TextDecoder().decode(await nxPreparedBytes(manifest.poses)));\n if(descriptor.sourceSha256!==manifest.source.sha256||packet.sourceSha256!==manifest.source.sha256||descriptor.schema!=='nishi-authored-render/1'||descriptor.sourceBytes!==source.byteLength||descriptor.basis!=='gltf-Y-up'||!Number.isSafeInteger(descriptor.joints)||(!isStatic&&descriptor.joints<1)||!Array.isArray(descriptor.parts)||!descriptor.parts.length||packet.skin!==descriptor.skin)throw Error('prepared-descriptor-contract');\n const rigEvidence=isStatic?staticData.rigEvidence:nxRigAdmission(descriptor,packet);if(GPU!==owner)throw Error('prepared-renderer-replaced');const nj=descriptor.joints,rows=isStatic?staticData.rows:nxPreparedPalette(packet,0,nj),bounds=packet.samples[0].bounds.map(x=>x/packet.q),height=bounds[4]-bounds[1];if(!(height>0))throw Error('prepared-bounds');\n const shared={},parts=[],streams=new Map();let sourceVertices=0,committed=null,controls=null,litNormalsEligible=true;const normalAdmissions=new Map();try{\n for(const part of descriptor.parts){\n const a=part.attributes,m=part.material;if(!m||![0,1,2].includes(m.alpha)||typeof m.doubleSided!=='boolean'||!Number.isFinite(m.cutoff)||m.cutoff<0||m.cutoff>1||m.factor?.length!==4||!m.factor.every(x=>Number.isFinite(x)&&x>=0&&x<=1))throw Error('prepared-material');\n const key=JSON.stringify(a);let P=streams.get(key);if(!P){if(isStatic){P=NishiStaticPrepared.streams(source,descriptor,a);for(let k=0;k<P.nrm.length;k+=3)if(P.nrm[k]===0&&P.nrm[k+1]===0&&P.nrm[k+2]===0)litNormalsEligible=false;streams.set(key,P);sourceVertices+=P.pos.length/3;}else{\n const pos=nxPreparedView(source,descriptor.binOffset,a.POSITION,3),j=nxPreparedView(source,descriptor.binOffset,a.JOINTS_0,4),aw=nxPreparedView(source,descriptor.binOffset,a.WEIGHTS_0,4),nrm=nxPreparedView(source,descriptor.binOffset,a.NORMAL,3),uv=nxPreparedView(source,descriptor.binOffset,a.TEXCOORD_0,2),tangent=nxPreparedView(source,descriptor.binOffset,a.TANGENT,4);\n if(!(pos instanceof Float32Array)||!(aw instanceof Float32Array)||!(nrm instanceof Float32Array)||!(uv instanceof Float32Array)||pos.length/3!==j.length/4||j.length!==aw.length||nrm.length!==pos.length||uv.length/2!==pos.length/3)throw Error('prepared-attribute-types');\n if(!pos.every(Number.isFinite)||!nrm.every(Number.isFinite)||!aw.every(x=>Number.isFinite(x)&&x>=0)||!uv.every(Number.isFinite)||!j.every(x=>Number.isInteger(x)&&x<nj))throw Error('prepared-attribute-values');\n for(let k=0;k<nrm.length;k+=3){if(nrm[k]===0&&nrm[k+1]===0&&nrm[k+2]===0){litNormalsEligible=false;break;}}P={pos,aj:new Float32Array(j),aw,nrm,uv,tangent,shared:{}};streams.set(key,P);sourceVertices+=pos.length/3;\n }}\n const indices=nxPreparedView(source,descriptor.binOffset,part.indices,1);if(indices instanceof Float32Array||indices.length%3||!indices.every(x=>x<P.pos.length/3))throw Error('prepared-indices');\n const image=m.baseColor;if(!isStatic&&(!image||image.mime!=='image/png'||!Number.isSafeInteger(image.offset)||!Number.isSafeInteger(image.bytes)||image.offset<0||image.bytes<1||image.offset+image.bytes>source.byteLength))throw Error('prepared-image');if(isStatic&&image!==null)throw Error('prepared-static-texture-unsupported');\n const normalAdmission=nxPreparedNormalState(source,part,P,indices);if(normalAdmission.state==='admitted-inputs'){const cap=nxPreparedNormalCapability();if(cap.state!=='ready'){normalAdmission.state='refused';normalAdmission.reason=cap.reason;}}normalAdmissions.set(part,normalAdmission);let normalBitmap=null;const bitmap=isStatic?null:await nxDecodePng(new Uint8Array(source,image.offset,image.bytes));try{if(normalAdmission.state==='admitted-inputs'){const ni=normalAdmission.image;try{normalBitmap=await nxDecodePng(new Uint8Array(source,ni.offset,ni.bytes),'normal');}catch(error){normalAdmission.state='refused';normalAdmission.reason='normal-map-image-decode:'+String(error);}}const D=await nxGpuUploadVisitor({...P,idx:new Uint32Array(indices),nj,palette:rows,paletteShared:shared,image:bitmap,material:m,sampler:image?.sampler,normal:normalBitmap?{image:normalBitmap,sampler:normalAdmission.image.sampler,encoding:normalAdmission.encoding,scale:normalAdmission.scale}:null});D.normalAdmission=normalAdmission;parts.push(D);}finally{if(typeof normalBitmap?.close==='function')normalBitmap.close();if(typeof bitmap?.close==='function')bitmap.close();}\n }\n if(GPU!==owner)throw Error('prepared-renderer-replaced');\n const commitAdmission=nxPreparedAdmission();if(!commitAdmission.ok)throw Error(commitAdmission.code);\n const x=Number(ex.camx())/256,z=Number(ex.camz())/256,yaw=Number(ex.yaw())/4096,distance=manifest.displayHeight*2,px=x+Math.sin(yaw)*distance,pz=z+Math.cos(yaw)*distance;\n const D={sourceId:manifest.id,l:manifest.label||manifest.id,nj,axis:'Y',wx:ex.wox()+BigInt(Math.floor(px)),wz:ex.woz()+BigInt(Math.floor(pz)),px,py:Number(ex.camy())/256-manifest.displayHeight,pz,A:0,displayScale:manifest.displayHeight/height,sc:1,zmn:bounds[1],H:height,gpu:{parts,release(){parts.forEach(p=>p.release());}},prepared:{packet,descriptor,manifest,geometryMode:isStatic?'static':'skinned',selected:0,materialMode:1,rigEvidence,lighting:nxPreparedLitAdmission(descriptor,manifest.lighting,litNormalsEligible,normalAdmissions)}};\n await nxPreparedMotionLoad(D,owner);nxPreparedInitialSeat(D);nxAuthoredLocal(D);D.body=await nxPreparedBodyIdentity(D);\n const box=document.createElement('div');controls=box;box.dataset.nishiAsset=manifest.id;const label=document.createElement('span'),select=document.createElement('select');label.textContent=D.l+(isStatic?' — static source geometry; no rig or motion ':' — native pose sample ');packet.samples.forEach((p,i)=>{const o=document.createElement('option');o.value=String(i);o.textContent=(p.time/packet.timeQ).toFixed(3)+' s';select.appendChild(o);});select.addEventListener('change',()=>nxPreparedPose(D.sourceId,Number(select.value)));box.append(label);if(!isStatic)box.append(select);const materialSelect=document.createElement('select');materialSelect.setAttribute('aria-label','Material view '+D.l);for(const [value,title] of [[1,'Source albedo'],[2,'Lit reference']]){const option=document.createElement('option');option.value=String(value);option.textContent=title;if(value===2&&D.prepared.lighting.state!=='ready')option.disabled=true;materialSelect.appendChild(option);}const materialStatus=document.createElement('span'),lightingDetails=document.createElement('details'),lightingSummary=document.createElement('summary');lightingSummary.textContent='Lighting details';lightingDetails.append(lightingSummary,materialStatus);materialStatus.textContent=D.prepared.lighting.state==='ready'?' · Relative direct light + diffuse ambient approximation; not IBL.':' · Lit unavailable: '+D.prepared.lighting.reason;materialSelect.addEventListener('change',()=>{try{nxPreparedMaterialMode(D.sourceId,Number(materialSelect.value));}catch(error){materialStatus.textContent=' · '+String(error);materialSelect.value=String(D.prepared.materialMode);}});box.append(materialSelect,lightingDetails);const note=document.createElement('span');note.textContent=isStatic?' · Untextured generated geometry diagnostic. Rig and animation absent; anatomy unaccepted; topology '+(manifest.qualification?.state||'unknown')+'. Review display size is not anatomical calibration.':' · Source materials; discrete poses; display height '+manifest.displayHeight+' world units, not measured stature. BLEND hair mip filtering is available; MASK textures retain source-level sampling pending coverage qualification. Transparent sorting, autonomous navigation and deformed-foot contact remain unqualified. Full source motion uses the native evaluator when its verified clip is available.';box.append(note);nxRigInspection(D,box);nxPreparedBodyMount(D,box);nxPreparedMotionMount(D,box);__dnPanel.appendChild(box);\n DN.push(D);committed=D;nxInspect.asset=D.sourceId;nxInspect.mode=1;\n window.__nx_prepared_import={state:'submitted',asset:manifest.id,parts:parts.length,uniqueVertexStreams:streams.size,vertices:sourceVertices,sourceSha256:manifest.source.sha256,descriptorSha256:manifest.descriptor.sha256,poseSha256:manifest.poses?.sha256||null,geometryMode:isStatic?'static':'skinned',qualification:manifest.qualification||null,visualReview:'pending'};return {ok:true,...window.__nx_prepared_import};\n }catch(e){if(committed){const i=DN.indexOf(committed);if(i>=0)DN.splice(i,1);}if(controls)controls.remove();const cleanup=[];for(const p of parts){try{p.release();}catch(error){cleanup.push(String(error));}}window.__nx_prepared_import={state:\"needs-intervention\",asset:manifest.id,reason:String(e),cleanupErrors:cleanup,retryable:true};throw e;}\n}\nconst nxPreparedPending=new Map();async function nxPreparedImport(manifest){const key=manifest?.id;if(nxPreparedPending.has(key))return nxPreparedPending.get(key);const work=nxPreparedImportRun(manifest);nxPreparedPending.set(key,work);try{return await work;}finally{nxPreparedPending.delete(key);try{__dnsay();}catch(error){window.__nx_visiting_cast={...window.__nx_visiting_cast,state:\"needs-intervention\",reason:\"visitor-count-refresh:\"+String(error)};}}}\nwindow.nishiPreparedImport=nxPreparedImport;window.nishiPreparedPose=nxPreparedPose;window.nishiPreparedMaterialMode=nxPreparedMaterialMode;window.nishiPreparedMaterialSchema=nxPreparedMaterialSchema;window.nishiPreparedMaterialCapability=nxPreparedMaterialCapability;\n\nfunction nxPreparedControls(){\n if(document.getElementById('nx-prepared-controls'))return;const box=document.createElement('div');box.id='nx-prepared-controls';\n for(const manifest of NXPREPARED){const button=document.createElement('button'),status=document.createElement('span'),row={button,status,busy:false,loaded:false};button.type='button';button.disabled=true;button.textContent='Load '+(manifest.label||manifest.id);nxPreparedControlRows.push(row);button.addEventListener('click',async()=>{row.busy=true;button.disabled=true;status.textContent=' Preparing source materials…';try{const result=await nxPreparedImport(manifest);if(result.ok){row.loaded=true;status.textContent=' Loaded '+result.asset+' — use Frame character and native pose samples.';}else{status.textContent=' '+result.reason;}}catch(e){status.textContent=' Needs intervention: '+String(e);}finally{row.busy=false;button.disabled=row.loaded||!nxPreparedAdmission().ok;}});box.append(button,status);}\n nxMipControls(box);__dnPanel.appendChild(box);nxPreparedControlState='';nxPreparedRefresh();\n}\n" as *u8) 6} 7 8func main()->i64{ 9 let before:*u8=sys_mmap_try(GPE_OUT_CAP);let after:*u8=sys_mmap_try(GPE_OUT_CAP) 10 if (before as i64)==0||(after as i64)==0{return 1} 11 var mode:i64=0 12 while mode<2{ 13 gpe_prepared_path=0 as *u8 14 if mode==1{gpe_prepared_path="knowledge/gates/character-static-prepared-manifest-t338.json";gpe_prepared_sha="bfad4078d762e28d6f1fa91983fa5506df2be7e64beda1234bd8ff1c10cce2e3";gpe_prepared_bytes=3675} 15 gsb_failed=0;let a:i64=gpe_visitors_gpu_before_t340(before,0);if gsb_failed!=0{return 2} 16 gsb_failed=0;let b:i64=gpe_visitors_gpu(after,0);if gsb_failed!=0||a!=b{return 3} 17 var i:i64=0;while i<a{if before[i]!=after[i]{return 4};i=i+1} 18 gpe_puts("CHARACTER_SHARED_PARITY mode=");gpe_pn(mode);gpe_puts(" bytes=");gpe_pn(a);gpe_puts(" every_byte_equal=1\n") 19 mode=mode+1 20 } 21 sys_munmap_direct(before,GPE_OUT_CAP);sys_munmap_direct(after,GPE_OUT_CAP) 22 gpe_puts("CHARACTER_SHARED_PARITY passed=2/2\n");return 0 23}