| 80 | } // namespace |
| 81 | |
| 82 | std::map<std::string, std::string> SceneBuilderDump::getDebugContent(const SceneBuilder& sceneBuilder) |
| 83 | { |
| 84 | struct FullMeshDesc |
| 85 | { |
| 86 | MeshID id; |
| 87 | const SceneBuilder::MeshSpec* meshSpec; |
| 88 | const CachedMesh* cachedMesh{nullptr}; |
| 89 | const CachedCurve* cachedCurve{nullptr}; // when using polytube hair |
| 90 | std::string deduplicatedName; |
| 91 | }; |
| 92 | |
| 93 | struct FullCurveDesc |
| 94 | { |
| 95 | CurveID id; |
| 96 | const SceneBuilder::CurveSpec* curveSpec; |
| 97 | const CachedCurve* cachedCurve{nullptr}; |
| 98 | std::string deduplicatedName; |
| 99 | }; |
| 100 | |
| 101 | std::vector<FullMeshDesc> sortedMeshes(sceneBuilder.mMeshes.size()); |
| 102 | std::vector<FullCurveDesc> sortedCurves(sceneBuilder.mCurves.size()); |
| 103 | |
| 104 | for (size_t i = 0; i < sceneBuilder.mMeshes.size(); ++i) |
| 105 | { |
| 106 | sortedMeshes[i].id = MeshID{i}; |
| 107 | sortedMeshes[i].meshSpec = &sceneBuilder.mMeshes[i]; |
| 108 | } |
| 109 | |
| 110 | for (size_t i = 0; i < sceneBuilder.mCurves.size(); ++i) |
| 111 | { |
| 112 | sortedCurves[i].id = CurveID{i}; |
| 113 | sortedCurves[i].curveSpec = &sceneBuilder.mCurves[i]; |
| 114 | } |
| 115 | |
| 116 | for (size_t i = 0; i < sceneBuilder.mSceneData.cachedCurves.size(); ++i) |
| 117 | { |
| 118 | const CachedCurve& cached = sceneBuilder.mSceneData.cachedCurves[i]; |
| 119 | if (cached.tessellationMode == CurveTessellationMode::LinearSweptSphere) |
| 120 | { |
| 121 | sortedCurves[cached.geometryID.get()].cachedCurve = &sceneBuilder.mSceneData.cachedCurves[i]; |
| 122 | } |
| 123 | else |
| 124 | { |
| 125 | sortedMeshes[cached.geometryID.get()].cachedCurve = &sceneBuilder.mSceneData.cachedCurves[i]; |
| 126 | } |
| 127 | } |
| 128 | |
| 129 | for (size_t i = 0; i < sceneBuilder.mSceneData.cachedMeshes.size(); ++i) |
| 130 | { |
| 131 | const CachedMesh& cached = sceneBuilder.mSceneData.cachedMeshes[i]; |
| 132 | sortedMeshes[cached.meshID.get()].cachedCurve = &sceneBuilder.mSceneData.cachedCurves[i]; |
| 133 | } |
| 134 | |
| 135 | std::sort( |
| 136 | sortedMeshes.begin(), |
| 137 | sortedMeshes.end(), |
| 138 | [](const FullMeshDesc& lhs, const FullMeshDesc& rhs) { return lhs.meshSpec->name < rhs.meshSpec->name; } |
| 139 | ); |
nothing calls this directly
no test coverage detected