diff options
| -rw-r--r-- | indra/llmath/llvolume.cpp | 40 | ||||
| -rw-r--r-- | indra/llmath/llvolume.h | 4 | ||||
| -rw-r--r-- | indra/newview/llmanipscale.cpp | 14 | ||||
| -rwxr-xr-x | indra/newview/pipeline.cpp | 12 | 
4 files changed, 52 insertions, 18 deletions
| diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 6fa57604d8..5d3d23e9db 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -5393,19 +5393,53 @@ BOOL LLVolumeFace::create(LLVolume* volume, BOOL partial_build)  	delete mOctree;
  	mOctree = NULL;
 +	BOOL ret = FALSE ;
  	if (mTypeMask & CAP_MASK)
  	{
 -		return createCap(volume, partial_build);
 +		ret = createCap(volume, partial_build);
  	}
  	else if ((mTypeMask & END_MASK) || (mTypeMask & SIDE_MASK))
  	{
 -		return createSide(volume, partial_build);
 +		ret = createSide(volume, partial_build);
  	}
  	else
  	{
  		llerrs << "Unknown/uninitialized face type!" << llendl;
 -		return FALSE;
  	}
 +
 +	//update the range of the texture coordinates
 +	if(ret)
 +	{
 +		mTexCoordExtents[0].setVec(1.f, 1.f) ;
 +		mTexCoordExtents[1].setVec(0.f, 0.f) ;
 +
 +		for(U32 i = 0 ; i < mNumVertices ; i++)
 +		{
 +			if(mTexCoordExtents[0].mV[0] > mTexCoords[i].mV[0])
 +			{
 +				mTexCoordExtents[0].mV[0] = mTexCoords[i].mV[0] ;
 +			}
 +			if(mTexCoordExtents[1].mV[0] < mTexCoords[i].mV[0])
 +			{
 +				mTexCoordExtents[1].mV[0] = mTexCoords[i].mV[0] ;
 +			}
 +
 +			if(mTexCoordExtents[0].mV[1] > mTexCoords[i].mV[1])
 +			{
 +				mTexCoordExtents[0].mV[1] = mTexCoords[i].mV[1] ;
 +			}
 +			if(mTexCoordExtents[1].mV[1] < mTexCoords[i].mV[1])
 +			{
 +				mTexCoordExtents[1].mV[1] = mTexCoords[i].mV[1] ;
 +			}			
 +		}
 +		mTexCoordExtents[0].mV[0] = llmax(0.f, mTexCoordExtents[0].mV[0]) ;
 +		mTexCoordExtents[0].mV[1] = llmax(0.f, mTexCoordExtents[0].mV[1]) ;
 +		mTexCoordExtents[1].mV[0] = llmin(1.f, mTexCoordExtents[1].mV[0]) ;
 +		mTexCoordExtents[1].mV[1] = llmin(1.f, mTexCoordExtents[1].mV[1]) ;
 +	}
 +
 +	return ret ;
  }
  void LLVolumeFace::getVertexData(U16 index, LLVolumeFace::VertexData& cv)
 diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index eceaced9e2..5bd65c2bf2 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -901,7 +901,7 @@ public:  	LLVector4a* mExtents; //minimum and maximum point of face  	LLVector4a* mCenter; -	LLVector2 mTexCoordExtents[2]; //minimum and maximum of texture coordinates of the face. +	LLVector2   mTexCoordExtents[2]; //minimum and maximum of texture coordinates of the face.  	S32 mNumVertices;  	S32 mNumIndices; @@ -909,7 +909,7 @@ public:  	LLVector4a* mPositions;  	LLVector4a* mNormals;  	LLVector4a* mBinormals; -	LLVector2* mTexCoords; +	LLVector2*  mTexCoords;  	U16* mIndices;  	std::vector<S32>	mEdge; diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp index 67ab7ab462..d16c4c3bd0 100644 --- a/indra/newview/llmanipscale.cpp +++ b/indra/newview/llmanipscale.cpp @@ -960,9 +960,9 @@ void LLManipScale::dragCorner( S32 x, S32 y )  	{  		mInSnapRegime = FALSE;  	} - -	F32 max_scale_factor = get_default_max_prim_scale() / MIN_PRIM_SCALE; -	F32 min_scale_factor = MIN_PRIM_SCALE / get_default_max_prim_scale(); +	 +	F32 max_scale_factor = DEFAULT_MAX_PRIM_SCALE_NO_MESH / MIN_PRIM_SCALE; +	F32 min_scale_factor = MIN_PRIM_SCALE / DEFAULT_MAX_PRIM_SCALE_NO_MESH;  	// find max and min scale factors that will make biggest object hit max absolute scale and smallest object hit min absolute scale  	for (LLObjectSelection::iterator iter = mObjectSelection->begin(); @@ -974,7 +974,7 @@ void LLManipScale::dragCorner( S32 x, S32 y )  		{  			const LLVector3& scale = selectNode->mSavedScale; -			F32 cur_max_scale_factor = llmin( get_default_max_prim_scale() / scale.mV[VX], get_default_max_prim_scale() / scale.mV[VY], get_default_max_prim_scale() / scale.mV[VZ] ); +			F32 cur_max_scale_factor = llmin( DEFAULT_MAX_PRIM_SCALE_NO_MESH / scale.mV[VX], DEFAULT_MAX_PRIM_SCALE_NO_MESH / scale.mV[VY], DEFAULT_MAX_PRIM_SCALE_NO_MESH / scale.mV[VZ] );  			max_scale_factor = llmin( max_scale_factor, cur_max_scale_factor );  			F32 cur_min_scale_factor = llmax( MIN_PRIM_SCALE / scale.mV[VX], MIN_PRIM_SCALE / scale.mV[VY], MIN_PRIM_SCALE / scale.mV[VZ] ); @@ -1271,7 +1271,7 @@ void LLManipScale::stretchFace( const LLVector3& drag_start_agent, const LLVecto  			F32 denom = axis * dir_local;  			F32 desired_delta_size	= is_approx_zero(denom) ? 0.f : (delta_local_mag / denom);  // in meters -			F32 desired_scale		= llclamp(selectNode->mSavedScale.mV[axis_index] + desired_delta_size, MIN_PRIM_SCALE, get_default_max_prim_scale()); +			F32 desired_scale		= llclamp(selectNode->mSavedScale.mV[axis_index] + desired_delta_size, MIN_PRIM_SCALE, DEFAULT_MAX_PRIM_SCALE_NO_MESH);  			// propagate scale constraint back to position offset  			desired_delta_size		= desired_scale - selectNode->mSavedScale.mV[axis_index]; // propagate constraint back to position @@ -1971,7 +1971,7 @@ F32		LLManipScale::partToMaxScale( S32 part, const LLBBox &bbox ) const  			max_extent = bbox_extents.mV[i];  		}  	} -	max_scale_factor = bbox_extents.magVec() * get_default_max_prim_scale() / max_extent; +	max_scale_factor = bbox_extents.magVec() * DEFAULT_MAX_PRIM_SCALE_NO_MESH / max_extent;  	if (getUniform())  	{ @@ -1986,7 +1986,7 @@ F32		LLManipScale::partToMinScale( S32 part, const LLBBox &bbox ) const  {  	LLVector3 bbox_extents = unitVectorToLocalBBoxExtent( partToUnitVector( part ), bbox );  	bbox_extents.abs(); -	F32 min_extent = get_default_max_prim_scale(); +	F32 min_extent = DEFAULT_MAX_PRIM_SCALE_NO_MESH;  	for (U32 i = VX; i <= VZ; i++)  	{  		if (bbox_extents.mV[i] > 0.f && bbox_extents.mV[i] < min_extent) diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index ec3d0c10ab..9342e07a1d 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -3141,7 +3141,7 @@ void render_hud_elements()  	gGL.color4f(1,1,1,1);  	if (!LLPipeline::sReflectionRender && gPipeline.hasRenderDebugFeatureMask(LLPipeline::RENDER_DEBUG_FEATURE_UI))  	{ -		LLGLEnable multisample(GL_MULTISAMPLE_ARB); +		LLGLEnable multisample(gSavedSettings.getU32("RenderFSAASamples") > 0 ? GL_MULTISAMPLE_ARB : 0);  		gViewerWindow->renderSelections(FALSE, FALSE, FALSE); // For HUD version in render_ui_3d()  		// Draw the tracking overlays @@ -3385,7 +3385,7 @@ void LLPipeline::renderGeom(LLCamera& camera, BOOL forceVBOUpdate)  	glMatrixMode(GL_MODELVIEW);  	LLGLSPipeline gls_pipeline; -	LLGLEnable multisample(GL_MULTISAMPLE_ARB); +	LLGLEnable multisample(gSavedSettings.getU32("RenderFSAASamples") > 0 ? GL_MULTISAMPLE_ARB : 0);  	LLGLState gls_color_material(GL_COLOR_MATERIAL, mLightingDetail < 2); @@ -3625,7 +3625,7 @@ void LLPipeline::renderGeomDeferred(LLCamera& camera)  		}  	} -	LLGLEnable multisample(GL_MULTISAMPLE_ARB); +	LLGLEnable multisample(gSavedSettings.getU32("RenderFSAASamples") > 0 ? GL_MULTISAMPLE_ARB : 0);  	LLVertexBuffer::unbind(); @@ -3714,7 +3714,7 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera)  	LLGLEnable cull(GL_CULL_FACE); -	LLGLEnable multisample(GL_MULTISAMPLE_ARB); +	LLGLEnable multisample(gSavedSettings.getU32("RenderFSAASamples") > 0 ? GL_MULTISAMPLE_ARB : 0);  	calcNearbyLights(camera);  	setupHWLights(NULL); @@ -6298,7 +6298,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)  		gGL.getTexUnit(1)->bind(&mScreen);  		gGL.getTexUnit(1)->activate(); -		LLGLEnable multisample(GL_MULTISAMPLE_ARB); +		LLGLEnable multisample(gSavedSettings.getU32("RenderFSAASamples") > 0 ? GL_MULTISAMPLE_ARB : 0);  		buff->setBuffer(mask);  		buff->drawArrays(LLRender::TRIANGLE_STRIP, 0, 3); @@ -6763,7 +6763,7 @@ void LLPipeline::renderDeferredLighting()  							0, 0, mDeferredDepth.getWidth(), mDeferredDepth.getHeight(), GL_DEPTH_BUFFER_BIT, GL_NEAREST);	  		} -		LLGLEnable multisample(GL_MULTISAMPLE_ARB); +		LLGLEnable multisample(gSavedSettings.getU32("RenderFSAASamples") > 0 ? GL_MULTISAMPLE_ARB : 0);  		if (gPipeline.hasRenderType(LLPipeline::RENDER_TYPE_HUD))  		{ | 
