| 167 | } |
| 168 | |
| 169 | unsigned addGeometry(const RTCBuildQuality quality, const Ref<SceneGraph::Node>& node) |
| 170 | { |
| 171 | nodes.push_back(node); |
| 172 | |
| 173 | if (Ref<SceneGraph::TriangleMeshNode> mesh = node.dynamicCast<SceneGraph::TriangleMeshNode>()) |
| 174 | { |
| 175 | RTCGeometry geom = rtcNewGeometry (device, RTC_GEOMETRY_TYPE_TRIANGLE); |
| 176 | AssertNoError(device); |
| 177 | rtcSetGeometryTimeStepCount(geom,(unsigned int)mesh->numTimeSteps()); |
| 178 | rtcSetGeometryBuildQuality(geom,quality); |
| 179 | AssertNoError(device); |
| 180 | rtcSetSharedGeometryBuffer(geom,RTC_BUFFER_TYPE_INDEX,0,RTC_FORMAT_UINT3,mesh->triangles.data(),0,sizeof(SceneGraph::TriangleMeshNode::Triangle), mesh->triangles.size()); |
| 181 | for (unsigned int t=0; t<mesh->numTimeSteps(); t++) |
| 182 | rtcSetSharedGeometryBuffer(geom,RTC_BUFFER_TYPE_VERTEX,t,RTC_FORMAT_FLOAT3,mesh->positions[t].data(),0,sizeof(SceneGraph::TriangleMeshNode::Vertex), mesh->positions[t].size()); |
| 183 | AssertNoError(device); |
| 184 | rtcCommitGeometry(geom); |
| 185 | unsigned int geomID = rtcAttachGeometry(scene,geom); |
| 186 | rtcReleaseGeometry(geom); |
| 187 | return geomID; |
| 188 | } |
| 189 | else if (Ref<SceneGraph::QuadMeshNode> mesh = node.dynamicCast<SceneGraph::QuadMeshNode>()) |
| 190 | { |
| 191 | RTCGeometry geom = rtcNewGeometry (device, RTC_GEOMETRY_TYPE_QUAD); |
| 192 | AssertNoError(device); |
| 193 | rtcSetGeometryTimeStepCount(geom, (unsigned int)mesh->numTimeSteps()); |
| 194 | rtcSetGeometryBuildQuality(geom,quality); |
| 195 | AssertNoError(device); |
| 196 | rtcSetSharedGeometryBuffer(geom,RTC_BUFFER_TYPE_INDEX,0,RTC_FORMAT_UINT4,mesh->quads.data(),0,sizeof(SceneGraph::QuadMeshNode::Quad), mesh->quads.size()); |
| 197 | for (unsigned int t=0; t<mesh->numTimeSteps(); t++) |
| 198 | rtcSetSharedGeometryBuffer(geom,RTC_BUFFER_TYPE_VERTEX,t,RTC_FORMAT_FLOAT3,mesh->positions[t].data(),0,sizeof(SceneGraph::QuadMeshNode::Vertex), mesh->positions[t].size()); |
| 199 | AssertNoError(device); |
| 200 | rtcCommitGeometry(geom); |
| 201 | unsigned int geomID = rtcAttachGeometry(scene,geom); |
| 202 | rtcReleaseGeometry(geom); |
| 203 | return geomID; |
| 204 | } |
| 205 | else if (Ref<SceneGraph::GridMeshNode> mesh = node.dynamicCast<SceneGraph::GridMeshNode>()) |
| 206 | { |
| 207 | RTCGeometry geom = rtcNewGeometry (device, RTC_GEOMETRY_TYPE_GRID); |
| 208 | AssertNoError(device); |
| 209 | rtcSetGeometryTimeStepCount(geom, (unsigned int)mesh->numTimeSteps()); |
| 210 | rtcSetGeometryBuildQuality(geom,quality); |
| 211 | AssertNoError(device); |
| 212 | rtcSetSharedGeometryBuffer(geom,RTC_BUFFER_TYPE_GRID,0,RTC_FORMAT_GRID,mesh->grids.data(),0,sizeof(SceneGraph::GridMeshNode::Grid), mesh->grids.size()); |
| 213 | for (unsigned int t=0; t<mesh->numTimeSteps(); t++) |
| 214 | rtcSetSharedGeometryBuffer(geom,RTC_BUFFER_TYPE_VERTEX,t,RTC_FORMAT_FLOAT3,mesh->positions[t].data(),0,sizeof(SceneGraph::GridMeshNode::Vertex), mesh->positions[t].size()); |
| 215 | AssertNoError(device); |
| 216 | rtcCommitGeometry(geom); |
| 217 | unsigned int geomID = rtcAttachGeometry(scene,geom); |
| 218 | rtcReleaseGeometry(geom); |
| 219 | return geomID; |
| 220 | } |
| 221 | else if (Ref<SceneGraph::SubdivMeshNode> mesh = node.dynamicCast<SceneGraph::SubdivMeshNode>()) |
| 222 | { |
| 223 | RTCGeometry geom = rtcNewGeometry (device, RTC_GEOMETRY_TYPE_SUBDIVISION); |
| 224 | AssertNoError(device); |
| 225 | rtcSetGeometryTimeStepCount(geom, (unsigned int)mesh->numTimeSteps()); |
| 226 | rtcSetGeometryBuildQuality(geom,quality); |
no test coverage detected