code wiki / (root) / nx_beach_water_surface_gate.nx

nx_beach_water_surface_gate.nx source

↩ module page · 71 lines · 3335 B

1import "nx_beach_water_surface.nx" 2import "nx_gate_verdict.nx" 3func main() -> i64 { 4 let c: *i64=gv_ctr() 5 let base: i64=sys_mmap(CRAFT_TOTAL) as i64 6 let ray: *BeachWaterRay=sys_mmap(__size_of(BeachWaterRay)) as *BeachWaterRay 7 hq_set(base,10,10,4*256); hq_set(base,11,10,8*256) 8 hq_set(base,10,11,4*256); hq_set(base,11,11,8*256) 9 ray.origin_y_q8=9*256; ray.origin_z_q8=10*256+128 10 ray.direction_y_q8=-256; ray.max_parameter_q16=4*65536 11 var fraction: i64=0 12 var mismatches: i64=0 13 var wet: i64=0 14 while fraction < 256 { 15 ray.origin_x_q8=10*256+fraction 16 let hit: i64=beach_water_hit(base,ray,7*256) 17 var expected: i64=-1 18 if fraction < 128 { expected=2*65536; wet=wet+1 } 19 if hit != expected { mismatches=mismatches+1 } 20 fraction=fraction+1 21 } 22 gv_check_eq("analytic slope shoreline across all Q8 subcell positions",mismatches,0,c) 23 gv_check_eq("shoreline divides the cell halfway",wet,128,c) 24 ray.origin_x_q8=10*256 25 ray.origin_y_q8=6*256; ray.direction_y_q8=256 26 gv_check_eq("underwater ray reaches surface",beach_water_hit(base,ray,7*256),65536,c) 27 ray.direction_y_q8=0 28 gv_check_eq("parallel ray has no isolated intersection",beach_water_hit(base,ray,7*256),-1,c) 29 ray.direction_y_q8=-256 30 gv_check_eq("ray facing away from surface misses",beach_water_hit(base,ray,7*256),-1,c) 31 ray.origin_y_q8=9*256; ray.max_parameter_q16=65536 32 gv_check_eq("caller ray interval is respected",beach_water_hit(base,ray,7*256),-1,c) 33 ray.max_parameter_q16=4*65536; ray.origin_x_q8=-256 34 gv_check_eq("missing terrain coverage is not invented ocean",beach_water_hit(base,ray,7*256),-1,c) 35 wc_spec(base,2) 36 let level: i64=(wsp(base)[P_WATER]+1)*256 37 ray.origin_y_q8=level+256; ray.direction_y_q8=-256 38 ray.max_parameter_q16=2*65536 39 var seed: i64=1 40 var checked: i64=0 41 var generatedMismatch: i64=0 42 while seed <= 16 { 43 gencol(base,10,10,10,10,seed);gencol(base,11,10,11,10,seed) 44 gencol(base,10,11,10,11,seed);gencol(base,11,11,11,11,seed) 45 fraction=0 46 while fraction < 256 { 47 ray.origin_x_q8=10*256+fraction 48 ray.origin_z_q8=10*256+255-fraction 49 let bed: i64=wc_surface_source(base,ray.origin_x_q8,ray.origin_z_q8) 50 let hit: i64=beach_water_hit(base,ray,level) 51 if bed >= level { if hit != -1 { generatedMismatch=generatedMismatch+1 } } 52 else { if bed >= 0 { if hit != 65536 { generatedMismatch=generatedMismatch+1 } } } 53 checked=checked+1;fraction=fraction+1 54 } 55 seed=seed+1 56 } 57 gv_kv("generated_samples",checked) 58 gv_kv("water_level_q8",level) 59 gv_check_eq("generated beach field water intersection coherence",generatedMismatch,0,c) 60 let packed: i64=pack_uniforms_impl(base) 61 let bytes: *u8=(base+O_URAW+UR_WATER_Q8*4) as *u8 62 let packedLevel: i64=(bytes[0] as i64)+((bytes[1] as i64)<<8)+((bytes[2] as i64)<<16)+((bytes[3] as i64)<<24) 63 gv_check_eq("native frame carries simulation water surface",packedLevel,level,c) 64 gv_check_eq("native frame allocation remains unchanged",packed*4,URAW_BYTES,c) 65 let spec: *i64=wsp(base) 66 spec[P_WATER]=3 67 pack_uniforms_impl(base) 68 let changedLevel: i64=(bytes[0] as i64)+((bytes[1] as i64)<<8)+((bytes[2] as i64)<<16)+((bytes[3] as i64)<<24) 69 gv_check_eq("water level changes propagate on next frame",changedLevel,4*256,c) 70 return gv_verdict("BEACH-WATER-SURFACE",c,"Continuous still-water geometry and native frame data only; no renderer, wave, optical or visual acceptance.") 71}