diff options
| -rw-r--r-- | indra/newview/llreflectionmap.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llspatialpartition.cpp | 15 | ||||
| -rw-r--r-- | indra/newview/llspatialpartition.h | 2 | ||||
| -rw-r--r-- | indra/newview/lltoolpie.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llviewerwindow.cpp | 68 | ||||
| -rw-r--r-- | indra/newview/llviewerwindow.h | 5 | ||||
| -rw-r--r-- | indra/newview/pipeline.cpp | 11 | ||||
| -rw-r--r-- | indra/newview/pipeline.h | 1 | 
8 files changed, 61 insertions, 45 deletions
| diff --git a/indra/newview/llreflectionmap.cpp b/indra/newview/llreflectionmap.cpp index efaf068bd2..a039c8072a 100644 --- a/indra/newview/llreflectionmap.cpp +++ b/indra/newview/llreflectionmap.cpp @@ -117,7 +117,7 @@ void LLReflectionMap::autoAdjustOrigin()              {                  int face = -1;                  LLVector4a intersection; -                LLDrawable* drawable = mGroup->lineSegmentIntersect(bounds[0], corners[i], false, false, true, &face, &intersection); +                LLDrawable* drawable = mGroup->lineSegmentIntersect(bounds[0], corners[i], false, false, true, true, &face, &intersection);                  if (drawable != nullptr)                  {                      hit = true; diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index f52f1a925d..32c891dbb6 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -3507,8 +3507,9 @@ public:  	BOOL mPickTransparent;  	BOOL mPickRigged;      BOOL mPickUnselectable; +    BOOL mPickReflectionProbe; -	LLOctreeIntersect(const LLVector4a& start, const LLVector4a& end, BOOL pick_transparent, BOOL pick_rigged, BOOL pick_unselectable, +	LLOctreeIntersect(const LLVector4a& start, const LLVector4a& end, BOOL pick_transparent, BOOL pick_rigged, BOOL pick_unselectable, BOOL pick_reflection_probe,  					  S32* face_hit, LLVector4a* intersection, LLVector2* tex_coord, LLVector4a* normal, LLVector4a* tangent)  		: mStart(start),  		  mEnd(end), @@ -3520,7 +3521,8 @@ public:  		  mHit(NULL),  		  mPickTransparent(pick_transparent),  		  mPickRigged(pick_rigged), -          mPickUnselectable(pick_unselectable) +          mPickUnselectable(pick_unselectable), +          mPickReflectionProbe(pick_reflection_probe)  	{  	} @@ -3596,7 +3598,8 @@ public:  		{  			LLViewerObject* vobj = drawable->getVObj(); -			if (vobj) +            if (vobj && +                (!vobj->isReflectionProbe() || mPickReflectionProbe))  			{  				LLVector4a intersection;  				bool skip_check = false; @@ -3642,6 +3645,7 @@ LLDrawable* LLSpatialPartition::lineSegmentIntersect(const LLVector4a& start, co  													 BOOL pick_transparent,  													 BOOL pick_rigged,                                                       BOOL pick_unselectable, +                                                     BOOL pick_reflection_probe,  													 S32* face_hit,                   // return the face hit  													 LLVector4a* intersection,         // return the intersection point  													 LLVector2* tex_coord,            // return the texture coordinates of the intersection point @@ -3650,7 +3654,7 @@ LLDrawable* LLSpatialPartition::lineSegmentIntersect(const LLVector4a& start, co  	)  { -	LLOctreeIntersect intersect(start, end, pick_transparent, pick_rigged, pick_unselectable, face_hit, intersection, tex_coord, normal, tangent); +	LLOctreeIntersect intersect(start, end, pick_transparent, pick_rigged, pick_unselectable, pick_reflection_probe, face_hit, intersection, tex_coord, normal, tangent);  	LLDrawable* drawable = intersect.check(mOctree);  	return drawable; @@ -3660,6 +3664,7 @@ LLDrawable* LLSpatialGroup::lineSegmentIntersect(const LLVector4a& start, const      BOOL pick_transparent,      BOOL pick_rigged,      BOOL pick_unselectable, +    BOOL pick_reflection_probe,      S32* face_hit,                   // return the face hit      LLVector4a* intersection,         // return the intersection point      LLVector2* tex_coord,            // return the texture coordinates of the intersection point @@ -3668,7 +3673,7 @@ LLDrawable* LLSpatialGroup::lineSegmentIntersect(const LLVector4a& start, const  )  { -    LLOctreeIntersect intersect(start, end, pick_transparent, pick_rigged, pick_unselectable, face_hit, intersection, tex_coord, normal, tangent); +    LLOctreeIntersect intersect(start, end, pick_transparent, pick_rigged, pick_unselectable, pick_reflection_probe, face_hit, intersection, tex_coord, normal, tangent);      LLDrawable* drawable = intersect.check(getOctreeNode());      return drawable; diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index 88584f535a..fe23670bea 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -315,6 +315,7 @@ public:          BOOL pick_transparent,          BOOL pick_rigged,          BOOL pick_unselectable, +        BOOL pick_reflection_probe,          S32* face_hit,                          // return the face hit          LLVector4a* intersection = NULL,         // return the intersection point          LLVector2* tex_coord = NULL,            // return the texture coordinates of the intersection point @@ -389,6 +390,7 @@ public:  									 BOOL pick_transparent,   									 BOOL pick_rigged,                                       BOOL pick_unselectable, +                                     BOOL pick_reflection_probe,  									 S32* face_hit,                          // return the face hit  									 LLVector4a* intersection = NULL,         // return the intersection point  									 LLVector2* tex_coord = NULL,            // return the texture coordinates of the intersection point diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index 2c5b8ffae4..84cc3f03c2 100644 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -114,7 +114,7 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)  	mMouseDownY = y;  	LLTimer pick_timer;  	BOOL pick_rigged = false; //gSavedSettings.getBOOL("AnimatedObjectsAllowLeftClick"); -	LLPickInfo transparent_pick = gViewerWindow->pickImmediate(x, y, TRUE /*includes transparent*/, pick_rigged); +	LLPickInfo transparent_pick = gViewerWindow->pickImmediate(x, y, TRUE /*includes transparent*/, pick_rigged, FALSE, TRUE, FALSE);  	LLPickInfo visible_pick = gViewerWindow->pickImmediate(x, y, FALSE, pick_rigged);  	LLViewerObject *transp_object = transparent_pick.getObject();  	LLViewerObject *visible_object = visible_pick.getObject(); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index c6ed6ffb7d..71fe893091 100644 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -3344,7 +3344,7 @@ void LLViewerWindow::updateUI()  	if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_RAYCAST))  	{  		gDebugRaycastFaceHit = -1; -		gDebugRaycastObject = cursorIntersect(-1, -1, 512.f, NULL, -1, FALSE, FALSE, TRUE, +		gDebugRaycastObject = cursorIntersect(-1, -1, 512.f, NULL, -1, FALSE, FALSE, TRUE, FALSE,  											  &gDebugRaycastFaceHit,  											  &gDebugRaycastIntersection,  											  &gDebugRaycastTexCoord, @@ -4229,7 +4229,7 @@ void LLViewerWindow::pickAsync( S32 x,          pick_transparent = TRUE;      } -	LLPickInfo pick_info(LLCoordGL(x, y_from_bot), mask, pick_transparent, pick_rigged, FALSE, TRUE, pick_unselectable, callback); +	LLPickInfo pick_info(LLCoordGL(x, y_from_bot), mask, pick_transparent, pick_rigged, FALSE, TRUE, pick_unselectable, TRUE, callback);  	schedulePick(pick_info);  } @@ -4285,7 +4285,7 @@ void LLViewerWindow::returnEmptyPicks()  }  // Performs the GL object/land pick. -LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot, BOOL pick_transparent, BOOL pick_rigged, BOOL pick_particle, BOOL pick_unselectable) +LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot, BOOL pick_transparent, BOOL pick_rigged, BOOL pick_particle, BOOL pick_unselectable, BOOL pick_reflection_probe)  {  	BOOL in_build_mode = LLFloaterReg::instanceVisible("build");  	if ((in_build_mode && gSavedSettings.getBOOL("SelectInvisibleObjects")) || LLDrawPoolAlpha::sShowDebugAlpha) @@ -4297,7 +4297,7 @@ LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot, BOOL pick_transp  	// shortcut queueing in mPicks and just update mLastPick in place  	MASK	key_mask = gKeyboard->currentMask(TRUE); -	mLastPick = LLPickInfo(LLCoordGL(x, y_from_bot), key_mask, pick_transparent, pick_rigged, pick_particle, TRUE, FALSE, NULL); +	mLastPick = LLPickInfo(LLCoordGL(x, y_from_bot), key_mask, pick_transparent, pick_rigged, pick_particle, pick_reflection_probe, TRUE, FALSE, NULL);  	mLastPick.fetchResults();  	return mLastPick; @@ -4335,6 +4335,7 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de  												BOOL pick_transparent,  												BOOL pick_rigged,                                                  BOOL pick_unselectable, +                                                BOOL pick_reflection_probe,  												S32* face_hit,  												LLVector4a *intersection,  												LLVector2 *uv, @@ -4413,7 +4414,8 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de  		}  		else // is a world object  		{ -			if (this_object->lineSegmentIntersect(mw_start, mw_end, this_face, pick_transparent, pick_rigged, pick_unselectable, +            if ((pick_reflection_probe || !this_object->isReflectionProbe()) +                && this_object->lineSegmentIntersect(mw_start, mw_end, this_face, pick_transparent, pick_rigged, pick_unselectable,  												  face_hit, intersection, uv, normal, tangent))  			{  				found = this_object; @@ -4427,7 +4429,7 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de  		if (!found) // if not found in HUD, look in world:  		{ -			found = gPipeline.lineSegmentIntersectInWorld(mw_start, mw_end, pick_transparent, pick_rigged, pick_unselectable, +			found = gPipeline.lineSegmentIntersectInWorld(mw_start, mw_end, pick_transparent, pick_rigged, pick_unselectable, pick_reflection_probe,  														  face_hit, intersection, uv, normal, tangent);  			if (found && !pick_transparent)  			{ @@ -6085,30 +6087,32 @@ LLPickInfo::LLPickInfo()  {  } -LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos,  -		       MASK keyboard_mask,  -		       BOOL pick_transparent, -			   BOOL pick_rigged, -			   BOOL pick_particle, -		       BOOL pick_uv_coords, -			   BOOL pick_unselectable, -		       void (*pick_callback)(const LLPickInfo& pick_info)) -	: mMousePt(mouse_pos), -	  mKeyMask(keyboard_mask), -	  mPickCallback(pick_callback), -	  mPickType(PICK_INVALID), -	  mWantSurfaceInfo(pick_uv_coords), -	  mObjectFace(-1), -	  mUVCoords(-1.f, -1.f), -	  mSTCoords(-1.f, -1.f), -	  mXYCoords(-1, -1), -	  mNormal(), -	  mTangent(), -	  mBinormal(), -	  mHUDIcon(NULL), -	  mPickTransparent(pick_transparent), -	  mPickRigged(pick_rigged), -	  mPickParticle(pick_particle), +LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos, +    MASK keyboard_mask, +    BOOL pick_transparent, +    BOOL pick_rigged, +    BOOL pick_particle, +    BOOL pick_reflection_probe, +    BOOL pick_uv_coords, +    BOOL pick_unselectable, +    void (*pick_callback)(const LLPickInfo& pick_info)) +    : mMousePt(mouse_pos), +    mKeyMask(keyboard_mask), +    mPickCallback(pick_callback), +    mPickType(PICK_INVALID), +    mWantSurfaceInfo(pick_uv_coords), +    mObjectFace(-1), +    mUVCoords(-1.f, -1.f), +    mSTCoords(-1.f, -1.f), +    mXYCoords(-1, -1), +    mNormal(), +    mTangent(), +    mBinormal(), +    mHUDIcon(NULL), +    mPickTransparent(pick_transparent), +    mPickRigged(pick_rigged), +    mPickParticle(pick_particle), +    mPickReflectionProbe(pick_reflection_probe),  	  mPickUnselectable(pick_unselectable)  {  } @@ -6139,7 +6143,7 @@ void LLPickInfo::fetchResults()  	}  	LLViewerObject* hit_object = gViewerWindow->cursorIntersect(mMousePt.mX, mMousePt.mY, 512.f, -									NULL, -1, mPickTransparent, mPickRigged, mPickUnselectable, &face_hit, +									NULL, -1, mPickTransparent, mPickRigged, mPickUnselectable, mPickReflectionProbe, &face_hit,  									&intersection, &uv, &normal, &tangent, &start, &end);  	mPickPt = mMousePt; @@ -6284,7 +6288,7 @@ void LLPickInfo::getSurfaceInfo()  	if (objectp)  	{  		if (gViewerWindow->cursorIntersect(ll_round((F32)mMousePt.mX), ll_round((F32)mMousePt.mY), 1024.f, -										   objectp, -1, mPickTransparent, mPickRigged, mPickUnselectable, +										   objectp, -1, mPickTransparent, mPickRigged, mPickUnselectable, mPickReflectionProbe,  										   &mObjectFace,  										   &intersection,  										   &mSTCoords, diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index bbce9a25f6..943cdf2fc4 100644 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -94,6 +94,7 @@ public:  		BOOL pick_transparent,  		BOOL pick_rigged,  		BOOL pick_particle, +        BOOL pick_reflection_probe,  		BOOL pick_surface_info,  		BOOL pick_unselectable,  		void (*pick_callback)(const LLPickInfo& pick_info)); @@ -130,6 +131,7 @@ public:  	BOOL			mPickRigged;  	BOOL			mPickParticle;  	BOOL			mPickUnselectable; +    BOOL            mPickReflectionProbe = FALSE;  	void		    getSurfaceInfo();  private: @@ -407,7 +409,7 @@ public:  								BOOL pick_transparent = FALSE,  								BOOL pick_rigged = FALSE,  								BOOL pick_unselectable = FALSE); -	LLPickInfo		pickImmediate(S32 x, S32 y, BOOL pick_transparent, BOOL pick_rigged = FALSE, BOOL pick_particle = FALSE, BOOL pick_unselectable = TRUE); +	LLPickInfo		pickImmediate(S32 x, S32 y, BOOL pick_transparent, BOOL pick_rigged = FALSE, BOOL pick_particle = FALSE, BOOL pick_unselectable = TRUE, BOOL pick_reflection_probe = TRUE);  	LLHUDIcon* cursorIntersectIcon(S32 mouse_x, S32 mouse_y, F32 depth,  										   LLVector4a* intersection); @@ -417,6 +419,7 @@ public:  									BOOL pick_transparent = FALSE,  									BOOL pick_rigged = FALSE,                                      BOOL pick_unselectable = TRUE, +                                    BOOL pick_reflection_probe = TRUE,  									S32* face_hit = NULL,  									LLVector4a *intersection = NULL,  									LLVector2 *uv = NULL, diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 1402591015..1b4c8f65a6 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -6223,7 +6223,7 @@ LLVOPartGroup* LLPipeline::lineSegmentIntersectParticle(const LLVector4a& start,  		LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_PARTICLE);  		if (part && hasRenderType(part->mDrawableType))  		{ -			LLDrawable* hit = part->lineSegmentIntersect(start, local_end, TRUE, FALSE, TRUE, face_hit, &position, NULL, NULL, NULL); +			LLDrawable* hit = part->lineSegmentIntersect(start, local_end, TRUE, FALSE, TRUE, FALSE, face_hit, &position, NULL, NULL, NULL);  			if (hit)  			{  				drawable = hit; @@ -6252,6 +6252,7 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector4a& start,  														bool pick_transparent,  														bool pick_rigged,                                                          bool pick_unselectable, +                                                        bool pick_reflection_probe,  														S32* face_hit,  														LLVector4a* intersection,         // return the intersection point  														LLVector2* tex_coord,            // return the texture coordinates of the intersection point @@ -6285,7 +6286,7 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector4a& start,  				LLSpatialPartition* part = region->getSpatialPartition(j);  				if (part && hasRenderType(part->mDrawableType))  				{ -					LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, pick_rigged, pick_unselectable, face_hit, &position, tex_coord, normal, tangent); +					LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, pick_rigged, pick_unselectable, pick_reflection_probe, face_hit, &position, tex_coord, normal, tangent);  					if (hit)  					{  						drawable = hit; @@ -6342,7 +6343,7 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector4a& start,  			LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_AVATAR);  			if (part && hasRenderType(part->mDrawableType))  			{ -				LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, pick_rigged, pick_unselectable, face_hit, &position, tex_coord, normal, tangent); +				LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, pick_rigged, pick_unselectable, pick_reflection_probe, face_hit, &position, tex_coord, normal, tangent);  				if (hit)  				{  					LLVector4a delta; @@ -6430,7 +6431,7 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInHUD(const LLVector4a& start, c  		LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_HUD);  		if (part)  		{ -			LLDrawable* hit = part->lineSegmentIntersect(start, end, pick_transparent, FALSE, TRUE, face_hit, intersection, tex_coord, normal, tangent); +			LLDrawable* hit = part->lineSegmentIntersect(start, end, pick_transparent, FALSE, TRUE, FALSE, face_hit, intersection, tex_coord, normal, tangent);  			if (hit)  			{  				drawable = hit; @@ -7165,7 +7166,7 @@ void LLPipeline::renderDoF(LLRenderTarget* src, LLRenderTarget* dst)  					LLVector4a result;  					result.clear(); -					gViewerWindow->cursorIntersect(-1, -1, 512.f, NULL, -1, FALSE, FALSE, TRUE, NULL, &result); +					gViewerWindow->cursorIntersect(-1, -1, 512.f, NULL, -1, FALSE, FALSE, TRUE, TRUE, NULL, &result);  					focus_point.set(result.getF32ptr());  				} diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 427240aad7..fe92c69cbb 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -205,6 +205,7 @@ public:  												bool pick_transparent,  												bool pick_rigged,                                                  bool pick_unselectable, +                                                bool pick_reflection_probe,  												S32* face_hit,                          // return the face hit  												LLVector4a* intersection = NULL,         // return the intersection point  												LLVector2* tex_coord = NULL,            // return the texture coordinates of the intersection point | 
