| 387 | } |
| 388 | |
| 389 | ISPCSubdivMesh::ISPCSubdivMesh (RTCDevice device, TutorialScene* scene_in, Ref<SceneGraph::SubdivMeshNode> in) |
| 390 | : geom(SUBDIV_MESH), positions(nullptr), normals(nullptr) |
| 391 | { |
| 392 | geom.geometry = rtcNewGeometry(device, RTC_GEOMETRY_TYPE_SUBDIVISION); |
| 393 | |
| 394 | positions = new Vec3fa*[in->numTimeSteps()]; |
| 395 | for (size_t i=0; i<in->numTimeSteps(); i++) |
| 396 | positions[i] = in->positions[i].data(); |
| 397 | |
| 398 | if (in->normals.size()) { |
| 399 | normals = new Vec3fa*[in->numTimeSteps()]; |
| 400 | for (size_t i=0; i<in->numTimeSteps(); i++) |
| 401 | normals[i] = in->normals[i].data(); |
| 402 | } |
| 403 | |
| 404 | texcoords = in->texcoords.data(); |
| 405 | position_indices = in->position_indices.data(); |
| 406 | normal_indices = in->normal_indices.data(); |
| 407 | texcoord_indices = in->texcoord_indices.data(); |
| 408 | position_subdiv_mode = in->position_subdiv_mode; |
| 409 | normal_subdiv_mode = in->normal_subdiv_mode; |
| 410 | texcoord_subdiv_mode = in->texcoord_subdiv_mode; |
| 411 | verticesPerFace = in->verticesPerFace.data(); |
| 412 | holes = in->holes.data(); |
| 413 | edge_creases = in->edge_creases.data(); |
| 414 | edge_crease_weights = in->edge_crease_weights.data(); |
| 415 | vertex_creases = in->vertex_creases.data(); |
| 416 | vertex_crease_weights = in->vertex_crease_weights.data(); |
| 417 | startTime = in->time_range.lower; |
| 418 | endTime = in->time_range.upper; |
| 419 | numTimeSteps = unsigned(in->numTimeSteps()); |
| 420 | numVertices = unsigned(in->numPositions()); |
| 421 | numFaces = unsigned(in->numPrimitives()); |
| 422 | numEdges = unsigned(in->position_indices.size()); |
| 423 | numEdgeCreases = unsigned(in->edge_creases.size()); |
| 424 | numVertexCreases = unsigned(in->vertex_creases.size()); |
| 425 | numHoles = unsigned(in->holes.size()); |
| 426 | numNormals = unsigned(in->numNormals()); |
| 427 | numTexCoords = unsigned(in->texcoords.size()); |
| 428 | geom.materialID = scene_in->materialID(in->material); |
| 429 | size_t numEdges = in->position_indices.size(); |
| 430 | size_t numFaces = in->verticesPerFace.size(); |
| 431 | subdivlevel = new float[numEdges]; |
| 432 | face_offsets = new unsigned[numFaces]; |
| 433 | for (size_t i=0; i<numEdges; i++) subdivlevel[i] = 1.0f; |
| 434 | int offset = 0; |
| 435 | for (size_t i=0; i<numFaces; i++) |
| 436 | { |
| 437 | face_offsets[i] = offset; |
| 438 | offset+=verticesPerFace[i]; |
| 439 | } |
| 440 | } |
| 441 | |
| 442 | ISPCSubdivMesh::~ISPCSubdivMesh () |
| 443 | { |
nothing calls this directly
no test coverage detected