48 size_t curve_key_size = 0;
49 size_t curve_size = 0;
50 size_t curve_segment_size = 0;
52 size_t point_size = 0;
54 size_t patch_size = 0;
58 Mesh *mesh =
static_cast<Mesh *
>(geom);
60 vert_size += mesh->verts.size();
68 if (mesh->patch_table) {
69 mesh->patch_table_offset = patch_size;
75 Hair *hair =
static_cast<Hair *
>(geom);
77 curve_key_size += hair->get_curve_keys().size();
90 progress.
set_status(
"Updating Mesh",
"Computing normals");
107 Mesh *mesh =
static_cast<Mesh *
>(geom);
109 if (mesh->shader_is_modified() || mesh->smooth_is_modified() ||
110 mesh->triangles_is_modified() || copy_all_data)
115 if (mesh->verts_is_modified() || copy_all_data) {
119 if (mesh->verts_is_modified() || mesh->triangles_is_modified() ||
120 mesh->vert_patch_uv_is_modified() || copy_all_data)
122 mesh->
pack_verts(&tri_verts[mesh->vert_offset],
125 &tri_patch_uv[mesh->vert_offset]);
135 progress.
set_status(
"Updating Mesh",
"Copying Mesh to device");
145 if (curve_segment_size != 0) {
146 progress.
set_status(
"Updating Mesh",
"Copying Curves to device");
158 Hair *hair =
static_cast<Hair *
>(geom);
160 bool curve_keys_co_modified = hair->curve_radius_is_modified() ||
161 hair->curve_keys_is_modified();
162 bool curve_data_modified = hair->curve_shader_is_modified() ||
163 hair->curve_first_key_is_modified();
165 if (!curve_keys_co_modified && !curve_data_modified && !copy_all_data) {
184 if (point_size != 0) {
185 progress.
set_status(
"Updating Mesh",
"Copying Point clouds to device");
206 progress.
set_status(
"Updating Mesh",
"Copying Patches to device");
212 Mesh *mesh =
static_cast<Mesh *
>(geom);
215 if (mesh->patch_table) {
217 mesh->patch_table_offset);
device_vector< uint > points_shader
device_vector< uint > patches
device_vector< float4 > points
device_vector< KernelCurveSegment > curve_segments
device_vector< KernelCurve > curves
device_vector< packed_uint3 > tri_vindex
device_vector< float4 > curve_keys
device_vector< packed_float3 > tri_vnormal
device_vector< uint > tri_shader
device_vector< packed_float3 > tri_verts
device_vector< float2 > tri_patch_uv
device_vector< uint > tri_patch
void device_update_mesh(Device *device, DeviceScene *dscene, Scene *scene, Progress &progress)
bool is_pointcloud() const
size_t curve_segment_offset
size_t num_curves() const
void pack_curves(Scene *scene, float4 *curve_key_co, KernelCurve *curve, KernelCurveSegment *curve_segments)
size_t num_segments() const
void set_status(const string &status_, const string &substatus_="")
void copy_to_device_if_modified()
T * alloc(size_t width, size_t height=0, size_t depth=0)
#define CCL_NAMESPACE_END
int num_ptex_faces() const
size_t get_num_subd_faces() const
void pack_patches(uint *patch_data)
void pack_verts(packed_float3 *tri_verts, packed_uint3 *tri_vindex, uint *tri_patch, float2 *tri_patch_uv)
size_t num_triangles() const
void pack_normals(packed_float3 *vnormal)
SubdFace get_subd_face(size_t index) const
void pack_shaders(Scene *scene, uint *shader)
void copy_adjusting_offsets(uint *dest, int doffset)
void pack(Scene *scene, float4 *packed_points, uint *packed_shader)
size_t num_points() const
vector< Geometry * > geometry
VecBase< float, 4 > float4