Ejemplo n.º 1
0
void sample_primary_rays(const Camera &camera,
                         const BufferView<CameraSample> &samples,
                         BufferView<Ray> rays,
                         BufferView<RayDifferential> ray_differentials,
                         bool use_gpu) {
    parallel_for(primary_ray_sampler{
        camera, samples.begin(), rays.begin(), ray_differentials.begin()},
        samples.size(), use_gpu);
}
Ejemplo n.º 2
0
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();
}
Ejemplo n.º 3
0
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();
}
Ejemplo n.º 4
0
void accumulate_roughness(const Scene &scene,
                          const BufferView<DTexture1> &d_roughness_texs,
                          BufferView<DMaterial> d_materials) {
    parallel_for(roughness_accumulator{d_roughness_texs.begin(), d_materials.begin()},
        d_roughness_texs.size(), scene.use_gpu);
}
Ejemplo n.º 5
0
void accumulate_specular(const Scene &scene,
                         const BufferView<DTexture3> &d_specular_texs,
                         BufferView<DMaterial> d_materials) {
    parallel_for(specular_accumulator{d_specular_texs.begin(), d_materials.begin()},
        d_specular_texs.size(), scene.use_gpu);
}