bool PassGBuffer_Fluid::culling( PSET_RID psid, const PSetInstance &inst ) { const ParticleSet *rc = atmGetParticleSet(psid); vec4 posf = inst.transform[3]; posf.w = 0.0f; simdvec4 pos = simdvec4(posf); AABB aabb = rc->getAABB(); aabb[0] = (simdvec4(aabb[0])+pos).Data; aabb[1] = (simdvec4(aabb[1])+pos).Data; if(!ist::TestFrustumAABB(*atmGetViewFrustum(), aabb)) { return false; } return true; }
__forceinline simdvec3 _project(const simdmat4& matrix, const simdvec3& point) { simdvec4 vec_hs = matrix * simdvec4(point.x, point.y, point.z, simdfloat(1.0f)); return simdvec3(vec_hs.x, vec_hs.y, vec_hs.z) / simdvec3(vec_hs.w); }