| 114 | } |
| 115 | |
| 116 | void loadScene(const char* fileName, Scene& scene) |
| 117 | { |
| 118 | FILE* f = fopen(fileName, "rb"); |
| 119 | |
| 120 | if (!f) |
| 121 | { |
| 122 | printf("Cannot open scene file '%s'. Please run SceneConverter from Chapter7 and/or MergeMeshes from Chapter 9", fileName); |
| 123 | return; |
| 124 | } |
| 125 | |
| 126 | uint32_t sz = 0; |
| 127 | fread(&sz, sizeof(sz), 1, f); |
| 128 | |
| 129 | scene.hierarchy_.resize(sz); |
| 130 | scene.globalTransform_.resize(sz); |
| 131 | scene.localTransform_.resize(sz); |
| 132 | // TODO: check > -1 |
| 133 | // TODO: recalculate changedAtThisLevel() - find max depth of a node [or save scene.maxLevel] |
| 134 | fread(scene.localTransform_.data(), sizeof(glm::mat4), sz, f); |
| 135 | fread(scene.globalTransform_.data(), sizeof(glm::mat4), sz, f); |
| 136 | fread(scene.hierarchy_.data(), sizeof(Hierarchy), sz, f); |
| 137 | |
| 138 | // Mesh for node [index to some list of buffers] |
| 139 | loadMap(f, scene.materialForNode_); |
| 140 | loadMap(f, scene.meshes_); |
| 141 | |
| 142 | if (!feof(f)) |
| 143 | { |
| 144 | loadMap(f, scene.nameForNode_); |
| 145 | loadStringList(f, scene.names_); |
| 146 | |
| 147 | loadStringList(f, scene.materialNames_); |
| 148 | } |
| 149 | |
| 150 | fclose(f); |
| 151 | } |
| 152 | |
| 153 | void saveMap(FILE* f, const std::unordered_map<uint32_t, uint32_t>& map) |
| 154 | { |
no test coverage detected