summaryrefslogtreecommitdiff
path: root/indra/newview/llmeshrepository.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview/llmeshrepository.cpp')
-rw-r--r--indra/newview/llmeshrepository.cpp97
1 files changed, 80 insertions, 17 deletions
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 0a1eadf4d0..55145c6ad7 100644
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -85,6 +85,8 @@ U32 LLMeshRepository::sPeakKbps = 0;
const U32 MAX_TEXTURE_UPLOAD_RETRIES = 5;
+void dumpLLSDToFile(const LLSD& content, std::string filename);
+
std::string header_lod[] =
{
"lowest_lod",
@@ -489,15 +491,36 @@ public:
mThread(thread)
{
}
- virtual void completedRaw(U32 status, const std::string& reason,
- const LLChannelDescriptors& channels,
- const LLIOPipe::buffer_ptr_t& buffer)
+ virtual void completed(U32 status,
+ const std::string& reason,
+ const LLSD& content)
{
- assert_main_thread();
+ //assert_main_thread();
llinfos << "completed" << llendl;
mThread->mPendingUploads--;
+ dumpLLSDToFile(content,"whole_model_response.xml");
+
+ mThread->mWholeModelUploadURL = content["uploader"].asString();
+ }
+};
+
+class LLWholeModelUploadResponder: public LLCurl::Responder
+{
+ LLMeshUploadThread* mThread;
+public:
+ LLWholeModelUploadResponder(LLMeshUploadThread* thread):
+ mThread(thread)
+ {
+ }
+ virtual void completed(U32 status,
+ const std::string& reason,
+ const LLSD& content)
+ {
+ //assert_main_thread();
+ llinfos << "upload completed" << llendl;
+ mThread->mPendingUploads--;
+ dumpLLSDToFile(content,"whole_model_upload_response.xml");
}
-
};
LLMeshRepoThread::LLMeshRepoThread()
@@ -1261,7 +1284,7 @@ LLMeshUploadThread::LLMeshUploadThread(LLMeshUploadThread::instance_list& data,
mUploadObjectAssetCapability = gAgent.getRegion()->getCapability("UploadObjectAsset");
mNewInventoryCapability = gAgent.getRegion()->getCapability("NewFileAgentInventoryVariablePrice");
- mWholeModelUploadCapability = gAgent.getRegion()->getCapability("NewFileAgentInventory");
+ mWholeModelFeeCapability = gAgent.getRegion()->getCapability("NewFileAgentInventory");
mOrigin += gAgent.getAtAxis() * scale.magVec();
}
@@ -1363,10 +1386,10 @@ void LLMeshUploadThread::run()
}
}
-#if 0
-void dumpLLSDToFile(LLSD& content, std::string& filename)
+#if 1
+void dumpLLSDToFile(const LLSD& content, std::string filename)
{
- std::ofstream of(filename);
+ std::ofstream of(filename.c_str());
LLSDSerialize::toPrettyXML(content,of);
}
#endif
@@ -1374,9 +1397,10 @@ void dumpLLSDToFile(LLSD& content, std::string& filename)
void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
{
// TODO where do textures go?
-
+
LLSD result;
+ LLSD res;
result["folder_id"] = gInventory.findCategoryUUIDForType(LLFolderType::FT_OBJECT);
result["asset_type"] = "mesh";
result["inventory_type"] = "object";
@@ -1385,9 +1409,9 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
// TODO "optional" fields from the spec
- LLSD res;
res["mesh_list"] = LLSD::emptyArray();
- res["texture_list"] = LLSD::emptyArray();
+// TODO Textures
+ //res["texture_list"] = LLSD::emptyArray();
S32 mesh_num = 0;
S32 texture_num = 0;
@@ -1433,10 +1457,15 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
LLQuaternion rot;
LLMatrix4 transformation = instance.mTransform;
decomposeMeshMatrix(transformation,pos,rot,scale);
-
+
+#if 0
mesh_entry["childpos"] = ll_sd_from_vector3(pos);
mesh_entry["childrot"] = ll_sd_from_quaternion(rot);
mesh_entry["scale"] = ll_sd_from_vector3(scale);
+#endif
+ mesh_entry["position"] = ll_sd_from_vector3(LLVector3());
+ mesh_entry["rotation"] = ll_sd_from_quaternion(rot);
+ mesh_entry["scale"] = ll_sd_from_vector3(scale);
// TODO should be binary.
std::string str = ostr.str();
@@ -1480,9 +1509,8 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
}
result["asset_resources"] = res;
-#if 0
- std::string name("whole_model.xml");
- dumpLLSDToFile(result,name);
+#if 1
+ dumpLLSDToFile(result,"whole_model.xml");
#endif
dest = result;
@@ -1541,9 +1569,24 @@ void LLMeshUploadThread::doWholeModelUpload()
mPendingUploads++;
LLCurlRequest::headers_t headers;
- mCurlRequest->post(mWholeModelUploadCapability, headers, model_data.asString(),
+ mCurlRequest->post(mWholeModelFeeCapability, headers, model_data,
new LLWholeModelFeeResponder(this));
+ do
+ {
+ mCurlRequest->process();
+ } while (mCurlRequest->getQueued() > 0);
+
+ mCurlRequest->post(mWholeModelUploadURL, headers, model_data["asset_resources"], new LLWholeModelUploadResponder(this));
+
+ do
+ {
+ mCurlRequest->process();
+ } while (mCurlRequest->getQueued() > 0);
+
+ delete mCurlRequest;
+ mCurlRequest = NULL;
+
// Currently a no-op.
mFinished = true;
}
@@ -3374,6 +3417,12 @@ void LLPhysicsDecomp::doDecomposition()
LLCDMeshData mesh;
S32 stage = mStageID[mCurRequest->mStage];
+ if (LLConvexDecomposition::getInstance() == NULL)
+ {
+ // stub library. do nothing.
+ return;
+ }
+
//load data intoLLCD
if (stage == 0)
{
@@ -3574,6 +3623,12 @@ void LLPhysicsDecomp::doDecompositionSingleHull()
LLConvexDecomposition* decomp = LLConvexDecomposition::getInstance();
+ if (decomp == NULL)
+ {
+ //stub. do nothing.
+ return;
+ }
+
for (S32 i = 0; i < param_count; ++i)
{
decomp->setParam(params[i].mName, params[i].mDefault.mIntOrEnumValue);
@@ -3653,6 +3708,14 @@ void LLPhysicsDecomp::doDecompositionSingleHull()
void LLPhysicsDecomp::run()
{
LLConvexDecomposition* decomp = LLConvexDecomposition::getInstance();
+ if (decomp == NULL)
+ {
+ // stub library. Set init to true so the main thread
+ // doesn't wait for this to finish.
+ mInited = true;
+ return;
+ }
+
decomp->initThread();
mInited = true;