diff options
| -rw-r--r-- | indra/newview/llspatialpartition.cpp | 76 | ||||
| -rw-r--r-- | indra/newview/pipeline.cpp | 12 | 
2 files changed, 46 insertions, 42 deletions
| diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index af740fe73d..dd69172184 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -3359,7 +3359,7 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)  	}  	else if	(type == LLPhysicsShapeBuilderUtil::PhysicsShapeSpecification::SPHERE)  	{ -		/*LLVolumeParams volume_params; +		LLVolumeParams volume_params;  		volume_params.setType( LL_PCODE_PROFILE_CIRCLE_HALF, LL_PCODE_PATH_CIRCLE );  		volume_params.setBeginAndEndS( 0.f, 1.f );  		volume_params.setBeginAndEndT( 0.f, 1.f ); @@ -3369,7 +3369,7 @@ void renderPhysicsShape(LLDrawable* drawable, LLVOVolume* volume)  		gGL.diffuseColor4fv(color.mV);  		pushVerts(sphere); -		LLPrimitive::sVolumeManager->unrefVolume(sphere);*/ +		LLPrimitive::sVolumeManager->unrefVolume(sphere);  	}  	else if (type == LLPhysicsShapeBuilderUtil::PhysicsShapeSpecification::CYLINDER)  	{ @@ -3447,51 +3447,67 @@ void renderPhysicsShapes(LLSpatialGroup* group)  	for (LLSpatialGroup::OctreeNode::const_element_iter i = group->getDataBegin(); i != group->getDataEnd(); ++i)  	{  		LLDrawable* drawable = *i; -		LLVOVolume* volume = drawable->getVOVolume(); -		if (volume && !volume->isAttachment() && volume->getPhysicsShapeType() != LLViewerObject::PHYSICS_SHAPE_NONE ) + +		if (drawable->isSpatialBridge())  		{ -			if (!group->mSpatialPartition->isBridge()) +			LLSpatialBridge* bridge = drawable->asPartition()->asBridge(); + +			if (bridge)  			{  				gGL.pushMatrix(); -				LLVector3 trans = drawable->getRegion()->getOriginAgent(); -				gGL.translatef(trans.mV[0], trans.mV[1], trans.mV[2]); -				renderPhysicsShape(drawable, volume); +				gGL.multMatrix((F32*)bridge->mDrawable->getRenderMatrix().mMatrix); +				bridge->renderPhysicsShapes();  				gGL.popMatrix();  			} -			else -			{ -				renderPhysicsShape(drawable, volume); -			}  		}  		else  		{ -			LLViewerObject* object = drawable->getVObj(); -			if (object && object->getPCode() == LLViewerObject::LL_VO_SURFACE_PATCH) +			LLVOVolume* volume = drawable->getVOVolume(); +			if (volume && !volume->isAttachment() && volume->getPhysicsShapeType() != LLViewerObject::PHYSICS_SHAPE_NONE )  			{ -				gGL.pushMatrix(); -				gGL.multMatrix((F32*) object->getRegion()->mRenderMatrix.mMatrix); -				//push face vertices for terrain -				for (S32 i = 0; i < drawable->getNumFaces(); ++i) +				if (!group->mSpatialPartition->isBridge())  				{ -					LLFace* face = drawable->getFace(i); -					if (face) +					gGL.pushMatrix(); +					LLVector3 trans = drawable->getRegion()->getOriginAgent(); +					gGL.translatef(trans.mV[0], trans.mV[1], trans.mV[2]); +					renderPhysicsShape(drawable, volume); +					gGL.popMatrix(); +				} +				else +				{ +					renderPhysicsShape(drawable, volume); +				} +			} +			else +			{ +				LLViewerObject* object = drawable->getVObj(); +				if (object && object->getPCode() == LLViewerObject::LL_VO_SURFACE_PATCH) +				{ +					gGL.pushMatrix(); +					gGL.multMatrix((F32*) object->getRegion()->mRenderMatrix.mMatrix); +					//push face vertices for terrain +					for (S32 i = 0; i < drawable->getNumFaces(); ++i)  					{ -						LLVertexBuffer* buff = face->getVertexBuffer(); -						if (buff) +						LLFace* face = drawable->getFace(i); +						if (face)  						{ -							glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); +							LLVertexBuffer* buff = face->getVertexBuffer(); +							if (buff) +							{ +								glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); -							buff->setBuffer(LLVertexBuffer::MAP_VERTEX); -							gGL.diffuseColor3f(0.2f, 0.5f, 0.3f); -							buff->draw(LLRender::TRIANGLES, buff->getNumIndices(), 0); +								buff->setBuffer(LLVertexBuffer::MAP_VERTEX); +								gGL.diffuseColor3f(0.2f, 0.5f, 0.3f); +								buff->draw(LLRender::TRIANGLES, buff->getNumIndices(), 0); -							gGL.diffuseColor3f(0.2f, 1.f, 0.3f); -							glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); -							buff->draw(LLRender::TRIANGLES, buff->getNumIndices(), 0); +								gGL.diffuseColor3f(0.2f, 1.f, 0.3f); +								glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); +								buff->draw(LLRender::TRIANGLES, buff->getNumIndices(), 0); +							}  						}  					} +					gGL.popMatrix();  				} -				gGL.popMatrix();  			}  		}  	} diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index a7e8fdc43c..4306b3da12 100644 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -4586,18 +4586,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) | 
