diff options
| -rw-r--r-- | indra/llmath/llvolume.cpp | 4 | ||||
| -rw-r--r-- | indra/llmath/llvolume.h | 1 | ||||
| -rw-r--r-- | indra/llrender/llgl.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl | 2 | ||||
| -rw-r--r-- | indra/newview/featuretable.txt | 6 | ||||
| -rw-r--r-- | indra/newview/featuretable_xp.txt | 5 | ||||
| -rw-r--r-- | indra/newview/llfeaturemanager.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llfloaterpreference.cpp | 9 | ||||
| -rw-r--r-- | indra/newview/llselectmgr.cpp | 94 | ||||
| -rw-r--r-- | indra/newview/llselectmgr.h | 1 | ||||
| -rw-r--r-- | indra/newview/llvovolume.cpp | 2 | ||||
| -rwxr-xr-x | indra/newview/pipeline.cpp | 1 | 
12 files changed, 74 insertions, 63 deletions
| diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp index 2f662b757b..c4be176353 100644 --- a/indra/llmath/llvolume.cpp +++ b/indra/llmath/llvolume.cpp @@ -4179,7 +4179,6 @@ S32 LLVolume::getNumTriangles() const  //-----------------------------------------------------------------------------
  void LLVolume::generateSilhouetteVertices(std::vector<LLVector3> &vertices,
  										  std::vector<LLVector3> &normals,
 -										  std::vector<S32> &segments,
  										  const LLVector3& obj_cam_vec_in,
  										  const LLMatrix4& mat_in,
  										  const LLMatrix3& norm_mat_in,
 @@ -4198,7 +4197,6 @@ void LLVolume::generateSilhouetteVertices(std::vector<LLVector3> &vertices,  	vertices.clear();
  	normals.clear();
 -	segments.clear();
  	if ((mParams.getSculptType() & LL_SCULPT_TYPE_MASK) == LL_SCULPT_TYPE_MESH)
  	{
 @@ -4399,8 +4397,6 @@ void LLVolume::generateSilhouetteVertices(std::vector<LLVector3> &vertices,  						norm_mat.rotate(n[v2], t);
  						t.normalize3fast();
  						normals.push_back(LLVector3(t[0], t[1], t[2]));
 -
 -						segments.push_back(vertices.size());
  					}
  				}		
  			}
 diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h index 5bd65c2bf2..60b64b1285 100644 --- a/indra/llmath/llvolume.h +++ b/indra/llmath/llvolume.h @@ -986,7 +986,6 @@ public:  	void generateSilhouetteVertices(std::vector<LLVector3> &vertices,   									std::vector<LLVector3> &normals,  -									std::vector<S32> &segments,   									const LLVector3& view_vec,  									const LLMatrix4& mat,  									const LLMatrix3& norm_mat, diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 9022026248..f91584b5e4 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -671,7 +671,15 @@ void LLGLManager::initExtensions()  	mHasVertexBufferObject = ExtensionExists("GL_ARB_vertex_buffer_object", gGLHExts.mSysExts);  	mHasDepthClamp = ExtensionExists("GL_ARB_depth_clamp", gGLHExts.mSysExts) || ExtensionExists("GL_NV_depth_clamp", gGLHExts.mSysExts);  	// mask out FBO support when packed_depth_stencil isn't there 'cause we need it for LLRenderTarget -Brad +#ifdef GL_ARB_framebuffer_object  	mHasFramebufferObject = ExtensionExists("GL_ARB_framebuffer_object", gGLHExts.mSysExts); +#else +	mHasFramebufferObject = ExtensionExists("GL_EXT_framebuffer_object", gGLHExts.mSysExts) && +							ExtensionExists("GL_EXT_framebuffer_blit", gGLHExts.mSysExts) && +							ExtensionExists("GL_EXT_framebuffer_multisample", gGLHExts.mSysExts) && +							ExtensionExists("GL_EXT_packed_depth_stencil", gGLHExts.mSysExts); +#endif +	  	mHasDrawBuffers = ExtensionExists("GL_ARB_draw_buffers", gGLHExts.mSysExts);  	mHasBlendFuncSeparate = ExtensionExists("GL_EXT_blend_func_separate", gGLHExts.mSysExts);  	mHasTextureRectangle = ExtensionExists("GL_ARB_texture_rectangle", gGLHExts.mSysExts); diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl index eef6556fba..ef823c28b1 100644 --- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl @@ -9,7 +9,7 @@  attribute vec4 object_weight;   -uniform mat4 matrixPalette[64]; +uniform mat4 matrixPalette[32];  mat4 getObjectSkinnedTransform()  { diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt index 729132b638..afc268d7a5 100644 --- a/indra/newview/featuretable.txt +++ b/indra/newview/featuretable.txt @@ -1,4 +1,4 @@ -version 25
 +version 26
  // NOTE: This is mostly identical to featuretable_mac.txt with a few differences
  // Should be combined into one table
 @@ -275,6 +275,9 @@ RenderObjectBump			0	0  list OpenGLPre15
  RenderVBOEnable				1	0
 +list OpenGLPre30
 +RenderDeferred				0	0
 +
  list Intel
  RenderAnisotropic			1	0
 @@ -561,3 +564,4 @@ list NVIDIA_GeForce_Go_7800  RenderShaderLightingMaxLevel	1	2
  list NVIDIA_GeForce_Go_7900
  RenderShaderLightingMaxLevel	1	2
 +
 diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt index 755910f54a..38299c32bc 100644 --- a/indra/newview/featuretable_xp.txt +++ b/indra/newview/featuretable_xp.txt @@ -1,4 +1,4 @@ -version 25 +version 26  // NOTE: This is mostly identical to featuretable_mac.txt with a few differences  // Should be combined into one table @@ -267,6 +267,9 @@ RenderObjectBump			0	0  list OpenGLPre15  RenderVBOEnable				1	0 +list OpenGLPre30
 +RenderDeferred				0	0
 +  list Intel  RenderAnisotropic			1	0 diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index 4e16cc4217..edfc4538a1 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -745,6 +745,10 @@ void LLFeatureManager::applyBaseMasks()  	{  		maskFeatures("OpenGLPre15");  	} +	if (gGLManager.mGLVersion < 3.f) +	{ +		maskFeatures("OpenGLPre30"); +	}  	// now mask by gpu string  	// Replaces ' ' with '_' in mGPUString to deal with inability for parser to handle spaces diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp index 92d6d9a486..3673a28163 100644 --- a/indra/newview/llfloaterpreference.cpp +++ b/indra/newview/llfloaterpreference.cpp @@ -1043,8 +1043,10 @@ void LLFloaterPreference::refreshEnabledState()  	//Deferred/SSAO/Shadows  	LLCheckBoxCtrl* ctrl_deferred = getChild<LLCheckBoxCtrl>("UseLightShaders"); -	if (LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") && -		shaders) +	 +	if (LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&  +		shaders &&  +		gGLManager.mHasFramebufferObject)  	{  		BOOL enabled = (ctrl_wind_light->get()) ? TRUE : FALSE; @@ -1127,7 +1129,8 @@ void LLFloaterPreference::disableUnavailableSettings()  	}  	// disabled deferred -	if(!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred")) +	if (!LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") || +		!gGLManager.mHasFramebufferObject)  	{  		ctrl_shadows->setEnabled(FALSE);  		ctrl_shadows->setValue(0); diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp index e0b9f1d736..746ba274ed 100644 --- a/indra/newview/llselectmgr.cpp +++ b/indra/newview/llselectmgr.cpp @@ -5204,7 +5204,6 @@ LLSelectNode::LLSelectNode(const LLSelectNode& nodep)  	mSilhouetteVertices = nodep.mSilhouetteVertices;  	mSilhouetteNormals = nodep.mSilhouetteNormals; -	mSilhouetteSegments = nodep.mSilhouetteSegments;  	mSilhouetteExists = nodep.mSilhouetteExists;  	mObject = nodep.mObject; @@ -5628,17 +5627,15 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)  			gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);  			gGL.begin(LLRender::LINES);  			{ -				S32 i = 0; -				for (S32 seg_num = 0; seg_num < (S32)mSilhouetteSegments.size(); seg_num++) +				for(S32 i = 0; i < mSilhouetteVertices.size(); i += 2)  				{ -					for(; i < mSilhouetteSegments[seg_num]; i++) -					{ -						u_coord += u_divisor * LLSelectMgr::sHighlightUScale; - -						gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.4f); -						gGL.texCoord2f( u_coord, v_coord ); -						gGL.vertex3fv( mSilhouetteVertices[i].mV ); -					} +					u_coord += u_divisor * LLSelectMgr::sHighlightUScale; +					gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.4f); +					gGL.texCoord2f( u_coord, v_coord ); +					gGL.vertex3fv( mSilhouetteVertices[i].mV); +					u_coord += u_divisor * LLSelectMgr::sHighlightUScale; +					gGL.texCoord2f( u_coord, v_coord ); +					gGL.vertex3fv(mSilhouetteVertices[i+1].mV);  				}  			}              gGL.end(); @@ -5649,51 +5646,50 @@ void LLSelectNode::renderOneSilhouette(const LLColor4 &color)  		gGL.setSceneBlendType(LLRender::BT_ALPHA);  		gGL.begin(LLRender::TRIANGLES);  		{ -			S32 i = 0; -			for (S32 seg_num = 0; seg_num < (S32)mSilhouetteSegments.size(); seg_num++) +			for(S32 i = 0; i < mSilhouetteVertices.size(); i+=2)  			{ -				S32 first_i = i; -				LLVector3 v; -				LLVector2 t; +				if (!mSilhouetteNormals[i].isFinite() || +					!mSilhouetteNormals[i+1].isFinite()) +				{ //skip skewed segments +					continue; +				} -				for(; i < mSilhouetteSegments[seg_num]; i++) -				{ +				LLVector3 v[4]; +				LLVector2 tc[4]; +				v[0] = mSilhouetteVertices[i] + (mSilhouetteNormals[i] * silhouette_thickness); +				tc[0].set(u_coord, v_coord + LLSelectMgr::sHighlightVScale); -					if (i == first_i) { -					    LLVector3 vert = (mSilhouetteNormals[i]) * silhouette_thickness; -						vert += mSilhouetteVertices[i]; +				v[1] = mSilhouetteVertices[i]; +				tc[1].set(u_coord, v_coord); -						gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.0f); //LLSelectMgr::sHighlightAlpha); -						gGL.texCoord2f( u_coord, v_coord + LLSelectMgr::sHighlightVScale ); -						gGL.vertex3fv( vert.mV );  -						 -						u_coord += u_divisor * LLSelectMgr::sHighlightUScale; +				u_coord += u_divisor * LLSelectMgr::sHighlightUScale; -						gGL.color4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2); -						gGL.texCoord2f( u_coord, v_coord ); -						gGL.vertex3fv( mSilhouetteVertices[i].mV ); +				v[2] = mSilhouetteVertices[i+1] + (mSilhouetteNormals[i+1] * silhouette_thickness); +				tc[2].set(u_coord, v_coord + LLSelectMgr::sHighlightVScale); +				 +				v[3] = mSilhouetteVertices[i+1]; +				tc[3].set(u_coord,v_coord); -						v = mSilhouetteVertices[i]; -						t = LLVector2(u_coord, v_coord); -					} -					else { -                        LLVector3 vert = (mSilhouetteNormals[i]) * silhouette_thickness; -						vert += mSilhouetteVertices[i]; - -						gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.0f); //LLSelectMgr::sHighlightAlpha); -						gGL.texCoord2f( u_coord, v_coord + LLSelectMgr::sHighlightVScale ); -						gGL.vertex3fv( vert.mV );  -						gGL.vertex3fv( vert.mV );  -						 -						gGL.texCoord2fv(t.mV); -						u_coord += u_divisor * LLSelectMgr::sHighlightUScale; -						gGL.color4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2); -						gGL.vertex3fv(v.mV); -						gGL.texCoord2f( u_coord, v_coord ); -						gGL.vertex3fv( mSilhouetteVertices[i].mV ); +				gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.0f); //LLSelectMgr::sHighlightAlpha); +				gGL.texCoord2fv(tc[0].mV); +				gGL.vertex3fv( v[0].mV );  +				 +				gGL.color4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2); +				gGL.texCoord2fv( tc[1].mV ); +				gGL.vertex3fv( v[1].mV ); -					} -				} +				gGL.color4f(color.mV[VRED], color.mV[VGREEN], color.mV[VBLUE], 0.0f); //LLSelectMgr::sHighlightAlpha); +				gGL.texCoord2fv( tc[2].mV ); +				gGL.vertex3fv( v[2].mV ); + +				gGL.vertex3fv( v[2].mV ); + +				gGL.color4f(color.mV[VRED]*2, color.mV[VGREEN]*2, color.mV[VBLUE]*2, LLSelectMgr::sHighlightAlpha*2); +				gGL.texCoord2fv( tc[1].mV ); +				gGL.vertex3fv( v[1].mV ); + +				gGL.texCoord2fv( tc[3].mV ); +				gGL.vertex3fv( v[3].mV );			  			}  		}  		gGL.end(); diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h index 85d8d3212d..1b354f983a 100644 --- a/indra/newview/llselectmgr.h +++ b/indra/newview/llselectmgr.h @@ -182,7 +182,6 @@ public:  	std::vector<LLVector3>  mTextureScaleRatios;  	std::vector<LLVector3>	mSilhouetteVertices;	// array of vertices to render silhouette of object  	std::vector<LLVector3>	mSilhouetteNormals;	// array of normals to render silhouette of object -	std::vector<S32>		mSilhouetteSegments;	// array of normals to render silhouette of object  	BOOL					mSilhouetteExists;	// need to generate silhouette?  protected: diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 8f1a761549..be987a2310 100644 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -2874,7 +2874,7 @@ void LLVOVolume::generateSilhouette(LLSelectNode* nodep, const LLVector3& view_p  			trans_mat.translate(getRegion()->getOriginAgent());
  		}
 -		volume->generateSilhouetteVertices(nodep->mSilhouetteVertices, nodep->mSilhouetteNormals, nodep->mSilhouetteSegments, view_vector, trans_mat, mRelativeXformInvTrans, nodep->getTESelectMask());
 +		volume->generateSilhouetteVertices(nodep->mSilhouetteVertices, nodep->mSilhouetteNormals, view_vector, trans_mat, mRelativeXformInvTrans, nodep->getTESelectMask());
  		nodep->mSilhouetteExists = TRUE;
  	}
 diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index ca58d8275b..69173d26f4 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -1021,7 +1021,6 @@ S32 LLPipeline::getMaxLightingDetail() const  S32 LLPipeline::setLightingDetail(S32 level)  {  	LLMemType mt_ld(LLMemType::MTYPE_PIPELINE_LIGHTING_DETAIL); -	assertInitialized();  	if (level < 0)  	{ | 
