diff options
Diffstat (limited to 'intern/cycles/render/mesh.h')
-rw-r--r-- | intern/cycles/render/mesh.h | 57 |
1 files changed, 49 insertions, 8 deletions
diff --git a/intern/cycles/render/mesh.h b/intern/cycles/render/mesh.h index edad6d32f00..0aea55544f2 100644 --- a/intern/cycles/render/mesh.h +++ b/intern/cycles/render/mesh.h @@ -72,7 +72,15 @@ public: int num_segments() { return num_keys - 1; } - void bounds_grow(const int k, const float3 *curve_keys, const float *curve_radius, BoundBox& bounds) const; + void bounds_grow(const int k, + const float3 *curve_keys, + const float *curve_radius, + BoundBox& bounds) const; + void bounds_grow(const int k, + const float3 *curve_keys, + const float *curve_radius, + const Transform& aligned_space, + BoundBox& bounds) const; }; Curve get_curve(size_t i) const @@ -167,9 +175,16 @@ public: void add_vertex_normals(); void pack_normals(Scene *scene, uint *shader, float4 *vnormal); - void pack_verts(float4 *tri_verts, float4 *tri_vindex, size_t vert_offset); + void pack_verts(const vector<uint>& tri_prim_index, + uint4 *tri_vindex, + size_t vert_offset, + size_t tri_offset); void pack_curves(Scene *scene, float4 *curve_key_co, float4 *curve_data, size_t curvekey_offset); - void compute_bvh(SceneParams *params, Progress *progress, int n, int total); + void compute_bvh(DeviceScene *dscene, + SceneParams *params, + Progress *progress, + int n, + int total); bool need_attribute(Scene *scene, AttributeStandard std); bool need_attribute(Scene *scene, ustring name); @@ -213,15 +228,41 @@ public: void update_svm_attributes(Device *device, DeviceScene *dscene, Scene *scene, vector<AttributeRequestSet>& mesh_attributes); void device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress); - void device_update_object(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress); - void device_update_mesh(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress); - void device_update_attributes(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress); - void device_update_bvh(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress); void device_update_flags(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress); - void device_update_displacement_images(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress); + void device_free(Device *device, DeviceScene *dscene); void tag_update(Scene *scene); + +protected: + /* Calculate verts/triangles/curves offsets in global arrays. */ + void mesh_calc_offset(Scene *scene); + + void device_update_object(Device *device, + DeviceScene *dscene, + Scene *scene, + Progress& progress); + + void device_update_mesh(Device *device, + DeviceScene *dscene, + Scene *scene, + bool for_displacement, + Progress& progress); + + void device_update_attributes(Device *device, + DeviceScene *dscene, + Scene *scene, + Progress& progress); + + void device_update_bvh(Device *device, + DeviceScene *dscene, + Scene *scene, + Progress& progress); + + void device_update_displacement_images(Device *device, + DeviceScene *dscene, + Scene *scene, + Progress& progress); }; CCL_NAMESPACE_END |