| 193 | } |
| 194 | |
| 195 | bool MeshRenderer::loadFromCache(std::string_view path) |
| 196 | { |
| 197 | auto meshdata = MeshRendererCache::getInstance()->getMeshRenderData(path); |
| 198 | if (meshdata) |
| 199 | { |
| 200 | for (auto&& it : meshdata->meshVertexDatas) |
| 201 | { |
| 202 | _meshVertexDatas.pushBack(it); |
| 203 | } |
| 204 | _skeleton = Skeleton3D::create(meshdata->nodedatas->skeleton); |
| 205 | AX_SAFE_RETAIN(_skeleton); |
| 206 | |
| 207 | const bool singleMesh = (meshdata->nodedatas->nodes.size() == 1); |
| 208 | for (const auto& it : meshdata->nodedatas->nodes) |
| 209 | { |
| 210 | if (it) |
| 211 | { |
| 212 | createNode(it, this, *(meshdata->materialdatas), singleMesh); |
| 213 | } |
| 214 | } |
| 215 | |
| 216 | for (const auto& it : meshdata->nodedatas->skeleton) |
| 217 | { |
| 218 | if (it) |
| 219 | { |
| 220 | createAttachMeshRendererNode(it, *(meshdata->materialdatas)); |
| 221 | } |
| 222 | } |
| 223 | |
| 224 | for (ssize_t i = 0, size = _meshes.size(); i < size; ++i) |
| 225 | { |
| 226 | // cloning is needed in order to have one state per mesh |
| 227 | auto glstate = meshdata->programStates.at(i); |
| 228 | _meshes.at(i)->setProgramState(glstate->clone()); |
| 229 | } |
| 230 | return true; |
| 231 | } |
| 232 | |
| 233 | return false; |
| 234 | } |
| 235 | |
| 236 | bool MeshRenderer::loadFromFile(std::string_view path, |
| 237 | NodeDatas* nodedatas, |
no test coverage detected