unsigned int convertQuadMesh(ISPCQuadMesh* mesh, RTCScene scene_out) { unsigned int geomID = rtcNewQuadMesh (scene_out, RTC_GEOMETRY_STATIC, mesh->numQuads, mesh->numVertices, mesh->positions2 ? 2 : 1); rtcSetBuffer(scene_out, geomID, RTC_VERTEX_BUFFER, mesh->positions, 0, sizeof(Vec3fa )); if (mesh->positions2) rtcSetBuffer(scene_out, geomID, RTC_VERTEX_BUFFER1, mesh->positions2, 0, sizeof(Vec3fa )); rtcSetBuffer(scene_out, geomID, RTC_INDEX_BUFFER, mesh->quads, 0, sizeof(ISPCQuad)); mesh->geomID = geomID; return geomID; }
unsigned int convertQuadMesh(ISPCQuadMesh* mesh, RTCScene scene_out) { /* if more than a single timestep, mark object as dynamic */ RTCGeometryFlags object_flags = mesh->numTimeSteps > 1 ? RTC_GEOMETRY_DYNAMIC : RTC_GEOMETRY_STATIC; /* create object */ unsigned int geomID = rtcNewQuadMesh (scene_out, object_flags, mesh->numQuads, mesh->numVertices, mesh->numTimeSteps); /* generate vertex buffer */ Vec3fa* vertices = (Vec3fa*) rtcMapBuffer(scene_out,geomID,RTC_VERTEX_BUFFER); for (size_t i=0;i<mesh->numVertices;i++) vertices[i] = mesh->positions[0][i]; rtcUnmapBuffer(scene_out, geomID, RTC_VERTEX_BUFFER); /* set index buffer */ rtcSetBuffer(scene_out, geomID, RTC_INDEX_BUFFER, mesh->quads, 0, sizeof(ISPCQuad)); mesh->geom.geomID = geomID; return geomID; }
extern "C" unsigned ispcNewQuadMesh (RTCScene scene, RTCGeometryFlags flags, size_t numQuads, size_t numVertices, size_t numTimeSteps) { return rtcNewQuadMesh((RTCScene)scene,flags,numQuads,numVertices,numTimeSteps); }