diff options
| -rw-r--r-- | indra/newview/gltfscenemanager.cpp | 59 | ||||
| -rw-r--r-- | indra/newview/llface.cpp | 8 | 
2 files changed, 39 insertions, 28 deletions
| diff --git a/indra/newview/gltfscenemanager.cpp b/indra/newview/gltfscenemanager.cpp index ce54fa4c12..ed66753267 100644 --- a/indra/newview/gltfscenemanager.cpp +++ b/indra/newview/gltfscenemanager.cpp @@ -371,43 +371,46 @@ void GLTFSceneManager::addGLTFObject(LLViewerObject* obj, LLUUID gltf_id)  //static  void GLTFSceneManager::onGLTFBinLoadComplete(const LLUUID& id, LLAssetType::EType asset_type, void* user_data, S32 status, LLExtStat ext_status)  { -    LLViewerObject* obj = (LLViewerObject*)user_data; -    llassert(asset_type == LLAssetType::AT_GLTF_BIN); - -    if (status == LL_ERR_NOERR) -    { -        if (obj) +    LLAppViewer::instance()->postToMainCoro([=]()          { -            // find the Buffer with the given id in the asset -            if (obj->mGLTFAsset) -            { -                obj->mGLTFAsset->mPendingBuffers--; - +            LLViewerObject* obj = (LLViewerObject*)user_data; +            llassert(asset_type == LLAssetType::AT_GLTF_BIN); -                if (obj->mGLTFAsset->mPendingBuffers == 0) +            if (status == LL_ERR_NOERR) +            { +                if (obj)                  { -                    if (obj->mGLTFAsset->prep()) +                    // find the Buffer with the given id in the asset +                    if (obj->mGLTFAsset)                      { -                        GLTFSceneManager& mgr = GLTFSceneManager::instance(); -                        if (std::find(mgr.mObjects.begin(), mgr.mObjects.end(), obj) == mgr.mObjects.end()) +                        obj->mGLTFAsset->mPendingBuffers--; + + +                        if (obj->mGLTFAsset->mPendingBuffers == 0)                          { -                            GLTFSceneManager::instance().mObjects.push_back(obj); +                            if (obj->mGLTFAsset->prep()) +                            { +                                GLTFSceneManager& mgr = GLTFSceneManager::instance(); +                                if (std::find(mgr.mObjects.begin(), mgr.mObjects.end(), obj) == mgr.mObjects.end()) +                                { +                                    GLTFSceneManager::instance().mObjects.push_back(obj); +                                } +                            } +                            else +                            { +                                LL_WARNS("GLTF") << "Failed to prepare GLTF asset: " << id << LL_ENDL; +                                obj->mGLTFAsset = nullptr; +                            }                          }                      } -                    else -                    { -                        LL_WARNS("GLTF") << "Failed to prepare GLTF asset: " << id << LL_ENDL; -                        obj->mGLTFAsset = nullptr; -                    }                  }              } -        } -    } -    else -    { -        LL_WARNS("GLTF") << "Failed to load GLTF asset: " << id << LL_ENDL; -        obj->unref(); -    } +            else +            { +                LL_WARNS("GLTF") << "Failed to load GLTF asset: " << id << LL_ENDL; +                obj->unref(); +            } +        });  }  //static diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index ce68474211..297661effd 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -2268,6 +2268,14 @@ bool LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius)          center.mul(0.5f);          size.setSub(mRiggedExtents[1], mRiggedExtents[0]);      } +    else if (mDrawablep && mVObjp.notNull() && mVObjp->getPartitionType() == LLViewerRegion::PARTITION_PARTICLE && mDrawablep->getSpatialGroup()) +    { // use box of spatial group for particles (over approximates size, but we don't actually have a good size per particle) +        LLSpatialGroup* group = mDrawablep->getSpatialGroup(); +        const LLVector4a* extents = group->getExtents(); +        size.setSub(extents[1], extents[0]); +        center.setAdd(extents[1], extents[0]); +        center.mul(0.5f); +    }      else      {          center.load3(getPositionAgent().mV); | 
