diff options
| -rw-r--r-- | indra/llrender/llvertexbuffer.cpp | 7 | ||||
| -rw-r--r-- | indra/llrender/llvertexbuffer.h | 1 | ||||
| -rwxr-xr-x | indra/newview/app_settings/settings.xml | 13 | ||||
| -rw-r--r-- | indra/newview/lldrawable.cpp | 2 | ||||
| -rwxr-xr-x | indra/newview/llfloatermodelpreview.cpp | 187 | ||||
| -rw-r--r-- | indra/newview/llfloatermodelpreview.h | 2 | ||||
| -rwxr-xr-x | indra/newview/llmeshrepository.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llmeshrepository.h | 8 | ||||
| -rw-r--r-- | indra/newview/llspatialpartition.cpp | 132 | ||||
| -rw-r--r-- | indra/newview/llviewercontrol.cpp | 12 | ||||
| -rw-r--r-- | indra/newview/llvopartgroup.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llvotree.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llvowater.cpp | 2 | ||||
| -rwxr-xr-x | indra/newview/pipeline.cpp | 21 | ||||
| -rw-r--r-- | indra/newview/pipeline.h | 1 | 
15 files changed, 113 insertions, 281 deletions
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 51870515f2..f5e85aecda 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -58,6 +58,7 @@ BOOL LLVertexBuffer::sIBOActive = FALSE;  U32 LLVertexBuffer::sAllocatedBytes = 0;  BOOL LLVertexBuffer::sMapped = FALSE;  BOOL LLVertexBuffer::sUseStreamDraw = TRUE; +BOOL LLVertexBuffer::sPreferStreamDraw = FALSE;  S32	LLVertexBuffer::sWeight4Loc = -1;  std::vector<U32> LLVertexBuffer::sDeleteList; @@ -147,7 +148,7 @@ void LLVertexBuffer::setupClientArrays(U32 data_mask)  				{ //needs to be enabled  					glEnableClientState(array[i]);  				} -				else if (gDebugGL && glIsEnabled(array[i])) +				else if (gDebugGL && i > 0 && glIsEnabled(array[i]))  				{ //needs to be disabled, make sure it was (DEBUG TEMPORARY)  					if (gDebugSession)  					{ @@ -427,9 +428,9 @@ LLVertexBuffer::LLVertexBuffer(U32 typemask, S32 usage) :  		mUsage = 0;  	} -	if (mUsage == GL_STREAM_DRAW_ARB && !sUseStreamDraw) +	if (mUsage == GL_DYNAMIC_DRAW_ARB && sPreferStreamDraw)  	{ -		mUsage = 0; +		mUsage = GL_STREAM_DRAW_ARB;  	}  	//zero out offsets diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h index f40f013306..77c9da2d6c 100644 --- a/indra/llrender/llvertexbuffer.h +++ b/indra/llrender/llvertexbuffer.h @@ -92,6 +92,7 @@ public:  	static S32	sWeight4Loc;  	static BOOL	sUseStreamDraw; +	static BOOL	sPreferStreamDraw;  	static void initClass(bool use_vbo);  	static void cleanupClass(); diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index d71b84739c..ec6b942e3e 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -8810,7 +8810,18 @@      <key>Value</key>      <integer>1</integer>    </map> -    <key>RenderVolumeLODFactor</key> +	<key>RenderPreferStreamDraw</key> +	<map> +		<key>Comment</key> +		<string>Use GL_STREAM_DRAW in place of GL_DYNAMIC_DRAW</string> +		<key>Persist</key> +		<integer>1</integer> +		<key>Type</key> +		<string>Boolean</string> +		<key>Value</key> +		<integer>0</integer> +	</map> +	<key>RenderVolumeLODFactor</key>      <map>        <key>Comment</key>        <string>Controls level of detail of primitives (multiplier for current screen area when calculated level of detail)</string> diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp index cbee800acb..d370c72a04 100644 --- a/indra/newview/lldrawable.cpp +++ b/indra/newview/lldrawable.cpp @@ -1052,7 +1052,7 @@ BOOL LLDrawable::isVisible() const  //=======================================  LLSpatialBridge::LLSpatialBridge(LLDrawable* root, BOOL render_by_group, U32 data_mask) -: LLSpatialPartition(data_mask, render_by_group, FALSE) +: LLSpatialPartition(data_mask, render_by_group, GL_STREAM_DRAW_ARB)  {  	mDrawable = root;  	root->setSpatialBridge(this); diff --git a/indra/newview/llfloatermodelpreview.cpp b/indra/newview/llfloatermodelpreview.cpp index dde470693c..cf7ac354b6 100755 --- a/indra/newview/llfloatermodelpreview.cpp +++ b/indra/newview/llfloatermodelpreview.cpp @@ -1653,7 +1653,7 @@ void LLModelLoader::run()  									std::vector<LLImportMaterial> materials;  									materials.resize(model->getNumVolumeFaces()); -									mScene[transformation].push_back(LLModelInstance(model, transformation, materials)); +									mScene[transformation].push_back(LLModelInstance(model, model->mLabel, transformation, materials));  									stretch_extents(model, transformation, mExtents[0], mExtents[1], mFirstTransform);  								}  							} @@ -1944,7 +1944,8 @@ void LLModelLoader::processElement(daeElement* element)  					mesh_scale *= transformation;  					transformation = mesh_scale; -					mScene[transformation].push_back(LLModelInstance(model, transformation, materials)); +					std::string label = getElementLabel(instance_geo); +					mScene[transformation].push_back(LLModelInstance(model, label, transformation, materials));  					stretch_extents(model, transformation, mExtents[0], mExtents[1], mFirstTransform);  				} @@ -2615,188 +2616,6 @@ void LLModelPreview::generateNormals()  } -void LLModelPreview::consolidate() -{ -	std::map<LLImportMaterial, std::vector<LLModelInstance> > composite; - -	LLMatrix4 identity; - -	//bake out each node in current scene to composite -	for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter) -	{ //for each transform in current scene -		LLMatrix4 mat = iter->first; -		glh::matrix4f inv_trans = glh::matrix4f((F32*) mat.mMatrix).inverse().transpose(); -		LLMatrix4 norm_mat(inv_trans.m); - -		for (LLModelLoader::model_instance_list::iterator model_iter = iter->second.begin(); model_iter != iter->second.end(); ++model_iter) -		{ //for each instance with that transform -			LLModelInstance& source_instance = *model_iter; -			LLModel* source = source_instance.mModel; - -			if (!validate_model(source)) -			{ -				llerrs << "Invalid model found!" << llendl; -			} - -			for (S32 i = 0; i < source->getNumVolumeFaces(); ++i) -			{ //for each face in instance -				const LLVolumeFace& src_face = source->getVolumeFace(i); -				LLImportMaterial& source_material = source_instance.mMaterial[i]; - -				//get model in composite that is composite for this material -				LLModel* model = NULL; - -				if (composite.find(source_material) != composite.end()) -				{ -					model = composite[source_material].rbegin()->mModel; -					if (model->getVolumeFace(0).mNumVertices + src_face.mNumVertices > 65535) -					{ -						model = NULL; -					} -				} - -				if (model == NULL) -				{  //no model found, make new model -					std::vector<LLImportMaterial> materials; -					materials.push_back(source_material); -					LLVolumeParams volume_params; -					volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE); -					model = new LLModel(volume_params, 0.f); -					model->mLabel = source->mLabel; -					model->setNumVolumeFaces(0); -					composite[source_material].push_back(LLModelInstance(model, identity, materials)); -				} - -				model->appendFace(src_face, source->mMaterialList[i], mat, norm_mat); -			} -		} -	} - - -	//condense composite into as few LLModel instances as possible -	LLModelLoader::model_list new_model; -	std::vector<LLModelInstance> instance_list; - -	LLVolumeParams volume_params; -	volume_params.setType(LL_PCODE_PROFILE_SQUARE, LL_PCODE_PATH_LINE); - -	std::vector<LLImportMaterial> empty_material; -	LLModelInstance cur_instance(new LLModel(volume_params, 0.f), identity, empty_material); -	cur_instance.mModel->setNumVolumeFaces(0); - -	BOOL first_transform = TRUE; - -	LLModelLoader::scene new_scene; -	LLVector3 min,max; - -	for (std::map<LLImportMaterial, std::vector<LLModelInstance> >::iterator iter = composite.begin(); -		 iter != composite.end(); -		 ++iter) -	{ -		std::map<LLImportMaterial, std::vector<LLModelInstance> >::iterator next_iter = iter; ++next_iter; - -		for (std::vector<LLModelInstance>::iterator instance_iter = iter->second.begin(); -			 instance_iter != iter->second.end(); -			 ++instance_iter) -		{ -			LLModel* source = instance_iter->mModel; - -			if (instance_iter->mMaterial.size() != 1) -			{ -				llerrs << "WTF?" << llendl; -			} - -			if (source->getNumVolumeFaces() != 1) -			{ -				llerrs << "WTF?" << llendl; -			} - -			if (source->mMaterialList.size() != 1) -			{ -				llerrs << "WTF?" << llendl; -			} - -			cur_instance.mModel->addFace(source->getVolumeFace(0)); -			cur_instance.mMaterial.push_back(instance_iter->mMaterial[0]); -			cur_instance.mModel->mMaterialList.push_back(source->mMaterialList[0]); - -			BOOL last_model = FALSE; - -			std::vector<LLModelInstance>::iterator next_instance = instance_iter; ++next_instance; - -			if (next_iter == composite.end() && -				next_instance == iter->second.end()) -			{ -				last_model = TRUE; -			} - -			if (last_model || cur_instance.mModel->getNumVolumeFaces() >= MAX_MODEL_FACES) -			{ -				cur_instance.mModel->mLabel = source->mLabel; - -				cur_instance.mModel->optimizeVolumeFaces(); -				cur_instance.mModel->normalizeVolumeFaces(); - -				if (!validate_model(cur_instance.mModel)) -				{ -					llerrs << "Invalid model detected." << llendl; -				} - -				new_model.push_back(cur_instance.mModel); - -				LLMatrix4 transformation = LLMatrix4(); - -				// adjust the transformation to compensate for mesh normalization -				LLVector3 mesh_scale_vector; -				LLVector3 mesh_translation_vector; -				cur_instance.mModel->getNormalizedScaleTranslation(mesh_scale_vector, mesh_translation_vector); - -				LLMatrix4 mesh_translation; -				mesh_translation.setTranslation(mesh_translation_vector); -				mesh_translation *= transformation; -				transformation = mesh_translation; - -				LLMatrix4 mesh_scale; -				mesh_scale.initScale(mesh_scale_vector); -				mesh_scale *= transformation; -				transformation = mesh_scale; - -				cur_instance.mTransform = transformation; - -				new_scene[transformation].push_back(cur_instance); -				stretch_extents(cur_instance.mModel, transformation, min, max, first_transform); - -				if (!last_model) -				{ -					cur_instance = LLModelInstance(new LLModel(volume_params, 0.f), identity, empty_material); -					cur_instance.mModel->setNumVolumeFaces(0); -				} -			} -		} -	} - -	mScene[mPreviewLOD] = new_scene; -	mModel[mPreviewLOD] = new_model; -	mVertexBuffer[mPreviewLOD].clear(); - -	if (mPreviewLOD == LLModel::LOD_HIGH) -	{ -		mBaseScene = new_scene; -		mBaseModel = new_model; -		clearGLODGroup(); -		mVertexBuffer[5].clear(); -	} - -	mPreviewTarget = (min+max)*0.5f; -	mPreviewScale = (max-min)*0.5f; -	setPreviewTarget(mPreviewScale.magVec()*2.f); - -	clearIncompatible(mPreviewLOD); - -	mResourceCost = calcResourceCost(); -	refresh(); -} -  void LLModelPreview::clearMaterials()  {  	for (LLModelLoader::scene::iterator iter = mScene[mPreviewLOD].begin(); iter != mScene[mPreviewLOD].end(); ++iter) diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h index 8fc85cebb9..e1c520134b 100644 --- a/indra/newview/llfloatermodelpreview.h +++ b/indra/newview/llfloatermodelpreview.h @@ -279,7 +279,7 @@ public:  	void loadModelCallback(S32 lod);  	void genLODs(S32 which_lod = -1, U32 decimation = 3, bool enforce_tri_limit = false);  	void generateNormals(); -	void consolidate(); +	  	void clearMaterials();  	U32 calcResourceCost();  	void rebuildUploadData(); diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp index 4d6bd46840..6c647eb9da 100755 --- a/indra/newview/llmeshrepository.cpp +++ b/indra/newview/llmeshrepository.cpp @@ -2981,7 +2981,7 @@ LLSD LLMeshUploadThread::createObject(LLModelInstance& instance)  	object_params["pos"] = ll_sd_from_vector3(position + mOrigin);  	object_params["rotation"] = ll_sd_from_quaternion(quat_rotation);  	object_params["scale"] = ll_sd_from_vector3(scale); -	object_params["name"] = instance.mModel->getName(); +	object_params["name"] = instance.mLabel;  	// load material from dae file  	object_params["facelist"] = LLSD::emptyArray(); diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index b642a89192..0fcb2213de 100644 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -108,14 +108,16 @@ class LLModelInstance  public:  	LLPointer<LLModel> mModel;  	LLPointer<LLModel> mLOD[5]; -	  +	 +	std::string mLabel; +  	LLUUID mMeshID;  	LLMatrix4 mTransform;  	std::vector<LLImportMaterial> mMaterial; -	LLModelInstance(LLModel* model, LLMatrix4& transform, std::vector<LLImportMaterial>& materials) -		: mModel(model), mTransform(transform), mMaterial(materials) +	LLModelInstance(LLModel* model, const std::string& label, LLMatrix4& transform, std::vector<LLImportMaterial>& materials) +		: mModel(model), mLabel(label), mTransform(transform), mMaterial(materials)  	{  	}  }; diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 5dd1b5ba7e..14775f0f21 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -252,11 +252,15 @@ U8* get_box_fan_indices_ptr(LLCamera* camera, const LLVector4a& center)  } +static LLFastTimer::DeclareTimer FTM_BUILD_OCCLUSION("Build Occlusion"); +  void LLSpatialGroup::buildOcclusion()  {  	if (mOcclusionVerts.isNull())  	{ -		mOcclusionVerts = new LLVertexBuffer(LLVertexBuffer::MAP_VERTEX, GL_DYNAMIC_DRAW_ARB); + +		mOcclusionVerts = new LLVertexBuffer(LLVertexBuffer::MAP_VERTEX,  +			LLVertexBuffer::sUseStreamDraw ? mBufferUsage : 0); //if GL has a hard time with VBOs, don't use them for occlusion culling.  		mOcclusionVerts->allocateBuffer(8, 64, true);  		LLStrider<U16> idx; @@ -275,40 +279,47 @@ void LLSpatialGroup::buildOcclusion()  	LLStrider<LLVector3> pos; -	mOcclusionVerts->getVertexStrider(pos); - -	LLVector4a* v = (LLVector4a*) pos.get(); - -	const LLVector4a& c = mBounds[0]; -	const LLVector4a& s = r; -	 -	static const LLVector4a octant[] =  	{ -		LLVector4a(-1.f, -1.f, -1.f), -		LLVector4a(-1.f, -1.f, 1.f), -		LLVector4a(-1.f, 1.f, -1.f), -		LLVector4a(-1.f, 1.f, 1.f), +		LLFastTimer t(FTM_BUILD_OCCLUSION); +		mOcclusionVerts->getVertexStrider(pos); +	} -		LLVector4a(1.f, -1.f, -1.f), -		LLVector4a(1.f, -1.f, 1.f), -		LLVector4a(1.f, 1.f, -1.f), -		LLVector4a(1.f, 1.f, 1.f), -	}; +	{ +		LLVector4a* v = (LLVector4a*) pos.get(); -	//vertex positions are encoded so the 3 bits of their vertex index  -	//correspond to their axis facing, with bit position 3,2,1 matching -	//axis facing x,y,z, bit set meaning positive facing, bit clear  -	//meaning negative facing +		const LLVector4a& c = mBounds[0]; +		const LLVector4a& s = r; +		 +		static const LLVector4a octant[] = +		{ +			LLVector4a(-1.f, -1.f, -1.f), +			LLVector4a(-1.f, -1.f, 1.f), +			LLVector4a(-1.f, 1.f, -1.f), +			LLVector4a(-1.f, 1.f, 1.f), + +			LLVector4a(1.f, -1.f, -1.f), +			LLVector4a(1.f, -1.f, 1.f), +			LLVector4a(1.f, 1.f, -1.f), +			LLVector4a(1.f, 1.f, 1.f), +		}; + +		//vertex positions are encoded so the 3 bits of their vertex index  +		//correspond to their axis facing, with bit position 3,2,1 matching +		//axis facing x,y,z, bit set meaning positive facing, bit clear  +		//meaning negative facing +		 +		for (S32 i = 0; i < 8; ++i) +		{ +			LLVector4a p; +			p.setMul(s, octant[i]); +			p.add(c); +			v[i] = p; +		} +	} -	for (S32 i = 0; i < 8; ++i)  	{ -		LLVector4a p; -		p.setMul(s, octant[i]); -		p.add(c); -		v[i] = p; +		mOcclusionVerts->setBuffer(0);  	} -	 -	mOcclusionVerts->setBuffer(0);  	clearState(LLSpatialGroup::OCCLUSION_DIRTY);  } @@ -1189,7 +1200,7 @@ LLSpatialGroup::LLSpatialGroup(OctreeNode* node, LLSpatialPartition* part) :  	mOctreeNode(node),  	mSpatialPartition(part),  	mVertexBuffer(NULL),  -	mBufferUsage(GL_STATIC_DRAW_ARB), +	mBufferUsage(part->mBufferUsage),  	mDistance(0.f),  	mDepth(0.f),  	mLastUpdateDistance(-1.f),  @@ -1616,6 +1627,10 @@ void LLSpatialGroup::checkOcclusion()  	}  } +static LLFastTimer::DeclareTimer FTM_PUSH_OCCLUSION_VERTS("Push Occlusion"); +static LLFastTimer::DeclareTimer FTM_SET_OCCLUSION_STATE("Occlusion State"); +static LLFastTimer::DeclareTimer FTM_OCCLUSION_EARLY_FAIL("Occlusion Early Fail"); +  void LLSpatialGroup::doOcclusion(LLCamera* camera)  {  	if (mSpatialPartition->isOcclusionEnabled() && LLPipeline::sUseOcclusion > 1) @@ -1623,6 +1638,7 @@ void LLSpatialGroup::doOcclusion(LLCamera* camera)  		// Don't cull hole/edge water, unless we have the GL_ARB_depth_clamp extension  		if (earlyFail(camera, this))  		{ +			LLFastTimer t(FTM_OCCLUSION_EARLY_FAIL);  			setOcclusionState(LLSpatialGroup::DISCARD_QUERY);  			assert_states_valid(this);  			clearOcclusionState(LLSpatialGroup::OCCLUDED, LLSpatialGroup::STATE_MODE_DIFF); @@ -1664,41 +1680,47 @@ void LLSpatialGroup::doOcclusion(LLCamera* camera)  					sPendingQueries.insert(mOcclusionQuery[LLViewerCamera::sCurCameraID]);  #endif -					glBeginQueryARB(mode, mOcclusionQuery[LLViewerCamera::sCurCameraID]);					 +					{ +						LLFastTimer t(FTM_PUSH_OCCLUSION_VERTS); +						glBeginQueryARB(mode, mOcclusionQuery[LLViewerCamera::sCurCameraID]);					 -					mOcclusionVerts->setBuffer(LLVertexBuffer::MAP_VERTEX); +						mOcclusionVerts->setBuffer(LLVertexBuffer::MAP_VERTEX); -					if (!use_depth_clamp && mSpatialPartition->mDrawableType == LLDrawPool::POOL_VOIDWATER) -					{ -						LLGLSquashToFarClip squash(glh_get_current_projection(), 1); -						if (camera->getOrigin().isExactlyZero()) -						{ //origin is invalid, draw entire box -							mOcclusionVerts->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, 0); -							mOcclusionVerts->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, b111*8);				 -						} -						else +						if (!use_depth_clamp && mSpatialPartition->mDrawableType == LLDrawPool::POOL_VOIDWATER)  						{ -							mOcclusionVerts->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, get_box_fan_indices(camera, mBounds[0])); -						} -					} -					else -					{ -						if (camera->getOrigin().isExactlyZero()) -						{ //origin is invalid, draw entire box -							mOcclusionVerts->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, 0); -							mOcclusionVerts->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, b111*8);				 +							LLGLSquashToFarClip squash(glh_get_current_projection(), 1); +							if (camera->getOrigin().isExactlyZero()) +							{ //origin is invalid, draw entire box +								mOcclusionVerts->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, 0); +								mOcclusionVerts->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, b111*8);				 +							} +							else +							{ +								mOcclusionVerts->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, get_box_fan_indices(camera, mBounds[0])); +							}  						}  						else  						{ -							mOcclusionVerts->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, get_box_fan_indices(camera, mBounds[0])); +							if (camera->getOrigin().isExactlyZero()) +							{ //origin is invalid, draw entire box +								mOcclusionVerts->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, 0); +								mOcclusionVerts->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, b111*8);				 +							} +							else +							{ +								mOcclusionVerts->drawRange(LLRender::TRIANGLE_FAN, 0, 7, 8, get_box_fan_indices(camera, mBounds[0])); +							}  						} -					} -					glEndQueryARB(mode); +						glEndQueryARB(mode); +					}  				} -				setOcclusionState(LLSpatialGroup::QUERY_PENDING); -				clearOcclusionState(LLSpatialGroup::DISCARD_QUERY); +				{ +					LLFastTimer t(FTM_SET_OCCLUSION_STATE); +					setOcclusionState(LLSpatialGroup::QUERY_PENDING); +					clearOcclusionState(LLSpatialGroup::DISCARD_QUERY); +				}  			}  		}  	} diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index 414036c597..46aa44b2bb 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -339,15 +339,6 @@ static bool handleNumpadControlChanged(const LLSD& newvalue)  	return true;  } -static bool handleRenderUseVBOChanged(const LLSD& newvalue) -{ -	if (gPipeline.isInit()) -	{ -		gPipeline.setUseVBO(newvalue.asBoolean()); -	} -	return true; -} -  static bool handleWLSkyDetailChanged(const LLSD&)  {  	if (gSky.mVOWLSkyp.notNull()) @@ -636,8 +627,9 @@ void settings_setup_listeners()  	gSavedSettings.getControl("MuteVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));  	gSavedSettings.getControl("MuteAmbient")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));  	gSavedSettings.getControl("MuteUI")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2)); -	gSavedSettings.getControl("RenderVBOEnable")->getSignal()->connect(boost::bind(&handleRenderUseVBOChanged, _2)); +	gSavedSettings.getControl("RenderVBOEnable")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));  	gSavedSettings.getControl("RenderUseStreamVBO")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2)); +	gSavedSettings.getControl("RenderPreferStreamDraw")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));  	gSavedSettings.getControl("WLSkyDetail")->getSignal()->connect(boost::bind(&handleWLSkyDetailChanged, _2));  	gSavedSettings.getControl("NumpadControl")->getSignal()->connect(boost::bind(&handleNumpadControlChanged, _2));  	gSavedSettings.getControl("JoystickAxis0")->getSignal()->connect(boost::bind(&handleJoystickChanged, _2)); diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp index d966bd1614..f762f04d8e 100644 --- a/indra/newview/llvopartgroup.cpp +++ b/indra/newview/llvopartgroup.cpp @@ -360,7 +360,7 @@ U32 LLVOPartGroup::getPartitionType() const  }  LLParticlePartition::LLParticlePartition() -: LLSpatialPartition(LLDrawPoolAlpha::VERTEX_DATA_MASK, TRUE, GL_DYNAMIC_DRAW_ARB) +: LLSpatialPartition(LLDrawPoolAlpha::VERTEX_DATA_MASK, TRUE, GL_STREAM_DRAW_ARB)  {  	mRenderPass = LLRenderPass::PASS_ALPHA;  	mDrawableType = LLPipeline::RENDER_TYPE_PARTICLES; diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp index 20ca02efda..1b5aed804f 100644 --- a/indra/newview/llvotree.cpp +++ b/indra/newview/llvotree.cpp @@ -1330,7 +1330,7 @@ U32 LLVOTree::getPartitionType() const  }  LLTreePartition::LLTreePartition() -: LLSpatialPartition(0, FALSE, 0) +: LLSpatialPartition(0, FALSE, GL_DYNAMIC_DRAW_ARB)  {  	mDrawableType = LLPipeline::RENDER_TYPE_TREE;  	mPartitionType = LLViewerRegion::PARTITION_TREE; diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp index 9f3ec9cadc..77875859e9 100644 --- a/indra/newview/llvowater.cpp +++ b/indra/newview/llvowater.cpp @@ -289,7 +289,7 @@ U32 LLVOVoidWater::getPartitionType() const  }  LLWaterPartition::LLWaterPartition() -: LLSpatialPartition(0, FALSE, 0) +: LLSpatialPartition(0, FALSE, GL_DYNAMIC_DRAW_ARB)  {  	mInfiniteFarClip = TRUE;  	mDrawableType = LLPipeline::RENDER_TYPE_WATER; diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index 221960ba0f..a8e36df294 100755 --- a/indra/newview/pipeline.cpp +++ b/indra/newview/pipeline.cpp @@ -383,6 +383,7 @@ void LLPipeline::init()  	sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");  	sUseTriStrips = gSavedSettings.getBOOL("RenderUseTriStrips");  	LLVertexBuffer::sUseStreamDraw = gSavedSettings.getBOOL("RenderUseStreamVBO"); +	LLVertexBuffer::sPreferStreamDraw = gSavedSettings.getBOOL("RenderPreferStreamDraw");  	sRenderAttachedLights = gSavedSettings.getBOOL("RenderAttachedLights");  	sRenderAttachedParticles = gSavedSettings.getBOOL("RenderAttachedParticles"); @@ -5795,6 +5796,8 @@ void LLPipeline::resetVertexBuffers()  	sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");  	sUseTriStrips = gSavedSettings.getBOOL("RenderUseTriStrips");  	LLVertexBuffer::sUseStreamDraw = gSavedSettings.getBOOL("RenderUseStreamVBO"); +	LLVertexBuffer::sPreferStreamDraw = gSavedSettings.getBOOL("RenderPreferStreamDraw"); +	LLVertexBuffer::sEnableVBOs = gSavedSettings.getBOOL("RenderVBOEnable");  	sBakeSunlight = gSavedSettings.getBOOL("RenderBakeSunlight");  	sNoAlpha = gSavedSettings.getBOOL("RenderNoAlpha"); @@ -5853,24 +5856,6 @@ void LLPipeline::renderObjects(U32 type, U32 mask, BOOL texture)  	gGLLastMatrix = NULL;		  } -void LLPipeline::setUseVBO(BOOL use_vbo) -{ -	if (use_vbo != LLVertexBuffer::sEnableVBOs) -	{ -		if (use_vbo) -		{ -			llinfos << "Enabling VBO." << llendl; -		} -		else -		{  -			llinfos << "Disabling VBO." << llendl; -		} -		 -		resetVertexBuffers(); -		LLVertexBuffer::initClass(use_vbo); -	} -} -  void apply_cube_face_rotation(U32 face)  {  	switch (face) diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 0eb020605e..32ac93388d 100644 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -119,7 +119,6 @@ public:  	void allocatePhysicsBuffer();  	void resetVertexBuffers(LLDrawable* drawable); -	void setUseVBO(BOOL use_vbo);  	void generateImpostor(LLVOAvatar* avatar);  	void bindScreenToTexture();  	void renderBloom(BOOL for_snapshot, F32 zoom_factor = 1.f, int subfield = 0);  | 
