diff options
| author | Mike <contact@mikelittman.me> | 2026-10-23 09:49:49 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-10-23 21:49:49 +0800 |
| commit | f378dc9d6b8f74d34b4dfd3b65cf564c689bdb95 (patch) | |
| tree | 2043cee9aec99862882a0d5cb2423ad1ccfb02ea /indra/newview/llmodelpreview.cpp | |
| parent | adc157b9572574f623e0d7c497ff204da5050a2e (diff) | |
Add a loopback MCP server for the running viewer (#44)
The server is off by default and listens on 127.0.0.1. It can see and
act in the logged-in session, including inventory, object contents,
script editing, mesh and material upload, and animated mesh.
Diffstat (limited to 'indra/newview/llmodelpreview.cpp')
| -rw-r--r-- | indra/newview/llmodelpreview.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/indra/newview/llmodelpreview.cpp b/indra/newview/llmodelpreview.cpp index d97525d494..523d55b62f 100644 --- a/indra/newview/llmodelpreview.cpp +++ b/indra/newview/llmodelpreview.cpp @@ -975,6 +975,10 @@ void LLModelPreview::loadModelCallback(S32 loaded_lod) if (!mModelLoader) { mLoading = false; + if (mFMP) + { + ((LLFloaterModelPreview*)mFMP)->onHeadlessModelFailed("model loader was not running"); + } return; } if (getLoadState() >= LLModelLoader::ERROR_PARSING) @@ -982,6 +986,10 @@ void LLModelPreview::loadModelCallback(S32 loaded_lod) mLoading = false; mModelLoader = NULL; mLodsWithParsingError.push_back(loaded_lod); + if (mFMP) + { + ((LLFloaterModelPreview*)mFMP)->onHeadlessModelFailed("failed to parse the model file"); + } return; } @@ -1277,6 +1285,20 @@ void LLModelPreview::loadModelCallback(S32 loaded_lod) mModelLoadedSignal(); mModelLoader = NULL; + + // The next LOD load rejects a live loader. Schedule it after this + // callback returns so the mutex is released and mModelLoader is clear. + if (mFMP) + { + LLFloaterModelPreview* floater = (LLFloaterModelPreview*)mFMP; + doOnIdleOneTime([floater, loaded_lod]() + { + if (LLFloaterModelPreview::sInstance == floater) + { + floater->onHeadlessModelReady(loaded_lod); + } + }); + } } void LLModelPreview::resetPreviewTarget() |
