| 161 | } |
| 162 | |
| 163 | Scene::Scene(ref<Device> pDevice, SceneData&& sceneData) |
| 164 | : mpDevice(pDevice) |
| 165 | { |
| 166 | // Copy/move scene data to member variables. |
| 167 | mImportPaths = sceneData.importPaths; |
| 168 | mImportDicts = sceneData.importDicts; |
| 169 | mRenderSettings = sceneData.renderSettings; |
| 170 | mCameras = std::move(sceneData.cameras); |
| 171 | mSelectedCamera = sceneData.selectedCamera; |
| 172 | mCameraSpeed = sceneData.cameraSpeed; |
| 173 | mLights = std::move(sceneData.lights); |
| 174 | |
| 175 | mpMaterials = std::move(sceneData.pMaterials); |
| 176 | mGridVolumes = std::move(sceneData.gridVolumes); |
| 177 | mGrids = std::move(sceneData.grids); |
| 178 | mpEnvMap = sceneData.pEnvMap; |
| 179 | mSceneGraph = std::move(sceneData.sceneGraph); |
| 180 | mMetadata = std::move(sceneData.metadata); |
| 181 | |
| 182 | // Merge all geometry instance lists into one. |
| 183 | mGeometryInstanceData.reserve(sceneData.meshInstanceData.size() + sceneData.curveInstanceData.size() + sceneData.sdfGridInstances.size()); |
| 184 | mGeometryInstanceData.insert(std::end(mGeometryInstanceData), std::begin(sceneData.meshInstanceData), std::end(sceneData.meshInstanceData)); |
| 185 | mGeometryInstanceData.insert(std::end(mGeometryInstanceData), std::begin(sceneData.curveInstanceData), std::end(sceneData.curveInstanceData)); |
| 186 | mGeometryInstanceData.insert(std::end(mGeometryInstanceData), std::begin(sceneData.sdfGridInstances), std::end(sceneData.sdfGridInstances)); |
| 187 | |
| 188 | mMeshDesc = std::move(sceneData.meshDesc); |
| 189 | mMeshNames = std::move(sceneData.meshNames); |
| 190 | mMeshBBs = std::move(sceneData.meshBBs); |
| 191 | mMeshIdToInstanceIds = std::move(sceneData.meshIdToInstanceIds); |
| 192 | mMeshGroups = std::move(sceneData.meshGroups); |
| 193 | |
| 194 | mUseCompressedHitInfo = sceneData.useCompressedHitInfo; |
| 195 | mHas16BitIndices = sceneData.has16BitIndices; |
| 196 | mHas32BitIndices = sceneData.has32BitIndices; |
| 197 | |
| 198 | mCurveDesc = std::move(sceneData.curveDesc); |
| 199 | mCurveBBs = std::move(sceneData.curveBBs); |
| 200 | mCurveIndexData = std::move(sceneData.curveIndexData); |
| 201 | mCurveStaticData = std::move(sceneData.curveStaticData); |
| 202 | |
| 203 | mSDFGrids = std::move(sceneData.sdfGrids); |
| 204 | mSDFGridDesc = std::move(sceneData.sdfGridDesc); |
| 205 | mSDFGridMaxLODCount = std::move(sceneData.sdfGridMaxLODCount); |
| 206 | |
| 207 | mCustomPrimitiveDesc = std::move(sceneData.customPrimitiveDesc); |
| 208 | mCustomPrimitiveAABBs = std::move(sceneData.customPrimitiveAABBs); |
| 209 | |
| 210 | mMeshIndexData = std::move(sceneData.meshIndexData); |
| 211 | mMeshStaticData = std::move(sceneData.meshStaticData); |
| 212 | |
| 213 | mMeshIndexData.setBufferCountDefinePrefix("SCENE_INDEX"); |
| 214 | mMeshIndexData.createGpuBuffers(mpDevice, ResourceBindFlags::Index | ResourceBindFlags::ShaderResource); |
| 215 | mMeshStaticData.setBufferCountDefinePrefix("SCENE_VERTEX"); |
| 216 | mMeshStaticData.createGpuBuffers(mpDevice, ResourceBindFlags::ShaderResource | ResourceBindFlags::UnorderedAccess | ResourceBindFlags::Vertex); |
| 217 | |
| 218 | // Setup additional resources. |
| 219 | mFrontClockwiseRS[RasterizerState::CullMode::None] = RasterizerState::create(RasterizerState::Desc().setFrontCounterCW(false).setCullMode(RasterizerState::CullMode::None)); |
| 220 | mFrontClockwiseRS[RasterizerState::CullMode::Back] = RasterizerState::create(RasterizerState::Desc().setFrontCounterCW(false).setCullMode(RasterizerState::CullMode::Back)); |
nothing calls this directly
no test coverage detected