| | #pragma once |
| |
|
| | #include "diffvg.h" |
| | #include "aabb.h" |
| | #include <vector> |
| |
|
| | struct Shape; |
| | struct ShapeGroup; |
| | struct Filter; |
| | struct DFilter; |
| |
|
| | struct BVHNode { |
| | int child0, child1; |
| | 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; |
| | |
| | AABB *shapes_bbox; |
| | BVHNode **path_bvhs; |
| | BVHNode **shape_groups_bvh_nodes; |
| | BVHNode *bvh_nodes; |
| |
|
| | int num_shapes; |
| | int num_shape_groups; |
| | |
| | |
| | int num_total_shapes; |
| | bool use_gpu; |
| | int gpu_index; |
| |
|
| | |
| | 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; |
| | BVHNode **shape_groups_bvh_nodes; |
| | BVHNode *bvh_nodes; |
| | int num_shapes; |
| | int num_shape_groups; |
| | int num_total_shapes; |
| | |
| | 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}; |
| | } |
| |
|