void init_active_pixels(const BufferView<Ray> &rays, BufferView<int> &active_pixels, bool use_gpu, ThrustCachedAllocator &thrust_alloc) { assert(rays.size() == active_pixels.size()); DISPATCH(use_gpu, thrust::sequence, active_pixels.begin(), active_pixels.end()); auto op = is_invalid_ray{rays.begin()}; auto new_end = DISPATCH_CACHED(use_gpu, thrust_alloc, thrust::remove_if, active_pixels.begin(), active_pixels.end(), active_pixels.begin(), op); active_pixels.count = new_end - active_pixels.begin(); }
void update_active_pixels(const BufferView<int> &active_pixels, const BufferView<Intersection> &isects, BufferView<int> &new_active_pixels, bool use_gpu) { auto op = is_valid_intersection{isects.begin()}; auto new_end = DISPATCH(use_gpu, thrust::copy_if, active_pixels.begin(), active_pixels.end(), new_active_pixels.begin(), op); new_active_pixels.count = new_end - new_active_pixels.begin(); }