;;; Register usage: ;; vf20 light color ;; vf21 light direction ;; vf23 surfaceProps Lighting: nop iaddiu vi08,vi00,light nop lq vf23,surfaceProps(vi00) LightLoop: nop ilw.w vi15,0(vi08) ; load light type nop lqi.xyz vf20,(vi08++) ; light color nop ibeq vi15,vi00,PostLighting nop nop nop iaddiu vi15,vi15,LightSwitch nop jr vi15 LightSwitch: ;; Light type dispatch table nop nop nop b AmbientLight nop nop nop b DirectLight nop lqi.xyz vf21,(vi08++) ; light direction ;; Apply Ambient light AmbientLight: mulx.xyz vf20,vf20,vf23 xtop vi02 ; multiply color by surfProps - input pointer nop xitop vi01 ; vertex count AmbientLoop: nop lq vf02,2(vi02) ; load rgba nop nop nop nop nop nop add.xyz vf02,vf02,vf20 nop nop isubiu vi01,vi01,1 nop nop nop nop nop sq vf02,2(vi02) ; store rgba nop ibne vi01,vi00,AmbientLoop nop iaddiu vi02,vi02,numInAttribs nop b LightLoop nop nop ;; Apply Directional light DirectLight: mulz.xyz vf20,vf20,vf23 xtop vi02 ; multiply color by surfProps - input pointer nop xitop vi01 ; vertex count nop nop sub.xyz vf21,vf00,vf21 nop ; flip light direction DirectLoop: nop lq.xyz vf03,3(vi02) ; load normal nop lq vf02,2(vi02) ; load rgba nop nop nop nop mul.xyz vf01,vf03,vf21 nop ; normal*direction nop nop nop nop nop nop addy.x vf01,vf01,vf01 nop nop nop nop nop nop nop addz.x vf01,vf01,vf01 nop nop nop nop nop nop nop maxx vf01,vf01,vf00 nop ; clamp light factor nop nop nop nop addax acc,vf02,vf00 nop maddx vf02,vf20,vf01 nop ; accumulate nop isubiu vi01,vi01,1 nop nop nop nop nop sq vf02,2(vi02) ; store rgba nop ibne vi01,vi00,DirectLoop nop iaddiu vi02,vi02,numInAttribs nop b LightLoop nop nop ;;; Clamp lighting and multiply by material color PostLighting: nop xtop vi02 ; input pointer nop xitop vi01 ; vertex count PostLightLoop: nop lq vf02,2(vi02) ; load rgba nop nop nop nop nop loi 255.0 minii vf02,vf02,i nop nop nop nop nop nop nop mul vf02,vf02,vf25 nop ; scale color nop isubiu vi01,vi01,1 nop nop nop nop nop sq vf02,2(vi02) ; store rgba nop ibne vi01,vi00,PostLightLoop nop iaddiu vi02,vi02,numInAttribs