| 295 | } |
| 296 | |
| 297 | bool MeshRenderer::initWithFile(std::string_view path) |
| 298 | { |
| 299 | _aabbDirty = true; |
| 300 | _meshes.clear(); |
| 301 | _meshVertexDatas.clear(); |
| 302 | AX_SAFE_RELEASE_NULL(_skeleton); |
| 303 | removeAllAttachNode(); |
| 304 | |
| 305 | if (loadFromCache(path)) |
| 306 | return true; |
| 307 | |
| 308 | MeshDatas* meshdatas = new MeshDatas(); |
| 309 | MaterialDatas* materialdatas = new MaterialDatas(); |
| 310 | NodeDatas* nodeDatas = new NodeDatas(); |
| 311 | if (loadFromFile(path, nodeDatas, meshdatas, materialdatas)) |
| 312 | { |
| 313 | if (initFrom(*nodeDatas, *meshdatas, *materialdatas)) |
| 314 | { |
| 315 | // add to cache |
| 316 | auto data = new MeshRendererCache::MeshRenderData(); |
| 317 | data->materialdatas = materialdatas; |
| 318 | data->nodedatas = nodeDatas; |
| 319 | data->meshVertexDatas = _meshVertexDatas; |
| 320 | for (const auto mesh : _meshes) |
| 321 | { |
| 322 | data->programStates.pushBack(mesh->getProgramState()); |
| 323 | } |
| 324 | |
| 325 | MeshRendererCache::getInstance()->addMeshRenderData(path, data); |
| 326 | AX_SAFE_DELETE(meshdatas); |
| 327 | _contentSize = getBoundingBox().size; |
| 328 | return true; |
| 329 | } |
| 330 | } |
| 331 | AX_SAFE_DELETE(meshdatas); |
| 332 | AX_SAFE_DELETE(materialdatas); |
| 333 | AX_SAFE_DELETE(nodeDatas); |
| 334 | |
| 335 | return false; |
| 336 | } |
| 337 | |
| 338 | bool MeshRenderer::initFrom(const NodeDatas& nodeDatas, const MeshDatas& meshdatas, const MaterialDatas& materialdatas) |
| 339 | { |
no test coverage detected