     }
   }
 
-  return Image(camera.resolution, thrust::host_vector<float3>(colors),
-               // Color2Pixel(10));
+  return Image(host_camera.resolution, colors,
                Color2Pixel(m_parameter.mc_sample_times));
 }
 

    /* Initialization */
    indices.resize(num_pixels);
    InitializationKernal<<<divUp(num_pixels, kThreadsPerBlock),
                           kThreadsPerBlock>>>(indices_ptr, curand_states_ptr,
                                               num_pixels, counter);

    /* Create rays from camera */
    RayCastFromCameraKernel<<<divUp(num_pixels, kThreadsPerBlock),
                              kThreadsPerBlock>>>(
        camera, rays_ptr, num_pixels, m_scene.light, curand_states_ptr);

    for (size_t depth = 0; depth < m_parameter.max_trace_depth; depth++) {
      /* Step 0. Check if over. */

    float angle = kTwoPi * curand_uniform(curand_state);
    float distance =
        camera.aperture_radius * sqrt(curand_uniform(curand_state));
    float2 coord = make_float2(cos(angle) * distance, sin(angle) * distance);
    origin += x_axis * coord.x + y_axis * coord.y;
  }

  rays[idx].origin = origin;
  rays[idx].direction = normalize(point - origin);
  rays[idx].color = make_float3(intensity);
}

__global__ void PathTraceKernel(const Triangle* triangles,
