Spaces:
Runtime error
Runtime error
| struct Shape; | |
| struct ShapeGroup; | |
| struct Filter; | |
| struct DFilter; | |
| struct BVHNode { | |
| int child0, child1; // child1 is negative if it is a leaf | |
| AABB box; | |
| float max_radius; | |
| }; | |
| struct Scene { | |
| Scene(int canvas_width, | |
| int canvas_height, | |
| const std::vector<const Shape *> &shape_list, | |
| const std::vector<const ShapeGroup *> &shape_group_list, | |
| const Filter &filter, | |
| bool use_gpu, | |
| int gpu_index); | |
| ~Scene(); | |
| int canvas_width; | |
| int canvas_height; | |
| uint8_t *buffer; | |
| Shape *shapes; | |
| Shape *d_shapes; | |
| ShapeGroup *shape_groups; | |
| ShapeGroup *d_shape_groups; | |
| Filter *filter; | |
| DFilter *d_filter; | |
| // For accelerating intersection | |
| AABB *shapes_bbox; | |
| BVHNode **path_bvhs; // Only for Path | |
| BVHNode **shape_groups_bvh_nodes; // One BVH for each shape group | |
| BVHNode *bvh_nodes; | |
| int num_shapes; | |
| int num_shape_groups; | |
| // shape_groups reuse shape, so the total number of shapes | |
| // doesn't equal to num_shapes | |
| int num_total_shapes; | |
| bool use_gpu; | |
| int gpu_index; | |
| // For edge sampling | |
| float *shapes_length; | |
| float *sample_shapes_cdf; | |
| float *sample_shapes_pmf; | |
| int *sample_shape_id; | |
| int *sample_group_id; | |
| float **path_length_cdf; | |
| float **path_length_pmf; | |
| int **path_point_id_map; | |
| ShapeGroup get_d_shape_group(int group_id) const; | |
| Shape get_d_shape(int shape_id) const; | |
| float get_d_filter_radius() const; | |
| }; | |
| struct SceneData { | |
| int canvas_width; | |
| int canvas_height; | |
| Shape *shapes; | |
| Shape *d_shapes; | |
| ShapeGroup *shape_groups; | |
| ShapeGroup *d_shape_groups; | |
| Filter *filter; | |
| DFilter *d_filter; | |
| AABB *shapes_bbox; | |
| BVHNode **path_bvhs; // Only for Path | |
| BVHNode **shape_groups_bvh_nodes; | |
| BVHNode *bvh_nodes; | |
| int num_shapes; | |
| int num_shape_groups; | |
| int num_total_shapes; | |
| // For edge sampling | |
| float *shapes_length; | |
| float *sample_shapes_cdf; | |
| float *sample_shapes_pmf; | |
| int *sample_shape_id; | |
| int *sample_group_id; | |
| float **path_length_cdf; | |
| float **path_length_pmf; | |
| int **path_point_id_map; | |
| }; | |
| inline SceneData get_scene_data(const Scene &scene) { | |
| return SceneData{scene.canvas_width, | |
| scene.canvas_height, | |
| scene.shapes, | |
| scene.d_shapes, | |
| scene.shape_groups, | |
| scene.d_shape_groups, | |
| scene.filter, | |
| scene.d_filter, | |
| scene.shapes_bbox, | |
| scene.path_bvhs, | |
| scene.shape_groups_bvh_nodes, | |
| scene.bvh_nodes, | |
| scene.num_shapes, | |
| scene.num_shape_groups, | |
| scene.num_total_shapes, | |
| scene.shapes_length, | |
| scene.sample_shapes_cdf, | |
| scene.sample_shapes_pmf, | |
| scene.sample_shape_id, | |
| scene.sample_group_id, | |
| scene.path_length_cdf, | |
| scene.path_length_pmf, | |
| scene.path_point_id_map}; | |
| } | |