diff options
| author | Oz Linden <oz@lindenlab.com> | 2013-08-19 15:51:40 -0400 | 
|---|---|---|
| committer | Oz Linden <oz@lindenlab.com> | 2013-08-19 15:51:40 -0400 | 
| commit | 70cacc4d17790f13d62188a49d814f94da9301d5 (patch) | |
| tree | 2da7d156c9529c74b66bfb0fd9c4ec064a6f5e35 /indra/newview/pipeline.cpp | |
| parent | 561e0bb1a09e613e6fb41f6a31f1b182b9caa19c (diff) | |
| parent | 171089207b528ab80a954292c127ba77254ee927 (diff) | |
merge changes for 3.6.3-release
Diffstat (limited to 'indra/newview/pipeline.cpp')
| -rwxr-xr-x | indra/newview/pipeline.cpp | 113 | 
1 files changed, 91 insertions, 22 deletions
| diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index c25d22bbdf..f49395da34 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -163,6 +163,7 @@ S32 LLPipeline::RenderGlowIterations;  F32 LLPipeline::RenderGlowWidth;  F32 LLPipeline::RenderGlowStrength;  BOOL LLPipeline::RenderDepthOfField; +BOOL LLPipeline::RenderDepthOfFieldInEditMode;  F32 LLPipeline::CameraFocusTransitionTime;  F32 LLPipeline::CameraFNumber;  F32 LLPipeline::CameraFocalLength; @@ -615,6 +616,7 @@ void LLPipeline::init()  	connectRefreshCachedSettingsSafe("RenderGlowWidth");  	connectRefreshCachedSettingsSafe("RenderGlowStrength");  	connectRefreshCachedSettingsSafe("RenderDepthOfField"); +	connectRefreshCachedSettingsSafe("RenderDepthOfFieldInEditMode");  	connectRefreshCachedSettingsSafe("CameraFocusTransitionTime");  	connectRefreshCachedSettingsSafe("CameraFNumber");  	connectRefreshCachedSettingsSafe("CameraFocalLength"); @@ -1125,6 +1127,7 @@ void LLPipeline::refreshCachedSettings()  	RenderGlowWidth = gSavedSettings.getF32("RenderGlowWidth");  	RenderGlowStrength = gSavedSettings.getF32("RenderGlowStrength");  	RenderDepthOfField = gSavedSettings.getBOOL("RenderDepthOfField"); +	RenderDepthOfFieldInEditMode = gSavedSettings.getBOOL("RenderDepthOfFieldInEditMode");  	CameraFocusTransitionTime = gSavedSettings.getF32("CameraFocusTransitionTime");  	CameraFNumber = gSavedSettings.getF32("CameraFNumber");  	CameraFocalLength = gSavedSettings.getF32("CameraFocalLength"); @@ -4864,18 +4867,6 @@ void LLPipeline::renderPhysicsDisplay()  		}  	} -	for (LLCullResult::bridge_iterator i = sCull->beginVisibleBridge(); i != sCull->endVisibleBridge(); ++i) -	{ -		LLSpatialBridge* bridge = *i; -		if (!bridge->isDead() && hasRenderType(bridge->mDrawableType)) -		{ -			gGL.pushMatrix(); -			gGL.multMatrix((F32*)bridge->mDrawable->getRenderMatrix().mMatrix); -			bridge->renderPhysicsShapes(); -			gGL.popMatrix(); -		} -	} -  	gGL.flush();  	if (LLGLSLShader::sNoFixedFunction) @@ -5323,6 +5314,42 @@ void LLPipeline::renderDebug()  		gUIProgram.bind();  	} +	if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_RAYCAST) && !hud_only) +	{ //draw crosshairs on particle intersection +		if (gDebugRaycastParticle) +		{ +			if (LLGLSLShader::sNoFixedFunction) +			{ //this debug display requires shaders +				gDebugProgram.bind(); + +				gGL.getTexUnit(0)->unbind(LLTexUnit::TT_TEXTURE); + +				LLVector3 center(gDebugRaycastParticleIntersection.getF32ptr()); +				LLVector3 size(0.1f, 0.1f, 0.1f); + +				LLVector3 p[6]; + +				p[0] = center + size.scaledVec(LLVector3(1,0,0)); +				p[1] = center + size.scaledVec(LLVector3(-1,0,0)); +				p[2] = center + size.scaledVec(LLVector3(0,1,0)); +				p[3] = center + size.scaledVec(LLVector3(0,-1,0)); +				p[4] = center + size.scaledVec(LLVector3(0,0,1)); +				p[5] = center + size.scaledVec(LLVector3(0,0,-1)); +				 +				gGL.begin(LLRender::LINES); +				gGL.diffuseColor3f(1.f, 1.f, 0.f); +				for (U32 i = 0; i < 6; i++) +				{ +					gGL.vertex3fv(p[i].mV); +				} +				gGL.end(); +				gGL.flush(); + +				gDebugProgram.unbind(); +			} +		} +	} +  	if (hasRenderDebugMask(LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA))  	{  		LLVertexBuffer::unbind(); @@ -5356,7 +5383,7 @@ void LLPipeline::renderDebug()  			if (i > 3)  			{ //render shadow frusta as volumes  				if (mShadowFrustPoints[i-4].empty()) -			{ +				{  					continue;  				} @@ -7003,6 +7030,48 @@ void LLPipeline::setRenderHighlightTextureChannel(LLRender::eTexIndex channel)  	sRenderHighlightTextureChannel = channel;  } +LLVOPartGroup* LLPipeline::lineSegmentIntersectParticle(const LLVector4a& start, const LLVector4a& end, LLVector4a* intersection, +														S32* face_hit) +{ +	LLVector4a local_end = end; + +	LLVector4a position; + +	LLDrawable* drawable = NULL; + +	for (LLWorld::region_list_t::const_iterator iter = LLWorld::getInstance()->getRegionList().begin();  +			iter != LLWorld::getInstance()->getRegionList().end(); ++iter) +	{ +		LLViewerRegion* region = *iter; + +		LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_PARTICLE); +		if (part && hasRenderType(part->mDrawableType)) +		{ +			LLDrawable* hit = part->lineSegmentIntersect(start, local_end, TRUE, face_hit, &position, NULL, NULL, NULL); +			if (hit) +			{ +				drawable = hit; +				local_end = position;						 +			} +		} +	} + +	LLVOPartGroup* ret = NULL; +	if (drawable) +	{ +		//make sure we're returning an LLVOPartGroup +		llassert(drawable->getVObj()->getPCode() == LLViewerObject::LL_VO_PART_GROUP); +		ret = (LLVOPartGroup*) drawable->getVObj().get(); +	} +		 +	if (intersection) +	{ +		*intersection = position; +	} + +	return ret; +} +  LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector4a& start, const LLVector4a& end,  														BOOL pick_transparent,												  														S32* face_hit, @@ -7562,7 +7631,7 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)  	{  		bool dof_enabled = !LLViewerCamera::getInstance()->cameraUnderWater() && -							!LLToolMgr::getInstance()->inBuildMode() && +			(RenderDepthOfFieldInEditMode || !LLToolMgr::getInstance()->inBuildMode()) &&  							RenderDepthOfField; @@ -9582,7 +9651,7 @@ BOOL LLPipeline::getVisiblePointCloud(LLCamera& camera, LLVector3& min, LLVector  	pp.push_back(LLVector3(max.mV[0], max.mV[1], max.mV[2]));  	//add corners of camera frustum -	for (U32 i = 0; i < 8; i++) +	for (U32 i = 0; i < LLCamera::AGENT_FRUSTRUM_NUM; i++)  	{  		pp.push_back(camera.mAgentFrustum[i]);  	} @@ -9609,7 +9678,7 @@ BOOL LLPipeline::getVisiblePointCloud(LLCamera& camera, LLVector3& min, LLVector  	for (U32 i = 0; i < 12; i++)  	{ //for each line segment in bounding box -		for (U32 j = 0; j < 6; j++)  +		for (U32 j = 0; j < LLCamera::AGENT_PLANE_NO_USER_CLIP_NUM; j++)   		{ //for each plane in camera frustum  			const LLPlane& cp = camera.getAgentPlane(j);  			const LLVector3& v1 = pp[bs[i*2+0]]; @@ -9695,19 +9764,19 @@ BOOL LLPipeline::getVisiblePointCloud(LLCamera& camera, LLVector3& min, LLVector  			}  		} -		for (U32 j = 0; j < 6; ++j) +		for (U32 j = 0; j < LLCamera::AGENT_PLANE_NO_USER_CLIP_NUM; ++j)  		{  			const LLPlane& cp = camera.getAgentPlane(j);  			F32 dist = cp.dist(pp[i]);  			if (dist > 0.05f) //point is above some plane, not contained -					{ +			{  				found = false;  				break; -						} -					} +			} +		} -					if (found) -					{ +		if (found) +		{  			fp.push_back(pp[i]);  		}  	} | 
