summaryrefslogtreecommitdiff
path: root/indra/newview/llmodelpreview.cpp
diff options
context:
space:
mode:
authorMike <contact@mikelittman.me>2026-10-23 09:49:49 -0400
committerGitHub <noreply@github.com>2026-10-23 21:49:49 +0800
commitf378dc9d6b8f74d34b4dfd3b65cf564c689bdb95 (patch)
tree2043cee9aec99862882a0d5cb2423ad1ccfb02ea /indra/newview/llmodelpreview.cpp
parentadc157b9572574f623e0d7c497ff204da5050a2e (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.cpp22
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()