summaryrefslogtreecommitdiff
path: root/indra/newview
diff options
context:
space:
mode:
Diffstat (limited to 'indra/newview')
-rw-r--r--indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl3
-rw-r--r--indra/newview/lldrawpoolalpha.cpp39
-rw-r--r--indra/newview/llface.cpp31
-rw-r--r--indra/newview/llfloatermodelpreview.cpp162
-rw-r--r--indra/newview/llmanipscale.cpp1
-rwxr-xr-x[-rw-r--r--]indra/newview/llmeshrepository.cpp65
-rw-r--r--indra/newview/llviewerregion.cpp1
-rw-r--r--indra/newview/pipeline.cpp15
8 files changed, 192 insertions, 125 deletions
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
index 5e6c5ebec8..d781e08548 100644
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
@@ -23,7 +23,6 @@ void main()
color.rgb = fullbrightScaleSoftClip(color.rgb);
- //gl_FragColor = color;
- gl_FragColor = vec4(1,0,1,1);
+ gl_FragColor = color;
}
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
index 71eee0188c..8d46133912 100644
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -125,6 +125,9 @@ void LLDrawPoolAlpha::beginPostDeferredPass(S32 pass)
{
simple_shader = &gDeferredAlphaProgram;
fullbright_shader = &gObjectFullbrightProgram;
+
+ //prime simple shader (loads shadow relevant uniforms)
+ gPipeline.bindDeferredShader(*simple_shader);
}
else
{
@@ -290,11 +293,6 @@ void LLDrawPoolAlpha::render(S32 pass)
gGL.setSceneBlendType(LLRender::BT_ALPHA);
}
- if (deferred_render && current_shader != NULL)
- {
- gPipeline.unbindDeferredShader(*current_shader);
- }
-
if (sShowDebugAlpha)
{
if(gPipeline.canUseWindLightShaders())
@@ -346,8 +344,7 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
{
BOOL initialized_lighting = FALSE;
BOOL light_enabled = TRUE;
- S32 diffuse_channel = 0;
-
+
BOOL use_shaders = gPipeline.canUseVertexShaders();
for (LLCullResult::sg_list_t::iterator i = gPipeline.beginAlphaGroups(); i != gPipeline.endAlphaGroups(); ++i)
@@ -411,29 +408,11 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
if(use_shaders && (current_shader != target_shader))
{
llassert(target_shader != NULL);
- if (deferred_render && current_shader != NULL)
- {
- gPipeline.unbindDeferredShader(*current_shader);
- diffuse_channel = 0;
- }
current_shader = target_shader;
- if (deferred_render)
- {
- gPipeline.bindDeferredShader(*current_shader);
- diffuse_channel = current_shader->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
- }
- else
- {
- current_shader->bind();
- }
+ current_shader->bind();
}
else if (!use_shaders && current_shader != NULL)
{
- if (deferred_render)
- {
- gPipeline.unbindDeferredShader(*current_shader);
- diffuse_channel = 0;
- }
LLGLSLShader::bindNoShader();
current_shader = NULL;
}
@@ -510,12 +489,8 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
}
}
- if (deferred_render && current_shader != NULL)
- {
- gPipeline.unbindDeferredShader(*current_shader);
- LLVertexBuffer::unbind();
- }
-
+ LLVertexBuffer::unbind();
+
if (!light_enabled)
{
gPipeline.enableLightsDynamic();
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
index 540ed054e9..b6566fcbd0 100644
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -693,6 +693,19 @@ static void xform(LLVector2 &tex_coord, F32 cosAng, F32 sinAng, F32 offS, F32 of
}
+bool less_than_max_mag(const LLVector4a& vec)
+{
+ LLVector4a MAX_MAG;
+ MAX_MAG.splat(1024.f*1024.f);
+
+ LLVector4a val;
+ val.setAbs(vec);
+
+ S32 lt = val.lessThan(MAX_MAG).getGatheredBits() & 0x7;
+
+ return lt == 0x7;
+}
+
BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f,
const LLMatrix4& mat_vert_in, const LLMatrix3& mat_normal_in, BOOL global_volume)
{
@@ -727,6 +740,8 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f,
min = face.mExtents[0];
max = face.mExtents[1];
+ llassert(less_than_max_mag(min));
+ llassert(less_than_max_mag(max));
//min, max are in volume space, convert to drawable render space
LLVector4a center;
@@ -738,6 +753,9 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f,
size.setSub(max, min);
size.mul(0.5f);
+ llassert(less_than_max_mag(min));
+ llassert(less_than_max_mag(max));
+
if (!global_volume)
{
//VECTORIZE THIS
@@ -775,6 +793,8 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f,
newMin = newMax = center;
+ llassert(less_than_max_mag(center));
+
for (U32 i = 0; i < 4; i++)
{
LLVector4a delta;
@@ -786,6 +806,9 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f,
newMin.setMin(newMin,min);
newMax.setMax(newMax,max);
+
+ llassert(less_than_max_mag(newMin));
+ llassert(less_than_max_mag(newMax));
}
if (!mDrawablep->isActive())
@@ -794,14 +817,22 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f,
offset.load3(mDrawablep->getRegion()->getOriginAgent().mV);
newMin.add(offset);
newMax.add(offset);
+
+ llassert(less_than_max_mag(newMin));
+ llassert(less_than_max_mag(newMax));
}
t.setAdd(newMin, newMax);
t.mul(0.5f);
+ llassert(less_than_max_mag(t));
+
//VECTORIZE THIS
mCenterLocal.set(t.getF32ptr());
+ llassert(less_than_max_mag(newMin));
+ llassert(less_than_max_mag(newMax));
+
t.setSub(newMax,newMin);
mBoundingSphereRadius = t.getLength3().getF32()*0.5f;
diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp
index 92ec714c80..409d8bc79a 100644
--- a/indra/newview/llfloatermodelpreview.cpp
+++ b/indra/newview/llfloatermodelpreview.cpp
@@ -1289,11 +1289,7 @@ void stretch_extents(LLModel* model, LLMatrix4& mat, LLVector3& min, LLVector3&
void LLModelLoader::run()
{
- if (!doLoadModel())
- {
- mPreview = NULL;
- }
-
+ doLoadModel();
doOnIdleOneTime(boost::bind(&LLModelLoader::loadModelCallback,this));
}
@@ -2305,87 +2301,87 @@ bool LLModelLoader::isNodeAJoint( domNode* pNode )
//-----------------------------------------------------------------------------
// verifyCount
//-----------------------------------------------------------------------------
-bool LLModelPreview::verifyCount( int expected, int result )
-{
- if ( expected != result )
- {
- llinfos<< "Error: (expected/got)"<<expected<<"/"<<result<<"verts"<<llendl;
- return false;
- }
- return true;
-}
+bool LLModelPreview::verifyCount( int expected, int result )
+{
+ if ( expected != result )
+ {
+ llinfos<< "Error: (expected/got)"<<expected<<"/"<<result<<"verts"<<llendl;
+ return false;
+ }
+ return true;
+}
//-----------------------------------------------------------------------------
// verifyController
//-----------------------------------------------------------------------------
-bool LLModelPreview::verifyController( domController* pController )
-{
-
- bool result = true;
-
- domSkin* pSkin = pController->getSkin();
-
- if ( pSkin )
- {
- xsAnyURI & uri = pSkin->getSource();
- domElement* pElement = uri.getElement();
-
- if ( !pElement )
- {
- llinfos<<"Can't resolve skin source"<<llendl;
- return false;
- }
-
- daeString type_str = pElement->getTypeName();
- if ( stricmp(type_str, "geometry") == 0 )
- {
- //Skin is reference directly by geometry and get the vertex count from skin
- domSkin::domVertex_weights* pVertexWeights = pSkin->getVertex_weights();
- U32 vertexWeightsCount = pVertexWeights->getCount();
- domGeometry* pGeometry = (domGeometry*) (domElement*) uri.getElement();
- domMesh* pMesh = pGeometry->getMesh();
-
- if ( pMesh )
- {
- //Get vertex count from geometry
- domVertices* pVertices = pMesh->getVertices();
- if ( !pVertices )
- {
- llinfos<<"No vertices!"<<llendl;
- return false;
- }
-
- if ( pVertices )
- {
- xsAnyURI src = pVertices->getInput_array()[0]->getSource();
- domSource* pSource = (domSource*) (domElement*) src.getElement();
- U32 verticesCount = pSource->getTechnique_common()->getAccessor()->getCount();
- result = verifyCount( verticesCount, vertexWeightsCount );
- if ( !result )
- {
- return result;
- }
- }
- }
-
- U32 vcountCount = (U32) pVertexWeights->getVcount()->getValue().getCount();
- result = verifyCount( vcountCount, vertexWeightsCount );
- if ( !result )
- {
- return result;
- }
-
- domInputLocalOffset_Array& inputs = pVertexWeights->getInput_array();
- U32 sum = 0;
- for (size_t i=0; i<vcountCount; i++)
- {
- sum += pVertexWeights->getVcount()->getValue()[i];
- }
- result = verifyCount( sum * inputs.getCount(), (domInt) pVertexWeights->getV()->getValue().getCount() );
- }
- }
-
- return result;
-}
+bool LLModelPreview::verifyController( domController* pController )
+{
+
+ bool result = true;
+
+ domSkin* pSkin = pController->getSkin();
+
+ if ( pSkin )
+ {
+ xsAnyURI & uri = pSkin->getSource();
+ domElement* pElement = uri.getElement();
+
+ if ( !pElement )
+ {
+ llinfos<<"Can't resolve skin source"<<llendl;
+ return false;
+ }
+
+ daeString type_str = pElement->getTypeName();
+ if ( stricmp(type_str, "geometry") == 0 )
+ {
+ //Skin is reference directly by geometry and get the vertex count from skin
+ domSkin::domVertex_weights* pVertexWeights = pSkin->getVertex_weights();
+ U32 vertexWeightsCount = pVertexWeights->getCount();
+ domGeometry* pGeometry = (domGeometry*) (domElement*) uri.getElement();
+ domMesh* pMesh = pGeometry->getMesh();
+
+ if ( pMesh )
+ {
+ //Get vertex count from geometry
+ domVertices* pVertices = pMesh->getVertices();
+ if ( !pVertices )
+ {
+ llinfos<<"No vertices!"<<llendl;
+ return false;
+ }
+
+ if ( pVertices )
+ {
+ xsAnyURI src = pVertices->getInput_array()[0]->getSource();
+ domSource* pSource = (domSource*) (domElement*) src.getElement();
+ U32 verticesCount = pSource->getTechnique_common()->getAccessor()->getCount();
+ result = verifyCount( verticesCount, vertexWeightsCount );
+ if ( !result )
+ {
+ return result;
+ }
+ }
+ }
+
+ U32 vcountCount = (U32) pVertexWeights->getVcount()->getValue().getCount();
+ result = verifyCount( vcountCount, vertexWeightsCount );
+ if ( !result )
+ {
+ return result;
+ }
+
+ domInputLocalOffset_Array& inputs = pVertexWeights->getInput_array();
+ U32 sum = 0;
+ for (size_t i=0; i<vcountCount; i++)
+ {
+ sum += pVertexWeights->getVcount()->getValue()[i];
+ }
+ result = verifyCount( sum * inputs.getCount(), (domInt) pVertexWeights->getV()->getValue().getCount() );
+ }
+ }
+
+ return result;
+}
//-----------------------------------------------------------------------------
// extractTranslation()
diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp
index 0eedabb5de..4eb94dfb8e 100644
--- a/indra/newview/llmanipscale.cpp
+++ b/indra/newview/llmanipscale.cpp
@@ -92,7 +92,6 @@ F32 get_default_max_prim_scale(bool is_flora)
// a bit of a hack, but if it's foilage, we don't want to use the
// new larger scale which would result in giant trees and grass
if (gMeshRepo.meshRezEnabled() &&
- !gAgent.getRegion()->getCapability("ObjectAdd").empty() &&
!is_flora)
{
return DEFAULT_MAX_PRIM_SCALE;
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 8e5d132096..111802cd47 100644..100755
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -468,6 +468,49 @@ public:
};
+void log_upload_error(const LLSD& content,std::string stage)
+{
+ if (content.has("error"))
+ {
+ const LLSD& err = content["error"];
+ llwarns << "mesh upload failed, stage " << stage
+ << " message " << err["message"].asString() << " id " << err["identifier"].asString()
+ << llendl;
+
+ if (content.has("errors"))
+ {
+ const LLSD& err_list = content["errors"];
+ for (LLSD::array_const_iterator it = err_list.beginArray();
+ it != err_list.endArray();
+ ++it)
+ {
+ const LLSD& err_entry = *it;
+ std::string index_info;
+ std::string texture_index_str = err_entry["TextureIndex"].asString();
+ if (!texture_index_str.empty())
+ {
+ index_info += " texture_index: " + texture_index_str;
+ }
+ std::string mesh_index_str = err_entry["MeshIndex"].asString();
+ if (!mesh_index_str.empty())
+ {
+ index_info += " mesh_index: " + mesh_index_str;
+ }
+ llwarns << "mesh err code " << err_entry["error"].asString()
+ << " message " << err_entry["message"]
+ << index_info
+ << llendl;
+ }
+ }
+ }
+ else
+ {
+ llwarns << "bad mesh, no error information available" << llendl;
+ }
+
+
+}
+
class LLModelObjectUploadResponder: public LLCurl::Responder
{
LLSD mObjectAsset;
@@ -511,15 +554,17 @@ public:
llinfos << "LLWholeModelFeeResponder content: " << content << llendl;
if (isGoodStatus(status))
{
+ llinfos << "fee request succeeded" << llendl;
mThread->mWholeModelUploadURL = content["uploader"].asString();
}
else
{
- llinfos << "upload failed" << llendl;
+ llwarns << "fee request failed" << llendl;
+ log_upload_error(content,"fee");
mThread->mWholeModelUploadURL = "";
}
-
}
+
};
class LLWholeModelUploadResponder: public LLCurl::Responder
@@ -538,13 +583,21 @@ public:
const LLSD& content)
{
//assert_main_thread();
- llinfos << "upload completed" << llendl;
mThread->mPendingUploads--;
dumpLLSDToFile(content,make_dump_name("whole_model_upload_response_",dump_num));
// requested "mesh" asset type isn't actually the type
// of the resultant object, fix it up here.
- mPostData["asset_type"] = "object";
- gMeshRepo.updateInventory(LLMeshRepository::inventory_data(mPostData,content));
+ if (isGoodStatus(status))
+ {
+ llinfos << "upload succeeded" << llendl;
+ mPostData["asset_type"] = "object";
+ gMeshRepo.updateInventory(LLMeshRepository::inventory_data(mPostData,content));
+ }
+ else
+ {
+ llwarns << "upload failed" << llendl;
+ log_upload_error(content,"upload");
+ }
}
};
@@ -1533,7 +1586,7 @@ void LLMeshUploadThread::wholeModelToLLSD(LLSD& dest, bool include_textures)
face_entry["offsett"] = 0.0;
face_entry["imagerot"] = 0.0;
}
- face_entry["colors"] = ll_sd_from_color4(material.mDiffuseColor);
+ face_entry["diffuse_color"] = ll_sd_from_color4(material.mDiffuseColor);
face_entry["fullbright"] = material.mFullbright;
instance_entry["face_list"][face_num] = face_entry;
}
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
index f3fb4b82ad..002e0567e4 100644
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -1526,7 +1526,6 @@ void LLViewerRegion::setSeedCapability(const std::string& url)
capabilityNames.append("MapLayer");
capabilityNames.append("MapLayerGod");
capabilityNames.append("NewFileAgentInventory");
- capabilityNames.append("ObjectAdd");
capabilityNames.append("ParcelPropertiesUpdate");
capabilityNames.append("ParcelMediaURLFilterList");
capabilityNames.append("ParcelNavigateMedia");
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
index 1489c033e2..4d678117a5 100644
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -773,14 +773,29 @@ void LLPipeline::updateRenderDeferred()
//static
void LLPipeline::refreshRenderDeferred()
{
+ static BOOL physics_shapes_is_on = FALSE ;
+ static BOOL render_glow_copy = FALSE ;
+
if(gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_PHYSICS_SHAPES))
{
+ if(!physics_shapes_is_on)
+ {
+ physics_shapes_is_on = TRUE ;
+ render_glow_copy = sRenderGlow ;
+ }
+
//turn the deferred rendering and glow off when draw physics shapes.
sRenderDeferred = FALSE ;
sRenderGlow = FALSE ;
}
else
{
+ if(physics_shapes_is_on)
+ {
+ physics_shapes_is_on = FALSE ;
+ sRenderGlow = render_glow_copy ;
+ }
+
updateRenderDeferred() ;
}
}