diff options
| author | Dave Parks <davep@lindenlab.com> | 2013-06-20 12:10:26 -0500 | 
|---|---|---|
| committer | Dave Parks <davep@lindenlab.com> | 2013-06-20 12:10:26 -0500 | 
| commit | 9ea2d90a0dd9ca9ab76583187354533011ef3fcb (patch) | |
| tree | 93be8f1dd703cd87083cf871c1948671e0a8cb97 | |
| parent | 2655c7a17ae38a073dcf8f05b0127b68edc34c95 (diff) | |
| parent | f62d04d4256e3ebb7ecf64ea370099c8795e8581 (diff) | |
Automated merge with http://bitbucket.org/lindenlab/viewer-release
60 files changed, 1036 insertions, 559 deletions
| @@ -248,31 +248,33 @@ bb9932a7a5fd00edf52d95f354e3b37ae6a942db DRTVWR-156  6414ecdabc5d89515b08d1f872cf923ed3a5523a DRTVWR-148  2a3965b3ad202df7ea25d2be689291bb14a1280e DRTVWR-155  24a7281bef42bd4430ceb25db8b195449c2c7de3 DRTVWR-153 +a716684aa7c07c440b1de5815b8a1f3dd3fd8bfb DRTVWR-159 +9a78ac13f047056f788c4734dd91aebfe30970e3 DRTVWR-157  5910f8063a7e1ddddf504c2f35ca831cc5e8f469 DRTVWR-160  f0a174c2adb4bc39b16722a61d7eeb4f2a1d4843 3.3.3-beta1  f0a174c2adb4bc39b16722a61d7eeb4f2a1d4843 DRTVWR-144 -2d6c0634b11e6f3df11002b8510a72a0433da00a DRTVWR-164 +089e5c84b2dece68f2b016c842ef9b5de4786842 DRTVWR-161  600f3b3920d94de805ac6dc8bb6def9c069dd360 DRTVWR-162 +c08e2ac17a99973b2a94477659220b99b8847ae2 DRTVWR-163 +2d6c0634b11e6f3df11002b8510a72a0433da00a DRTVWR-164  80b5e5e9775966d3839331ffa7a16a60f9d7c930 DRTVWR-165  fdcc08a4f20ae9bb060f4693c8980d216534efdf 3.3.3-beta2  af5f3e43e6e4424b1da19d9e16f6b853a7b822ed DRTVWR-169  4b3c68199a86cabaa5d9466d7b0f7e141e901d7a 3.3.3-beta3  6428242e124b523813bfaf4c45b3d422f0298c81 3.3.3-release -a716684aa7c07c440b1de5815b8a1f3dd3fd8bfb DRTVWR-159 -9a78ac13f047056f788c4734dd91aebfe30970e3 DRTVWR-157 -089e5c84b2dece68f2b016c842ef9b5de4786842 DRTVWR-161 -c08e2ac17a99973b2a94477659220b99b8847ae2 DRTVWR-163  b9d0170b62eb1c7c3adaa37a0b13a833e5e659f9 DRTVWR-171  050e48759337249130f684b4a21080b683f61732 DRTVWR-168  09ef7fd1b0781f33b8a3a9af6236b7bcb4831910 DRTVWR-170  f87bfbe0b62d26f451d02a47c80ebef6b9168fc2 DRTVWR-158  f91d003091a61937a044652c4c674447f7dcbb7a 3.3.4-beta1 +005dfe5c4c377207d065fb27858d2eb0b53b143a DRTVWR-167  bce218b2b45b730b22cc51e4807aa8b571cadef3 DRTVWR-173  cbea6356ce9cb0c313b6777f10c5c14783264fcc DRTVWR-174  82b5330bc8b17d0d4b598832e9c5a92e90075682 3.3.4-beta2  57d221de3df94f90b55204313c2cef044a3c0ae2 DRTVWR-176  eb539c65e6ee26eea2bf373af2d0f4b52dc91289 DRTVWR-177  a8057e1b9a1246b434a27405be35e030f7d28b0c 3.3.4-beta3 +888768f162d2c0a8de1dcc5fb9a08bd8bd120a6b DRTVWR-175  4281aa899fb2cedb7a9ca7ce91c5c29d4aa69594 DRTVWR-180  5c08e1d8edd871807153603b690e3ee9dbb548aa DRTVWR-183  6c75f220b103db1420919c8b635fe53e2177f318 3.3.4-beta4 @@ -283,24 +285,32 @@ ab2ffc547c8a8950ff187c4f6c95e5334fab597b 3.3.4-beta5  7c9102fb998885621919f2474a002c35b583539b 3.3.4-release2  8c9085066c78ed5f6c9379dc054c82a6fcdb1851 DRTVWR-207  351eea5f9dc192fc5ddea3b02958de97677a0a12 3.3.4-release3 -005dfe5c4c377207d065fb27858d2eb0b53b143a DRTVWR-167 -888768f162d2c0a8de1dcc5fb9a08bd8bd120a6b DRTVWR-175  a8b3eca451a9eaab59987efb0ab1c4217e3f2dcc DRTVWR-182  1f27cdfdc54246484f8afbbe42ce48e954175cbd 3.4.0-beta1 -9ee9387789701d597130f879d9011a4958753862 DRTVWR-189 +81f6b745ef27f5915fd07f988fdec9944f2bb73e DRTVWR-186  47f0d08ba7ade0a3905074009067c6d3df7e16ae DRTVWR-190 +cc953f00956be52cc64c30637bbeec310eea603f DRTVWR-181 +c04e68e1b0034fd0a20815ae24c77e5f8428e822 DRTVWR-188 +9ee9387789701d597130f879d9011a4958753862 DRTVWR-189  421126293dcbde918e0da027ca0ab9deb5b4fbf2 DRTVWR-192 +4b2c52aecb7a75de31dbb12d9f5b9a251d8707be DRTVWR-191  33a2fc7a910ae29ff8b4850316ed7fbff9f64d33 DRTVWR-195  e9732c739c8a72a590216951505ea9c76a526a84 DRTVWR-193 +78ca0bbf43a92e8914d4cfa87d69a6717ef7d4cf DRTVWR-194  7602f61c804a512764e349c034c02ddabeefebc4 DRTVWR-196  ae5c83dd61d2d37c45f1d5b8bf2b036d87599f1b DRTVWR-198  507bdfbd6bf844a511c1ffeda4baa80016ed1346 DRTVWR-197  b1dbb1a83f48f93f6f878cff9e52d2cb635e145c 3.4.0-beta2  37402e2b19af970d51b0a814d79892cc5647532b DRTVWR-200  182a9bf30e81070361bb020a78003b1cf398e79c 3.4.0-beta3 +248f4acd92a706c79e842bc83d80baa7369c0c2e DRTVWR-203  7649a3dff5ec22d3727377e5f02efd0f421e4cb5 DRTVWR-201  84fb70dfe3444e75a44fb4bee43e2fc8221cebdd 3.4.0-beta4 +de3be913f68813a9bac7d1c671fef96d1159bcd6 DRTVWR-202  573e863be2f26d3687161def4b9fea9b7038dda8 3.4.0-beta5 +34dbbe2b00afe90352d3acf8290eb10ab90d1c8b oz-build-test-tag +6ee71714935ffcd159db3d4f5800c1929aac54e1 DRTVWR-205 +7b22c612fc756e0ea63b10b163e81d107f85dbf8 DRTVWR-206  af7b28e75bd5a629cd9e0dc46fb3f1757626f493 DRTVWR-212  015012c2b740ccdec8a8c3d6e5f898449ecfe0b8 DRTVWR-213  62b07aa81b1957897c3846292bb9412977b0af6c 3.3.4-beta6 @@ -309,6 +319,7 @@ ceed0b65a69f1eac20d523e0203320a32f9a3f3c DRTVWR-215  97977c67245f52db20eb15f1918cc0f24778cabc 3.4.0-release  5adb2b8f96c3cac88ad7c7d996d707f1b29df336 3.4.1-beta1  b3f74858a1c8720c82d0978f3877a3fc8ba459ec 3.4.1-beta1a +b61afe175b829c149d369524a4e974dfda99facf DRTVWR-219  2b779f233ee6f38c89cb921650c773a96e63da92 DRTVWR-220  0b9d95f4bfb6867cbf56eaec51633b0da2f1262d DRTVWR-221  e6e553761829dc0270eaaa712b7cb0622535b076 3.4.1-beta3 @@ -333,36 +344,31 @@ baf97f06ae17223614c5e31aa42e71d87cff07fe DRTVWR-236  b2f21e3442542283a80e7eaebae9f833e5a927b6 DRTVWR-237  3f9be82de642d468c5fc272cb9d96b46b5498402 3.4.1-beta12  e59ffd3fe0838ae6b09b242a6e9df71761b88f41 3.4.1-release -81f6b745ef27f5915fd07f988fdec9944f2bb73e DRTVWR-186 -cc953f00956be52cc64c30637bbeec310eea603f DRTVWR-181 -c04e68e1b0034fd0a20815ae24c77e5f8428e822 DRTVWR-188 -4b2c52aecb7a75de31dbb12d9f5b9a251d8707be DRTVWR-191 -78ca0bbf43a92e8914d4cfa87d69a6717ef7d4cf DRTVWR-194 -248f4acd92a706c79e842bc83d80baa7369c0c2e DRTVWR-203 -de3be913f68813a9bac7d1c671fef96d1159bcd6 DRTVWR-202 -34dbbe2b00afe90352d3acf8290eb10ab90d1c8b oz-build-test-tag -6ee71714935ffcd159db3d4f5800c1929aac54e1 DRTVWR-205 -7b22c612fc756e0ea63b10b163e81d107f85dbf8 DRTVWR-206 -b61afe175b829c149d369524a4e974dfda99facf DRTVWR-219  32896d5e920ca9a29256ff3b747c2e99752aa5ae DRTVWR-217  704bbae7b182a1f2811a47a054e680522966f54a 3.4.2-beta1 +d799593b53ed733862e9a13871e318e886469377 DRTVWR-208 +e497dcde7a3653e384eb223a8a460030e89c294c DRTVWR-223  288539fc0408ed4b69a99665de33bbbc2c3c08fe DRTVWR-216  e664473c16df1d82ffaff382e7b3e023da202d52 3.4.2-beta2 +93ab02d83f51e30a3cabad98aff89601befd9413 DRTVWR-240  0891d7a773a31397dcad48be3fa66531d567a821 DRTVWR-242  710785535362b3cb801b6a3dc4703be3373bd0cd 3.4.2-beta3 -e9a5886052433d5db9e504ffaca10890f9932979 DRTVWR-243 -73b84b9864dc650fe7c8fc9f52361450f0849004 3.4.2-beta4 -16310aabccf315870f7cc9bf966926c0ad6954fa 3.4.2-release -d799593b53ed733862e9a13871e318e886469377 DRTVWR-208 -e497dcde7a3653e384eb223a8a460030e89c294c DRTVWR-223 -93ab02d83f51e30a3cabad98aff89601befd9413 DRTVWR-240  2aa72e3372a83dece4df9cf72fb1e7c34f90b5e3 DRTVWR-209  f7bedce18ad52283e6072814db23318907261487 DRTVWR-238  7b64c96fbcadf360bd2feaae19d330166b70877c DRTVWR-210 +e9a5886052433d5db9e504ffaca10890f9932979 DRTVWR-243 +73b84b9864dc650fe7c8fc9f52361450f0849004 3.4.2-beta4 +16310aabccf315870f7cc9bf966926c0ad6954fa 3.4.2-release  5e4e4128b256525bafc07a62e35ae8527aaa9c9d DRTVWR-241  f1d3b3fcab28ed9ea532bf50db0ba96f5c8cc8e9 DRTVWR-232  4918b150e75df6b516fb6c2616d32043fa6b4cac DRTVWR-245  94ab2b49458ab372a95d2d6949fdf574f413068d 3.4.3-beta1 +4c3460cb1fb7c6da9965e09c734d282a8e9c81f0 DRTVWR-229 +f4481df42f9a4a92bf475a80f0c51d1a4bbdfd59 DRTVWR-246 +39c5204b6e800983a41ccac8ad6dc993120197c6 DRTVWR-247 +7c7d57d393e8ae7b61623279de06eb4a62ccae6a DRTVWR-249 +f72b50ef168c159d6e79e97aa2bcafaf8577ab99 DRTVWR-230 +b418be80903520c492e1173f3afbc4021cad5d07 DRTVWR-255  965b9a35e260c0f53be1a25f0db7abc8a67eaf47 DRTVWR-252  bb10adc4f76cf0067fca7075146f00cdc0740e9d DRTVWR-251  ab0aa2f6ba22b52fed30a2337197f589156edc75 DRTVWR-253 @@ -371,31 +377,25 @@ ab0aa2f6ba22b52fed30a2337197f589156edc75 DRTVWR-253  44e764a6ac9e672a4f3bce821a4b6a218590c374 DRTVWR-258  c23d734065ed593b2413385aecd8366d8e0ee96b DRTVWR-257  452ce96d4046dc05a3ecaecc203e2cc8ddd72e76 DRTVWR-259 +9aa1aa9f1fe13c194695a0b8f0af298296241dc2 DRTVWR-260  daca610d840625b5bebb966a57cb49581852c417 DRTVWR-265  9afbdc4e24cc04feacfb2b7a10b78a64f780901a DRTVWR-266  73280db02501f5ad041fc18b1eba68e73a81996c DRTVWR-267  870e2d79e0063fda87187f17bbc2747766733194 3.4.3-beta3  0a2ca6546b499239afeb66d17b2fadbcdbe36ab1 3.4.3-release -4c3460cb1fb7c6da9965e09c734d282a8e9c81f0 DRTVWR-229 -f4481df42f9a4a92bf475a80f0c51d1a4bbdfd59 DRTVWR-246 -39c5204b6e800983a41ccac8ad6dc993120197c6 DRTVWR-247 -7c7d57d393e8ae7b61623279de06eb4a62ccae6a DRTVWR-249 -f72b50ef168c159d6e79e97aa2bcafaf8577ab99 DRTVWR-230 -b418be80903520c492e1173f3afbc4021cad5d07 DRTVWR-255 -9aa1aa9f1fe13c194695a0b8f0af298296241dc2 DRTVWR-260  84fbaf2d4141bd161731430e760949dc787ca206 DRTVWR-244  083d2d36b5bb1c54fc3dd7caac0e7ac381a9cef0 3.4.4-beta1 +391a8c74cec7275c5d26c85ad108d4782a3e3dd9 DRTVWR-268  b634dec987c16e8c9c938e11e52591d9ead8fa9b DRTVWR-270  cd39255bd23330fd30c04105f2811e941d8524fe 3.4.4-beta2  2c4011bbc2b15b82198fd8b51f3a9fe765a08c4d DRTVWR-271  2f8a3ef687bc55828abcb17ac1ad7cde70536d7e 3.4.4-beta3  35cfd4cf5b895fa776592f2e630e330be7f0604e DRTVWR-273 +a36f1f354b02aa6e448ca13685de167d0a0a3d03 DRTVWR-272 +37dba00ad820de3a808d4039396b162a9c275b3e DRTVWR-269  c374035d459af3c03dea2dd90880dfc25de64706 DRTVWR-275  05d9f1dd7a954069af2a33abedb7713fa36a04cb 3.4.4-beta4  e1bb1ae7d8b12faeb37933a737c199cc9b9f89cc 3.4.4-release -391a8c74cec7275c5d26c85ad108d4782a3e3dd9 DRTVWR-268 -a36f1f354b02aa6e448ca13685de167d0a0a3d03 DRTVWR-272 -37dba00ad820de3a808d4039396b162a9c275b3e DRTVWR-269  7c6dfdc1b7a2ce0d8e3a8f3ce3058547ea065c0f DRTVWR-250  b9ff9730daa53a541925300cbd02bb14575a5705 DRTVWR-277  af6b711a97073431953b55ee808aaa09900c27e5 DRTVWR-276 @@ -405,6 +405,8 @@ c296133849d1f103c0e2abc41e6599daed00b67b DRTVWR-280  5df4802bec93c8d0a509946d826bb4c50c5442ec DRTVWR-281  7c1c33ba4cfd2d15ca51cc1ac440eca551331a4a DRTVWR-283  6b9c7dbebef793230d64e1b452577c8b142d4143 3.4.5-beta2 +37947e4f771f001b551581bf7cd0051c3153beed DRTVWR-282 +6482cceb91cda68b799f3e6cdc66d33bf123547a DRTVWR-284  ccf991e02dc2f63fb646324230d54832683f4a9b DRTVWR-286  2d849850558a5a0324b398d1c102d30bcbdfb88f DRTVWR-287  e06898df8644fe567bee94f817d03abc1c380993 3.4.5-beta3 diff --git a/doc/contributions.txt b/doc/contributions.txt index 66ccb404a8..7712f16ade 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -175,6 +175,7 @@ Ansariel Hiller  	STORM-1685  	STORM-1713  	STORM-1899 +	MAINT-2368  Aralara Rajal  Ardy Lay  	STORM-859 @@ -479,6 +480,7 @@ Hiro Sommambulist  Hitomi Tiponi  	STORM-1741  	STORM-1862 +	BUG-1067  Holger Gilruth  Horatio Freund  Hoze Menges diff --git a/indra/cmake/LLAddBuildTest.cmake b/indra/cmake/LLAddBuildTest.cmake index 9bb3077797..9bb3077797 100755..100644 --- a/indra/cmake/LLAddBuildTest.cmake +++ b/indra/cmake/LLAddBuildTest.cmake diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp index 1c25256e95..c8a05e1fae 100755 --- a/indra/llimage/llimage.cpp +++ b/indra/llimage/llimage.cpp @@ -689,8 +689,17 @@ void LLImageRaw::fill( const LLColor4U& color )  	}  } +LLPointer<LLImageRaw> LLImageRaw::duplicate() +{ +	if(getNumRefs() < 2) +	{ +		return this; //nobody else refences to this image, no need to duplicate. +	} - +	//make a duplicate +	LLPointer<LLImageRaw> dup = new LLImageRaw(getData(), getWidth(), getHeight(), getComponents()); +	return dup;  +}  // Src and dst can be any size.  Src and dst can each have 3 or 4 components.  void LLImageRaw::copy(LLImageRaw* src) diff --git a/indra/llimage/llimage.h b/indra/llimage/llimage.h index 4fc40ecff7..2277afc585 100755 --- a/indra/llimage/llimage.h +++ b/indra/llimage/llimage.h @@ -30,6 +30,7 @@  #include "lluuid.h"  #include "llstring.h"  #include "llthread.h" +#include "llpointer.h"  const S32 MIN_IMAGE_MIP =  2; // 4x4, only used for expand/contract power of 2  const S32 MAX_IMAGE_MIP = 11; // 2048x2048 @@ -214,6 +215,9 @@ public:  	// Copy operations +	//duplicate this raw image if refCount > 1. +	LLPointer<LLImageRaw> duplicate(); +  	// Src and dst can be any size.  Src and dst can each have 3 or 4 components.  	void copy( LLImageRaw* src ); diff --git a/indra/llmath/llcamera.cpp b/indra/llmath/llcamera.cpp index 22ba26f99b..c14c117da9 100755 --- a/indra/llmath/llcamera.cpp +++ b/indra/llmath/llcamera.cpp @@ -163,7 +163,7 @@ size_t LLCamera::readFrustumFromBuffer(const char *buffer)  S32 LLCamera::AABBInFrustum(const LLVector4a ¢er, const LLVector4a& radius)   { -	static const LLVector4a scaler[] = { +	const LLVector4a scaler[] = {  		LLVector4a(-1,-1,-1),  		LLVector4a( 1,-1,-1),  		LLVector4a(-1, 1,-1), @@ -207,7 +207,7 @@ S32 LLCamera::AABBInFrustum(const LLVector4a ¢er, const LLVector4a& radius)  S32 LLCamera::AABBInFrustumNoFarClip(const LLVector4a& center, const LLVector4a& radius)   { -	static const LLVector4a scaler[] = { +	const LLVector4a scaler[] = {  		LLVector4a(-1,-1,-1),  		LLVector4a( 1,-1,-1),  		LLVector4a(-1, 1,-1), diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp index 47041a2880..f2a3e059ef 100755 --- a/indra/llmessage/llcurl.cpp +++ b/indra/llmessage/llcurl.cpp @@ -72,7 +72,8 @@  static const U32 EASY_HANDLE_POOL_SIZE		= 5;  static const S32 MULTI_PERFORM_CALL_REPEAT	= 5; -static const S32 CURL_REQUEST_TIMEOUT = 30; // seconds per operation +static const S32 CURL_REQUEST_TIMEOUT = 120; // seconds per operation +static const S32 CURL_CONNECT_TIMEOUT = 30; //seconds to wait for a connection  static const S32 MAX_ACTIVE_REQUEST_COUNT = 100;  // DEBUG // @@ -517,6 +518,7 @@ void LLCurl::Easy::prepRequest(const std::string& url,  	//don't verify host name so urls with scrubbed host names will work (improves DNS performance)  	setopt(CURLOPT_SSL_VERIFYHOST, 0);  	setopt(CURLOPT_TIMEOUT, llmax(time_out, CURL_REQUEST_TIMEOUT)); +	setopt(CURLOPT_CONNECTTIMEOUT, CURL_CONNECT_TIMEOUT);  	setoptString(CURLOPT_URL, url); diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp index 28ed051c55..5ed05e2201 100755 --- a/indra/llprimitive/llmodel.cpp +++ b/indra/llprimitive/llmodel.cpp @@ -628,25 +628,41 @@ LLModel::EModelStatus load_face_from_dom_polygons(std::vector<LLVolumeFace>& fac  			if (v)  			{  				U32 v_idx = idx[j*stride+v_offset]*3; +				v_idx = llclamp(v_idx, (U32) 0, (U32) v->getCount());  				vert.getPosition().set(v->get(v_idx),  								v->get(v_idx+1),  								v->get(v_idx+2));  			} -			if (n) +			//bounds check n and t lookups because some FBX to DAE converters +			//use negative indices and empty arrays to indicate data does not exist +			//for a particular channel +			if (n && n->getCount() > 0)  			{  				U32 n_idx = idx[j*stride+n_offset]*3; +				n_idx = llclamp(n_idx, (U32) 0, (U32) n->getCount());  				vert.getNormal().set(n->get(n_idx),  								n->get(n_idx+1),  								n->get(n_idx+2));  			} +			else +			{ +				vert.getNormal().clear(); +			} + -			if (t) +			if (t && t->getCount() > 0)  			{  				U32 t_idx = idx[j*stride+t_offset]*2; +				t_idx = llclamp(t_idx, (U32) 0, (U32) t->getCount());  				vert.mTexCoord.setVec(t->get(t_idx),  								t->get(t_idx+1));								  			} +			else +			{ +				vert.mTexCoord.clear(); +			} +  			verts.push_back(vert);  		} diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 088ba95b75..c3005f1722 100755 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -1154,7 +1154,8 @@ void LLGLManager::initExtensions()  	// Misc  	glGetIntegerv(GL_MAX_ELEMENTS_VERTICES, (GLint*) &mGLMaxVertexRange);  	glGetIntegerv(GL_MAX_ELEMENTS_INDICES, (GLint*) &mGLMaxIndexRange); -	 +	glGetIntegerv(GL_MAX_TEXTURE_SIZE, (GLint*) &mGLMaxTextureSize); +  #if (LL_WINDOWS || LL_LINUX || LL_SOLARIS) && !LL_MESA_HEADLESS  	LL_DEBUGS("RenderInit") << "GL Probe: Getting symbols" << LL_ENDL;  	if (mHasVertexBufferObject) diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h index 60597fd090..75e5fe86ec 100755 --- a/indra/llrender/llgl.h +++ b/indra/llrender/llgl.h @@ -155,6 +155,7 @@ public:  	S32 mVRAM; // VRAM in MB  	S32 mGLMaxVertexRange;  	S32 mGLMaxIndexRange; +	S32 mGLMaxTextureSize;  	void getPixelFormat(); // Get the best pixel format diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index 38764eba23..38764eba23 100644..100755 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index 5fb4fc8e52..25109268e8 100755 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -109,8 +109,8 @@ void LLRenderTarget::resize(U32 resx, U32 resy, U32 color_fmt)  bool LLRenderTarget::allocate(U32 resx, U32 resy, U32 color_fmt, bool depth, bool stencil, LLTexUnit::eTextureType usage, bool use_fbo, S32 samples)  { -	resx = llmin(resx, (U32) 4096); -	resy = llmin(resy, (U32) 4096); +	resx = llmin(resx, (U32) gGLManager.mGLMaxTextureSize); +	resy = llmin(resy, (U32) gGLManager.mGLMaxTextureSize);  	stop_glerror();  	release(); diff --git a/indra/llui/llscrolllistcolumn.cpp b/indra/llui/llscrolllistcolumn.cpp index af124d9826..cc9ff7a487 100755 --- a/indra/llui/llscrolllistcolumn.cpp +++ b/indra/llui/llscrolllistcolumn.cpp @@ -236,7 +236,8 @@ void LLScrollColumnHeader::handleReshape(const LLRect& new_rect, bool by_user)  		// tell scroll list to layout columns again  		// do immediate update to get proper feedback to resize handle  		// which needs to know how far the resize actually went -		mColumn->mParentCtrl->updateColumns(); +		const bool force_update = true; +		mColumn->mParentCtrl->updateColumns(force_update);  	}  } diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp index 7f04c92b27..4adfd42edd 100755 --- a/indra/llui/llscrolllistctrl.cpp +++ b/indra/llui/llscrolllistctrl.cpp @@ -615,7 +615,6 @@ S32 LLScrollListCtrl::calcMaxContentWidth()  		if (mColumnWidthsDirty)  		{ -			mColumnWidthsDirty = false;  			// update max content width for this column, by looking at all items  			column->mMaxContentWidth = column->mHeader ? LLFontGL::getFontSansSerifSmall()->getWidth(column->mLabel) + mColumnPadding + HEADING_TEXT_PADDING : 0;  			item_list::iterator iter; @@ -629,6 +628,7 @@ S32 LLScrollListCtrl::calcMaxContentWidth()  		}  		max_item_width += column->mMaxContentWidth;  	} +	mColumnWidthsDirty = false;  	return max_item_width;  } @@ -643,7 +643,7 @@ bool LLScrollListCtrl::updateColumnWidths()  		if (!column) continue;  		// update column width -		S32 new_width = column->getWidth(); +		S32 new_width = 0;  		if (column->mRelWidth >= 0)  		{  			new_width = (S32)llround(column->mRelWidth*mItemListRect.getWidth()); @@ -652,6 +652,10 @@ bool LLScrollListCtrl::updateColumnWidths()  		{  			new_width = (mItemListRect.getWidth() - mTotalStaticColumnWidth - mTotalColumnPadding) / mNumDynamicWidthColumns;  		} +		else +		{ +			new_width = column->getWidth(); +		}  		if (column->getWidth() != new_width)  		{ @@ -693,9 +697,9 @@ void LLScrollListCtrl::updateLineHeightInsert(LLScrollListItem* itemp)  } -void LLScrollListCtrl::updateColumns() +void LLScrollListCtrl::updateColumns(bool force_update)  { -	if (!mColumnsDirty) +	if (!mColumnsDirty && !force_update)  		return;  	mColumnsDirty = false; @@ -749,7 +753,7 @@ void LLScrollListCtrl::updateColumns()  	}  	// propagate column widths to individual cells -	if (columns_changed_width) +	if (columns_changed_width || force_update)  	{  		item_list::iterator iter;  		for (iter = mItemList.begin(); iter != mItemList.end(); iter++) diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h index 8fa06cc499..7bc558f742 100755 --- a/indra/llui/llscrolllistctrl.h +++ b/indra/llui/llscrolllistctrl.h @@ -342,7 +342,7 @@ public:  	static void onClickColumn(void *userdata); -	virtual void updateColumns(); +	virtual void updateColumns(bool force_update = false);  	S32 calcMaxContentWidth();  	bool updateColumnWidths(); diff --git a/indra/lscript/lscript_compile/indra.l b/indra/lscript/lscript_compile/indra.l index 1bb38bbf65..1c9f50202d 100755 --- a/indra/lscript/lscript_compile/indra.l +++ b/indra/lscript/lscript_compile/indra.l @@ -336,6 +336,8 @@ int yyerror(const char *fmt, ...);  "ATTACH_HUD_BOTTOM_LEFT" { count(); yylval.ival = 36; return(INTEGER_CONSTANT); }  "ATTACH_HUD_BOTTOM"		{ count(); yylval.ival = 37; return(INTEGER_CONSTANT); }  "ATTACH_HUD_BOTTOM_RIGHT"	{ count(); yylval.ival = 38; return(INTEGER_CONSTANT); } +"ATTACH_NECK"   { count(); yylval.ival = 39; return(INTEGER_CONSTANT); } +"ATTACH_AVATAR_CENTER"   { count(); yylval.ival = 40; return(INTEGER_CONSTANT); }  "LAND_LEVEL"		{ count(); yylval.ival = E_LANDBRUSH_LEVEL; return(INTEGER_CONSTANT); }  "LAND_RAISE"		{ count(); yylval.ival = E_LANDBRUSH_RAISE; return(INTEGER_CONSTANT); } diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini index f0d8b77afd..a87310955f 100755 --- a/indra/newview/app_settings/keywords.ini +++ b/indra/newview/app_settings/keywords.ini @@ -274,7 +274,8 @@ ATTACH_LLLEG		Passed to llAttachToAvatar to attach task to left lower leg  ATTACH_BELLY		Passed to llAttachToAvatar to attach task to belly  ATTACH_LEFT_PEC		Passed to llAttachToAvatar to attach task to left pectoral  ATTACH_RIGHT_PEC	Passed to llAttachToAvatar to attach task to right pectoral - +ATTACH_NECK			Passed to llAttachToAvatar to attach task to neck +ATTACH_AVATAR_CENTER	Passed to llAttachToAvatar to attach task to avatar center  LAND_LEVEL			Passed to llModifyLand to level terrain  LAND_RAISE			Passed to llModifyLand to raise terrain  LAND_LOWER			Passed to llModifyLand to lower terrain diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index 12ca902c59..3e022f6fa3 100755 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -8446,6 +8446,18 @@      <integer>0</integer>    </map> +  <key>RenderDepthOfFieldInEditMode</key> +  <map> +    <key>Comment</key> +    <string>Whether to use depth of field effect when in edit mode</string> +    <key>Persist</key> +    <integer>1</integer> +    <key>Type</key> +    <string>Boolean</string> +    <key>Value</key> +    <integer>0</integer> +  </map> +    <key>CameraDoFResScale</key>    <map>      <key>Comment</key> diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl index 43ed41a205..ff30560adc 100755 --- a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl +++ b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl @@ -26,22 +26,28 @@  ATTRIBUTE vec4 weight4;   -uniform mat4 matrixPalette[32]; +uniform mat4 matrixPalette[64];  mat4 getObjectSkinnedTransform()  { -	int i;  -	vec4 w = fract(weight4); -	vec4 index = floor(weight4); -	 -	float scale = 1.0/(w.x+w.y+w.z+w.w); -	w *= scale; +	float w0 = fract(weight4.x); +	float w1 = fract(weight4.y); +	float w2 = fract(weight4.z); +	float w3 = fract(weight4.w); +			 +	int i0 = int(floor(weight4.x)); +	int i1 = int(floor(weight4.y)); +	int i2 = int(floor(weight4.z)); +	int i3 = int(floor(weight4.w)); + +	//float scale = 1.0/(w.x+w.y+w.z+w.w); +	//w *= scale; -	mat4 mat = matrixPalette[int(index.x)]*w.x; -	mat += matrixPalette[int(index.y)]*w.y; -	mat += matrixPalette[int(index.z)]*w.z; -	mat += matrixPalette[int(index.w)]*w.w; +	mat4 mat = matrixPalette[i0]*w0; +	mat += matrixPalette[i1]*w1; +	mat += matrixPalette[i2]*w2; +	mat += matrixPalette[i3]*w3;  	return mat;  } diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt index c64e11929d..122577b132 100755 --- a/indra/newview/gpu_table.txt +++ b/indra/newview/gpu_table.txt @@ -38,7 +38,7 @@ ATI 3D-Analyze							.*ATI.*3D-Analyze.*									0	0	0	0  ATI All-in-Wonder 7500					.*ATI.*All-in-Wonder 75.*							0	1	0	0  ATI All-in-Wonder 8500					.*ATI.*All-in-Wonder 85.*							0	1	0	0  ATI All-in-Wonder 9200					.*ATI.*All-in-Wonder 92.*							0	1	0	0 -ATI All-in-Wonder 9xxx					.*ATI.*All-in-Wonder 9.*				1	1	0	0 +ATI All-in-Wonder 9xxx					.*ATI.*All-in-Wonder 9.*							1	1	0	2.1  ATI All-in-Wonder HD					.*ATI.*All-in-Wonder HD.*							1	1	1	3.3  ATI All-in-Wonder X600					.*ATI.*All-in-Wonder X6.*							1	1	0	0  ATI All-in-Wonder X800					.*ATI.*All-in-Wonder X8.*							1	1	1	2.1 @@ -46,162 +46,132 @@ ATI All-in-Wonder X1800					.*ATI.*All-in-Wonder X18.*							3	1	0	0  ATI All-in-Wonder X1900					.*ATI.*All-in-Wonder X19.*							3	1	0	0  ATI All-in-Wonder PCI-E					.*ATI.*All-in-Wonder.*PCI-E.*						1	1	0	0  ATI All-in-Wonder Radeon				.*ATI.*All-in-Wonder Radeon.*						0	1	0	0 -ATI ASUS ARES							.*ATI.*ASUS.*ARES.*						3	1	0	0 -ATI ASUS A9xxx							.*ATI.*ASUS.*A9.*						1	1	0	0 -ATI ASUS AH24xx							.*ATI.*ASUS.*AH24.*						1	1	1	3.3 -ATI ASUS AH26xx							.*ATI.*ASUS.*AH26.*						1	1	1	3.3 -ATI ASUS AH34xx							.*ATI.*ASUS.*AH34.*						1	1	1	3.3 -ATI ASUS AH36xx							.*ATI.*ASUS.*AH36.*						1	1	1	3.3 -ATI ASUS AH46xx							.*ATI.*ASUS.*AH46.*						2	1	1	3.3 -ATI ASUS AX3xx							.*ATI.*ASUS.*AX3.*						1	1	0	0 -ATI ASUS AX5xx							.*ATI.*ASUS.*AX5.*						1	1	0	0 -ATI ASUS AX8xx							.*ATI.*ASUS.*AX8.*						2	1	0	0 -ATI ASUS EAH24xx						.*ATI.*ASUS.*EAH24.*					2	1	0	0 -ATI ASUS EAH26xx						.*ATI.*ASUS.*EAH26.*					3	1	0	0 -ATI ASUS EAH29xx						.*ATI.*ASUS.*EAH29.*					3	1	0	0 -ATI ASUS EAH34xx						.*ATI.*ASUS.*EAH34.*					1	1	0	0 -ATI ASUS EAH36xx						.*ATI.*ASUS.*EAH36.*					2	1	0	0 -ATI ASUS EAH38xx						.*ATI.*ASUS.*EAH38.*					2	1	1	3.3 -ATI ASUS EAH43xx						.*ATI.*ASUS.*EAH43.*					2	1	1	3.3 -ATI ASUS EAH45xx						.*ATI.*ASUS.*EAH45.*					2	1	0	0 -ATI ASUS EAH48xx						.*ATI.*ASUS.*EAH48.*					3	1	1	3.3 -ATI ASUS EAH57xx						.*ATI.*ASUS.*EAH57.*					3	1	1	4.1 -ATI ASUS EAH58xx						.*ATI.*ASUS.*EAH58.*					5	1	1	4.1 -ATI ASUS EAH62xx						.*ATI.*ASUS.*EAH62.*					2	1	0	0 -ATI ASUS EAH63xx						.*ATI.*ASUS.*EAH63.*					2	1	0	0 -ATI ASUS EAH64xx						.*ATI.*ASUS.*EAH64.*					2	1	0	0 -ATI ASUS EAH65xx						.*ATI.*ASUS.*EAH65.*					2	1	0	4.1 -ATI ASUS EAH66xx						.*ATI.*ASUS.*EAH66.*					3	1	0	4.1 -ATI ASUS EAH67xx						.*ATI.*ASUS.*EAH67.*					3	1	0	0 -ATI ASUS EAH68xx						.*ATI.*ASUS.*EAH68.*					5	1	0	4 -ATI ASUS EAH69xx						.*ATI.*ASUS.*EAH69.*					5	1	0	4.1 -ATI ASUS Radeon X1xxx					.*ATI.*ASUS.*X1.*						2	1	1	2.1 -ATI Radeon X7xx							.*ATI.*ASUS.*X7.*						1	1	0	0 -ATI Radeon X19xx						.*ATI.*(Radeon|Diamond) X19.* ?.*		2	1	1	2.1 -ATI Radeon X18xx						.*ATI.*(Radeon|Diamond) X18.* ?.*		3	1	1	2.1 +ATI Radeon X1300						.*ATI.*(ASUS|Radeon).*X13.*							2	1	1	2.1 +ATI Radeon X1500						.*ATI.*(ASUS|Radeon).*X15.*							2	1	1	2.1 +ATI Radeon X1600						.*ATI.*(ASUS|Radeon).*X16.*							2	1	1	2.1 +ATI Radeon X1700						.*ATI.*(ASUS|Radeon).*X17.*							2	1	1	2.1 +ATI Radeon X1800						.*ATI.*(Radeon|Diamond) X18.* ?.*					3	1	1	2.1 +ATI Radeon X1900						.*ATI.*(Radeon|Diamond|ASUS) X19.* ?.*				2	1	1	2.1  ATI Radeon X17xx						.*ATI.*(Radeon|Diamond) X17.* ?.*					1	1	1	2.1 -ATI Radeon X16xx						.*ATI.*(Radeon|Diamond) X16.* ?.*		1	1	1	2.1 -ATI Radeon X15xx						.*ATI.*(Radeon|Diamond) X15.* ?.*		1	1	1	2.1 -ATI Radeon X13xx						.*ATI.*(Radeon|Diamond) X13.* ?.*		1	1	1	2.1 -ATI Radeon X1xxx						.*ATI.*(Radeon|Diamond) X1.. ?.*		0	1	1	2.1 -ATI Radeon X2xxx						.*ATI.*(Radeon|Diamond) X2.. ?.*		1	1	1	2.1 +ATI Radeon X16xx						.*ATI.*(Radeon|Diamond) X17.* ?.*					1	1	1	2.1 +ATI Radeon X28xx						.*ATI.*(Radeon|Diamond) X28.. ?.*					1	1	1	2.1  ATI Display Adapter						.*ATI.*display adapter.*							1	1	1	4.1  ATI FireGL 5200							.*ATI.*FireGL V52.*									1	1	1	2.1  ATI FireGL 5xxx							.*ATI.*FireGL V5.*									2	1	1	3.3  ATI FireGL								.*ATI.*Fire.*GL.*									4	1	1	4.2 -ATI FirePro M3900						.*ATI.*FirePro.*M39.*					2	1	0	0 +ATI FirePro M3900						.*ATI.*FirePro.*M39.*								2	1	0	4.1  ATI FirePro M5800						.*ATI.*FirePro.*M58.*								3	1	0	0  ATI FirePro M7740						.*ATI.*FirePro.*M77.*								3	1	0	0  ATI FirePro M7820						.*ATI.*FirePro.*M78.*								5	1	1	4.2 -ATI FireMV								.*ATI.*FireMV.*							0	1	1	1.3 +ATI FireMV								.*ATI.*FireMV.*										0	1	1	3.2  ATI Generic								.*ATI.*Generic.*									0	0	0	0  ATI Hercules 9800						.*ATI.*Hercules.* 9800.*							1	1	0	0 -ATI IGP 340M							.*ATI.*IGP.*340M.*						0	0	0	0 +ATI IGP 340M							.*ATI.*IGP.* 34[0-9]M.*								0	0	0	1.3  ATI M52									.*ATI.*M52.*										1	1	0	0  ATI M54									.*ATI.*M54.*										1	1	0	0  ATI M56									.*ATI.*M56.*										1	1	0	0  ATI M71									.*ATI.*M71.*										1	1	0	0  ATI M72									.*ATI.*M72.*										1	1	0	0  ATI M76									.*ATI.*M76.*										3	1	0	0 -ATI Radeon HD 64xx						.*ATI.*AMD Radeon.* HD [67]4..[MG]		2	1	1	4.2 -ATI Radeon HD 65xx						.*ATI.*AMD Radeon.* HD [67]5..[MG]		2	1	1	4.2 -ATI Radeon HD 66xx						.*ATI.*AMD Radeon.* HD [67]6..[MG]		3	1	1	4.2 -ATI Radeon HD 7100						.*ATI.*AMD Radeon.* HD 71.*				2	1	0	0 -ATI Radeon HD 7200						.*ATI.*AMD Radeon.* HD 72.*				2	1	0	0 -ATI Radeon HD 7300						.*ATI.*AMD Radeon.* HD 73.*				2	1	0	4.2 -ATI Radeon HD 7400						.*ATI.*AMD Radeon.* HD 74.*				2	1	0	4.2 -ATI Radeon HD 7500						.*ATI.*AMD Radeon.* HD 75.*				3	1	1	4.2 -ATI Radeon HD 7600						.*ATI.*AMD Radeon.* HD 76.*				3	1	0	4.2 -ATI Radeon HD 7700						.*ATI.*AMD Radeon.* HD 77.*				4	1	1	4.2 -ATI Radeon HD 7800						.*ATI.*AMD Radeon.* HD 78.*				5	1	1	4.2 -ATI Radeon HD 7900						.*ATI.*AMD Radeon.* HD 79.*				5	1	1	4.2 -ATI ASUS HD7100							.*ATI.*ASUS.* HD71.*					2	1	0	0 -ATI ASUS HD7200							.*ATI.*ASUS.* HD72.*					2	1	0	0 -ATI ASUS HD7300							.*ATI.*ASUS.* HD73.*					2	1	0	0 -ATI ASUS HD7400							.*ATI.*ASUS.* HD74.*					2	1	0	0 -ATI ASUS HD7500							.*ATI.*ASUS.* HD75.*					3	1	1	4.2 -ATI ASUS HD7600							.*ATI.*ASUS.* HD76.*					3	1	0	0 -ATI ASUS HD7700							.*ATI.*ASUS.* HD77.*					4	1	1	4.2 -ATI ASUS HD7800							.*ATI.*ASUS.* HD78.*					5	1	1	4.2 -ATI ASUS HD7900							.*ATI.*ASUS.* HD79.*					5	1	1	4.2 +ATI Radeon HD 6300M						.*ATI.*AMD Radeon.* (HD|HD )63..M					2	1	1	4.2 +ATI Radeon HD 6400M						.*ATI.*AMD Radeon.* (HD|HD )64..M					2	1	1	4.2 +ATI Radeon HD 6500M						.*ATI.*AMD Radeon.* (HD|HD )65..M					2	1	1	4.2 +ATI Radeon HD 6600M						.*ATI.*AMD Radeon.* (HD 6|6)6..M					3	1	1	4.2 +ATI Radeon HD 6700M						.*ATI.*AMD Radeon.* (HD|HD )67..M					3	1	1	4.2 +ATI Radeon HD 6800M						.*ATI.*AMD Radeon.* (HD|HD )68..M					3	1	1	4.2 +ATI Radeon HD 6300G						.*ATI.*AMD Radeon.* (HD|HD )63..G					2	1	1	4.2 +ATI Radeon HD 6400G						.*ATI.*AMD Radeon.* (HD|HD )64..G					2	1	1	4.2 +ATI Radeon HD 6500G						.*ATI.*AMD Radeon.* (HD|HD )65..G					2	1	1	4.2 +ATI Radeon HD 6600G						.*ATI.*AMD Radeon.* (HD|HD )66..G					3	1	1	4.2 +ATI Radeon HD 7100						.*ATI.*(Radeon|ASUS).* (HD|HD )71.*					2	1	0	0 +ATI Radeon HD 7200						.*ATI.*(Radeon|ASUS).* (HD|HD )72.*					2	1	0	4.2 +ATI Radeon HD 7300						.*ATI.*(Radeon|ASUS).* (HD|HD )73.*					2	1	0	4.2 +ATI Radeon HD 7400						.*ATI.*(Radeon|ASUS).* (HD|HD )74.*					2	1	0	4.2 +ATI Radeon HD 7500						.*ATI.*(Radeon|ASUS).* (HD|HD )75.*					3	1	1	4.2 +ATI Radeon HD 7600						.*ATI.*(Radeon|ASUS).* (HD|HD )76.*					3	1	0	4.2 +ATI Radeon HD 7700						.*ATI.*(Radeon|ASUS).* (HD|HD )77.*					4	1	1	4.2 +ATI Radeon HD 7800						.*ATI.*(Radeon|ASUS).* (HD|HD )78.*					5	1	1	4.2 +ATI Radeon HD 7900						.*ATI.*(Radeon|ASUS).* (HD|HD )79.*					5	1	1	4.2 +ATI Radeon HD 7000 Series				.*ATI.*(Radeon|ASUS).* (HD|HD )7000 Series.*		3	1	1	4.2  ATI Mobility Radeon 4100				.*ATI.*Mobility.* 41..								1	1	1	3.3 +ATI Mobility Radeon 5000				.*ATI.*Mobility.* 50..								1	1	1	4.2  ATI Mobility Radeon 7xxx				.*ATI.*Mobility.*Radeon 7.*							0	1	1	1.3  ATI Mobility Radeon 8xxx				.*ATI.*Mobility.*Radeon 8.*							0	1	0	0  ATI Mobility Radeon 9800				.*ATI.*Mobility.* 98.*								1	1	0	0  ATI Mobility Radeon 9700				.*ATI.*Mobility.* 97.*								0	1	1	2.1  ATI Mobility Radeon 9600				.*ATI.*Mobility.* 96.*								1	1	1	2.1 -ATI Mobility Radeon HD 530v				.*ATI.*Mobility.*HD *530v.*				1	1	1	3.3 -ATI Mobility Radeon HD 540v				.*ATI.*Mobility.*HD *540v.*				1	1	1	3.3 -ATI Mobility Radeon HD 545v				.*ATI.*Mobility.*HD *545v.*				2	1	1	4 -ATI Mobility Radeon HD 550v				.*ATI.*Mobility.*HD *550v.*				3	1	1	4 -ATI Mobility Radeon HD 560v				.*ATI.*Mobility.*HD *560v.*				3	1	1	3.2 -ATI Mobility Radeon HD 565v				.*ATI.*Mobility.*HD *565v.*				3	1	1	3.3 -ATI Mobility Radeon HD 2300				.*ATI.*Mobility.*HD *23.*				0	1	1	2.1 -ATI Mobility Radeon HD 2400				.*ATI.*Mobility.*HD *24.*				1	1	1	3.3 -ATI Mobility Radeon HD 2600				.*ATI.*Mobility.*HD *26.*				1	1	1	3.3 -ATI Mobility Radeon HD 2700				.*ATI.*Mobility.*HD *27.*				3	1	0	0 -ATI Mobility Radeon HD 3100				.*ATI.*Mobility.*HD *31.*				0	1	0	0 -ATI Mobility Radeon HD 3200				.*ATI.*Mobility.*HD *32.*				0	1	0	0 -ATI Mobility Radeon HD 3400				.*ATI.*Mobility.*HD *34.*				1	1	1	3.3 -ATI Mobility Radeon HD 3600				.*ATI.*Mobility.*HD *36.*				1	1	1	4 -ATI Mobility Radeon HD 3800				.*ATI.*Mobility.*HD *38.*				3	1	1	3.3 -ATI Mobility Radeon HD 4200				.*ATI.*Mobility.*HD *42.*				1	1	1	4 -ATI Mobility Radeon HD 4300				.*ATI.*Mobility.*HD *43.*				1	1	1	4 -ATI Mobility Radeon HD 4500				.*ATI.*Mobility.*HD *45.*				1	1	1	4 -ATI Mobility Radeon HD 4600				.*ATI.*Mobility.*HD *46.*				2	1	1	3.3 -ATI Mobility Radeon HD 4800				.*ATI.*Mobility.*HD *48.*				3	1	1	3.3 -ATI Mobility Radeon HD 5100				.*ATI.*Mobility.*HD *51.*				3	1	1	3.2 -ATI Mobility Radeon HD 5300				.*ATI.*Mobility.*HD *53.*				3	1	0	0 -ATI Mobility Radeon HD 5400				.*ATI.*Mobility.*HD *54.*				2	1	1	4.2 -ATI Mobility Radeon HD 5500				.*ATI.*Mobility.*HD *55.*				3	1	0	0 -ATI Mobility Radeon HD 5600				.*ATI.*Mobility.*HD *56.*				3	1	1	4.2 -ATI Mobility Radeon HD 5700				.*ATI.*Mobility.*HD *57.*				3	1	1	4.1 -ATI Mobility Radeon HD 6200				.*ATI.*Mobility.*HD *62.*				3	1	0	0 -ATI Mobility Radeon HD 6300				.*ATI.*Mobility.*HD *63.*				3	1	1	4.2 -ATI Mobility Radeon HD 6400M			.*ATI.*Mobility.*HD *64.*				3	1	0	0 -ATI Mobility Radeon HD 6500M			.*ATI.*Mobility.*HD *65.*				5	1	1	4.2 -ATI Mobility Radeon HD 6600M			.*ATI.*Mobility.*HD *66.*				5	1	0	0 -ATI Mobility Radeon HD 6700M			.*ATI.*Mobility.*HD *67.*				5	1	0	0 -ATI Mobility Radeon HD 6800M			.*ATI.*Mobility.*HD *68.*				5	1	0	0 -ATI Mobility Radeon HD 6900M			.*ATI.*Mobility.*HD *69.*				5	1	0	0 -ATI Radeon HD 2300						.*ATI.*Radeon HD *23..					0	1	1	3.3 -ATI Radeon HD 2400						.*ATI.*Radeon HD *24..					1	1	1	4 -ATI Radeon HD 2600						.*ATI.*Radeon HD *26..					2	1	1	3.3 -ATI Radeon HD 2900						.*ATI.*Radeon HD *29..					3	1	1	3.3 -ATI Radeon HD 3000						.*ATI.*Radeon HD *30..					0	1	0	0 -ATI Radeon HD 3100						.*ATI.*Radeon HD *31..					1	1	0	0 -ATI Radeon HD 3200						.*ATI.*Radeon HD *32..					1	1	1	4 -ATI Radeon HD 3300						.*ATI.*Radeon HD *33..					1	1	1	3.3 -ATI Radeon HD 3400						.*ATI.*Radeon HD *34..					1	1	1	4 -ATI Radeon HD 3500						.*ATI.*Radeon HD *35..					2	1	0	0 -ATI Radeon HD 3600						.*ATI.*Radeon HD *36..					3	1	1	3.3 -ATI Radeon HD 3700						.*ATI.*Radeon HD *37..					3	1	0	0 +ATI Mobility Radeon HD 530v				.*ATI.*Mobility.*HD 530v.*							1	1	1	3.3 +ATI Mobility Radeon HD 540v				.*ATI.*Mobility.*HD 540v.*							1	1	1	3.3 +ATI Mobility Radeon HD 545v				.*ATI.*Mobility.*HD 545v.*							2	1	1	4 +ATI Mobility Radeon HD 550v				.*ATI.*Mobility.*HD 550v.*							3	1	1	4 +ATI Mobility Radeon HD 560v				.*ATI.*Mobility.*HD 560v.*							3	1	1	3.2 +ATI Mobility Radeon HD 565v				.*ATI.*Mobility.*HD 565v.*							3	1	1	3.3 +ATI Mobility Radeon HD 2300				.*ATI.*Mobility.*HD 23.*							0	1	1	2.1 +ATI Mobility Radeon HD 2400				.*ATI.*Mobility.*HD 24.*							1	1	1	3.3 +ATI Mobility Radeon HD 2600				.*ATI.*Mobility.*HD 26.*							1	1	1	3.3 +ATI Mobility Radeon HD 2700				.*ATI.*Mobility.*HD 27.*							3	1	0	0 +ATI Mobility Radeon HD 3100				.*ATI.*Mobility.*HD 31.*							0	1	0	0 +ATI Mobility Radeon HD 3200				.*ATI.*Mobility.*HD 32.*							0	1	0	0 +ATI Mobility Radeon HD 3400				.*ATI.*Mobility.*HD 34.*							1	1	1	4 +ATI Mobility Radeon HD 3600				.*ATI.*Mobility.*HD 36.*							1	1	1	4 +ATI Mobility Radeon HD 3800				.*ATI.*Mobility.*HD 38.*							3	1	1	3.3 +ATI Mobility Radeon HD 4200				.*ATI.*Mobility.*HD 42.*							1	1	1	4 +ATI Mobility Radeon HD 4300				.*ATI.*Mobility.*(HD |HD)43.*						1	1	1	4 +ATI Mobility Radeon HD 4500				.*ATI.*Mobility.*HD 45.*							1	1	1	4 +ATI Mobility Radeon HD 4600				.*ATI.*Mobility.*HD 46.*							2	1	1	3.3 +ATI Mobility Radeon HD 4800				.*ATI.*Mobility.*HD 48.*							3	1	1	3.3 +ATI Mobility Radeon HD 5000 Series		.*ATI.*Mobility.*HD 50.*							3	1	1	3.2 +ATI Mobility Radeon HD 5100				.*ATI.*Mobility.*HD 51.*							3	1	1	3.2 +ATI Mobility Radeon HD 5300				.*ATI.*Mobility.*HD 53.*							3	1	0	0 +ATI Mobility Radeon HD 5400				.*ATI.*Mobility.*HD 54.*							2	1	1	4.2 +ATI Mobility Radeon HD 5500				.*ATI.*Mobility.*HD 55.*							3	1	0	4.2 +ATI Mobility Radeon HD 5600				.*ATI.*Mobility.*HD 56.*							3	1	1	4.2 +ATI Mobility Radeon HD 5700				.*ATI.*Mobility.*HD 57.*							3	1	1	4.1 +ATI Mobility Radeon HD 6200				.*ATI.*Mobility.*HD 62.*							3	1	0	0 +ATI Mobility Radeon HD 6300				.*ATI.*Mobility.*HD 63.*							3	1	1	4.2 +ATI Mobility Radeon HD 6400M			.*ATI.*Mobility.*HD 64.*							3	1	0	0 +ATI Mobility Radeon HD 6500M			.*ATI.*Mobility.*HD 65.*							5	1	1	4.2 +ATI Mobility Radeon HD 6600M			.*ATI.*Mobility.*HD 66.*							5	1	0	0 +ATI Mobility Radeon HD 6700M			.*ATI.*Mobility.*HD 67.*							5	1	0	0 +ATI Mobility Radeon HD 6800M			.*ATI.*Mobility.*HD 68.*							5	1	0	0 +ATI Mobility Radeon HD 6900M			.*ATI.*Mobility.*HD 69.*							5	1	0	0 +ATI Mobility Radeon Graphics			.*ATI Mobility Radeon Graphics.*					1	1	0	4 +ATI Radeon HD 2300						.*ATI.*Radeon.* (HD|HD )23..						0	1	1	3.3 +ATI Radeon HD 2400						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)24..				1	1	1	4 +ATI Radeon HD 2600						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)26..				2	1	1	4 +ATI Radeon HD 2900						.*ATI.*Radeon.* (HD|HD )29..						3	1	1	3.3 +ATI Radeon HD 3000						.*ATI.*Radeon.* (HD|HD )30..						0	1	0	0 +ATI Radeon HD 3100						.*ATI.*Radeon.* (HD|HD )31..						1	1	0	0 +ATI Radeon HD 3200						.*ATI.*Radeon.* (HD|HD )32..						1	1	1	4 +ATI Radeon HD 3300						.*ATI.*Radeon.* (HD|HD )33..						1	1	1	3.3 +ATI Radeon HD 3400						.*ATI.*(Radeon|ASUS).* (HD|HD |AH|EAH)34..			1	1	1	4 +ATI Radeon HD 3500						.*ATI.*Radeon.* (HD|HD )35..						2	1	0	0 +ATI Radeon HD 3600						.*ATI.*(Radeon|ASUS).* (HD|HD |AH|EAH)36..			3	1	1	4 +ATI Radeon HD 3700						.*ATI.*Radeon.* (HD|HD )37..						3	1	0	3.3  ATI HD3700								.*ATI.* HD37..										3	1	0	3.3 -ATI Radeon HD 3800						.*ATI.*Radeon HD *38..					3	1	1	4 -ATI Radeon HD 4100						.*ATI.*Radeon HD *41..					1	1	0	0 -ATI Radeon HD 4200						.*ATI.*Radeon HD *42..					1	1	1	4 -ATI Radeon HD 4300						.*ATI.*Radeon HD *43..					2	1	1	4 -ATI Radeon HD 4400						.*ATI.*Radeon HD *44..					2	1	0	0 -ATI Radeon HD 4500						.*ATI.*Radeon HD *45..					2	1	1	3.3 -ATI Radeon HD 4600						.*ATI.*Radeon HD *46..					3	1	1	4 -ATI Radeon HD 4700						.*ATI.*Radeon HD *47..					3	1	1	3.3 -ATI Radeon HD 4800						.*ATI.*Radeon HD *48..					3	1	1	4 -ATI ASUS EAH5400						.*ATI.*ASUS EAH54..						3	1	1	4.2 -ATI Radeon HD 5400						.*ATI.*Radeon HD *54..					3	1	1	4.2 -ATI Radeon HD 5500						.*ATI.*Radeon HD *55..					3	1	1	4.2 -ATI ASUS EAH5500						.*ATI.*ASUS EAH55..						3	1	1	4.2 -ATI Radeon HD 5600						.*ATI.*Radeon HD *56..					3	1	1	4.2 -ATI Radeon HD 5700						.*ATI.*Radeon HD *57..					3	1	1	4.2 -ATI Radeon HD 5800						.*ATI.*Radeon HD *58..					4	1	1	4.2 -ATI Radeon HD 5900						.*ATI.*Radeon HD *59..					4	1	1	4.2 -ATI Radeon HD 6200						.*ATI.*Radeon HD *62..					0	1	1	4.2 -ATI Radeon HD 6300						.*ATI.*Radeon HD *63..					1	1	1	4.2 -ATI Radeon HD 6400						.*ATI.*Radeon HD *64..					3	1	1	4.2 -ATI Radeon HD 6500						.*ATI.*Radeon HD *65..					3	1	1	4.2 -ATI Radeon HD 6600						.*ATI.*Radeon HD *66..					3	1	1	4.2 -ATI Radeon HD 6700						.*ATI.*Radeon HD *67..					3	1	1	4.2 -ATI Radeon HD 6800						.*ATI.*Radeon HD *68..					4	1	1	4.2 -ATI Radeon HD 6900						.*ATI.*Radeon HD *69..					5	1	1	4.2 +ATI Radeon HD 3800						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)38..				3	1	1	4 +ATI Radeon HD 4100						.*ATI.*Radeon.* (HD|HD )41..						1	1	0	0 +ATI Radeon HD 4200						.*ATI.*Radeon.* (HD|HD )42..						1	1	1	4 +ATI Radeon HD 4300						.*ATI.*(Radeon|ASUS).* (HD4|HD 4|EAH4|4)3..			2	1	1	4 +ATI Radeon HD 4400						.*ATI.*Radeon.* (HD|HD )44..						2	1	0	0 +ATI Radeon HD 4500						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)45..				2	1	1	3.3 +ATI Radeon HD 4600						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)46..				3	1	1	4 +ATI Radeon HD 4700						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)47..				3	1	1	3.3 +ATI Radeon HD 4800						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)48..				3	1	1	4 +ATI Radeon HD 5400						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)54..				3	1	1	4.2 +ATI Radeon HD 5500						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)55..				3	1	1	4.2 +ATI Radeon HD 5600						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)56..				3	1	1	4.2 +ATI Radeon HD 5700						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)57..				3	1	1	4.2 +ATI Radeon HD 5800						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)58..				4	1	1	4.2 +ATI Radeon HD 5900						.*ATI.*Radeon.* (HD|HD )59..						4	1	1	4.2 +ATI Radeon HD 6200						.*ATI.*Radeon.* (HD|HD )62..						0	1	1	4.2 +ATI Radeon HD 6300						.*ATI.*Radeon.* (HD|HD )63..						1	1	1	4.2 +ATI Radeon HD 6400						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)64..				3	1	1	4.2 +ATI Radeon HD 6500						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)65..				3	1	1	4.2 +ATI Radeon HD 6600						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)66..				3	1	1	4.2 +ATI Radeon HD 6700						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)67..				3	1	1	4.2 +ATI Radeon HD 6800						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)68..				4	1	1	4.2 +ATI Radeon HD 6900						.*ATI.*(Radeon|ASUS).* (HD|HD |EAH)69..				5	1	1	4.2  ATI Radeon OpenGL						.*ATI.*Radeon OpenGL.*								0	0	0	0  ATI Radeon 2100							.*ATI.*Radeon 21..									0	1	1	2.1  ATI Radeon 3000							.*ATI.*Radeon 30..									1	1	1	4 @@ -219,17 +189,21 @@ ATI Radeon 9800							.*ATI.*Radeon 98..									1	1	1	2.1  ATI Radeon RV250						.*ATI.*RV250.*										0	1	0	0  ATI Radeon RV600						.*ATI.*RV6.*										1	1	0	0  ATI Radeon RX700						.*ATI.*RX70.*										1	1	0	0 -ATI Radeon RX800						.*ATI.*Radeon *RX80.*					2	1	0	0 +ATI Radeon RX800						.*ATI.*Radeon RX80.*								2	1	0	0  ATI RS880M								.*ATI.*RS880M										1	1	0	0  ATI Radeon RX9550						.*ATI.*RX9550.*										1	1	0	0  ATI Radeon VE							.*ATI.*Radeon.*VE.*									0	0	0	0 -ATI Radeon X300							.*ATI.*Radeon *X3.*						1	1	1	2.1 +ATI Radeon X300							.*ATI.*Radeon X3.*									1	1	1	2.1  ATI Radeon X400							.*ATI.*Radeon ?X4.*									0	1	0	0  ATI Radeon X500							.*ATI.*Radeon ?X5.*									1	1	1	2.1 -ATI Radeon X600							.*ATI.*Radeon ?X6.*						1	1	1	2.1 +ATI Radeon X600							.*ATI.*(Radeon |ASUS Extreme A)X6.*					1	1	1	2.1  ATI Radeon X700							.*ATI.*Radeon ?X7.*									2	1	1	2.1  ATI Radeon X800							.*ATI.*Radeon ?X8.*									1	1	1	2.1  ATI Radeon X900							.*ATI.*Radeon ?X9.*									2	1	0	0 +ATI Radeon X1000						.*ATI.*Radeon ?X10.*								2	1	0	2.1 +ATI Radeon X1200						.*ATI.*Radeon ?X12.*								2	1	0	2.1 +ATI Radeon X1400						.*ATI.*Radeon ?X14.*								2	1	0	2.1 +ATI Radeon X2300						.*ATI.*Radeon ?X23.*								2	1	0	2.1  ATI Radeon Xpress						.*ATI.*Radeon Xpress.*								0	1	1	2.1  ATI Rage 128							.*ATI.*Rage 128.*									0	1	0	0  ATI R300 (9700)							.*R300.*											0	1	1	2.1 @@ -248,41 +222,43 @@ ATI RV530								.*RV530.*											1	1	0	0  ATI RX480 (Xpress 200P)					.*RX480.*											0	1	0	0  ATI RX700								.*RX700.*											1	1	0	0  AMD ANTILLES (HD 6990)					.*(AMD|ATI).*Antilles.*								3	1	0	0 +ATI ROBSON								.*(AMD|ATI).*ROBSON.*								3	1	0	4  AMD BARTS (HD 6800)						.*(AMD|ATI).*Barts.*								3	1	1	2.1 +AMD WRESTLER							.*(AMD|ATI).*WRESTLER.*								3	1	1	4 +AMD SUMO								.*(AMD|ATI).*SUMO.*									3	1	1	4.1  AMD CAICOS (HD 6400)					.*(AMD|ATI).*Caicos.*								3	1	0	0  AMD CAYMAN (HD 6900)					.*(AMD|ATI).*(Cayman|CAYMAM).*						3	1	0	0 -AMD CEDAR (HD 5450)						.*(AMD|ATI).*Cedar.*					2	1	0	0 +AMD CEDAR (HD 5450)						.*(AMD|ATI).*Cedar.*								2	1	0	2.1  AMD CYPRESS (HD 5800)					.*(AMD|ATI).*Cypress.*								3	1	0	0  AMD HEMLOCK (HD 5970)					.*(AMD|ATI).*Hemlock.*								3	1	0	0  AMD JUNIPER (HD 5700)					.*(AMD|ATI).*Juniper.*								3	1	0	0  AMD PARK								.*(AMD|ATI).*Park.*									3	1	0	0 -AMD REDWOOD (HD 5500/5600)				.*(AMD|ATI).*Redwood.*					3	1	0	0 -AMD TURKS (HD 6500/6600)				.*(AMD|ATI).*Turks.*					3	1	0	0 +AMD REDWOOD (HD 5500/5600)				.*(AMD|ATI).*Redwood.*								3	1	0	1.4 +AMD TURKS (HD 6500/6600)				.*(AMD|ATI).*Turks.*								3	1	0	2.1  AMD RS780 (HD 3200)						.*RS780.*											0	1	1	2.1  AMD RS880 (HD 4200)						.*RS880.*											0	1	1	3.2  AMD RV610 (HD 2400)						.*RV610.*											1	1	0	0  AMD RV620 (HD 3400)						.*RV620.*											1	1	0	0  AMD RV630 (HD 2600)						.*RV630.*											2	1	0	0 -AMD RV635 (HD 3600)						.*RV635.*								3	1	0	0 +AMD RV635 (HD 3600)						.*RV635.*											3	1	0	1.4  AMD RV670 (HD 3800)						.*RV670.*											3	1	0	0  AMD R680 (HD 3870 X2)					.*R680.*											3	1	0	0  AMD R700 (HD 4800 X2)					.*R700.*											3	1	0	0  AMD RV710 (HD 4300)						.*RV710.*											0	1	1	1.4 -AMD RV730 (HD 4600)						.*RV730.*								3	1	0	0 +AMD RV730 (HD 4600)						.*RV730.*											3	1	0	1.4  AMD RV740 (HD 4700)						.*RV740.*											3	1	0	0  AMD RV770 (HD 4800)						.*RV770.*											3	1	0	0  AMD RV790 (HD 4800)						.*RV790.*											3	1	0	0  ATI 760G/Radeon 3000					.*ATI.*AMD 760G.*									1	1	1	3.3  ATI 780L/Radeon 3000					.*ATI.*AMD 780L.*									1	1	0	0  ATI Radeon DDR							.*ATI.*Radeon ?DDR.*								0	1	0	0 -ATI FirePro 2000						.*ATI.*FirePro 2.*						2	1	1	4.1 +ATI FirePro 2000						.*ATI.*FirePro 2.*									2	1	1	4.2  ATI FirePro 3000						.*ATI.*FirePro V3.*									2	1	0	0 -ATI FirePro 4000						.*ATI.*FirePro V4.*						2	1	0	0 +ATI FirePro 4000						.*ATI.*FirePro V4.*									2	1	0	4.1  ATI FirePro 5000						.*ATI.*FirePro V5.*									3	1	0	0  ATI FirePro 7000						.*ATI.*FirePro V7.*									3	1	0	0  ATI FirePro M							.*ATI.*FirePro M.*									3	1	1	4.2  ATI R300 (9700)							.*R300.*											0	1	1	2.1 -ATI Radeon								.*ATI.*(Diamond|Radeon).*				0	1	0	4.2  Intel X3100								.*Intel.*X3100.*									1	1	1	2.1  Intel GMA 3600							.*Intel.* 3600.*									0	1	1	3  Intel 830M								.*Intel.*830M										0	0	0	0 @@ -308,8 +284,6 @@ Intel Graphics Media HD					.*Intel.*Graphics Media.*HD.*						1	1	1	2.1  Intel HD Graphics 2000					.*Intel.*HD Graphics 2.*							2	1	0	4  Intel HD Graphics 3000					.*Intel.*HD Graphics 3.*							3	1	1	3.1  Intel HD Graphics 4000					.*Intel.*HD Graphics 4.*							3	1	1	4 -Intel HD2000							.*Intel.*HD2000.*						2	1	0	0 -Intel HD3000							.*Intel.*HD3000.*						3	1	0	0  Intel HD Graphics						.*Intel.*HD Graphics.*								2	1	1	4  Intel Mobile 4 Series					.*Intel.*Mobile.* 4 Series.*						0	1	1	2.1  Intel 4 Series Internal					.*Intel.* 4 Series Internal.*						1	1	1	2.1 @@ -322,113 +296,109 @@ Intel Q45/Q43							.*Intel.*Q4.*										1	1	1	2.1  Intel B45/B43							.*Intel.*B4.*										1	1	1	2.1  Intel 3D-Analyze						.*Intel.*3D-Analyze.*								2	1	0	0  Matrox									.*Matrox.*											0	0	0	0 -Mesa									.*Mesa.*								1	0	1	2.1 +Mesa									.*Mesa.*											1	0	1	3  Gallium									.*Gallium.*											1	1	1	2.1 -NVIDIA G100M							.*NVIDIA .*100M.*						4	1	1	3.3 -NVIDIA G102M							.*NVIDIA .*102M.*						1	1	1	3.3 -NVIDIA G103M							.*NVIDIA .*103M.*						2	1	1	3.3 -NVIDIA G105M							.*NVIDIA .*105M.*						2	1	1	3.3 -NVIDIA G 110M							.*NVIDIA .*110M.*						1	1	1	3.3 -NVIDIA G 120M							.*NVIDIA .*120M.*						1	1	1	3.3 -NVIDIA G 205M							.*NVIDIA .*205M.*						1	1	0	0 -NVIDIA G 410M							.*NVIDIA .*410M.*						3	1	1	4.2 -NVIDIA GT 120M							.*NVIDIA .*GT *12*M.*					3	1	1	3.3 -NVIDIA GT 130M							.*NVIDIA .*GT *13*M.*					3	1	1	3.3 -NVIDIA GT 140M							.*NVIDIA .*GT *14*M.*					3	1	1	3.3 -NVIDIA GT 150M							.*NVIDIA .*GTS *15*M.*					2	1	0	0 -NVIDIA GTS 160M							.*NVIDIA .*GTS *16*M.*					2	1	0	0 -NVIDIA G210M							.*NVIDIA .*G21*M.*						3	1	0	0 -NVIDIA GT 220M							.*NVIDIA .*GT *22*M.*					3	1	1	3.3 -NVIDIA GT 230M							.*NVIDIA .*GT *23*M.*					3	1	1	3.3 -NVIDIA GT 240M							.*NVIDIA .*GT *24*M.*					3	1	1	3.3 -NVIDIA GTS 250M							.*NVIDIA .*GTS *25*M.*					3	1	0	0 -NVIDIA GTS 260M							.*NVIDIA .*GTS *26*M.*					3	1	0	0 -NVIDIA GTX 260M							.*NVIDIA .*GTX *26*M.*					3	1	0	0 -NVIDIA GTX 270M							.*NVIDIA .*GTX *27*M.*					3	1	0	0 -NVIDIA GTX 280M							.*NVIDIA .*GTX *28*M.*					3	1	0	0 -NVIDIA 300M								.*NVIDIA .*30*M.*						3	1	1	4.2 -NVIDIA G 310M							.*NVIDIA .*31*M.*						2	1	0	0 -NVIDIA GT 320M							.*NVIDIA .*GT *32*M.*					3	1	0	0 -NVIDIA GT 325M							.*NVIDIA .*GT *32*M.*					3	1	1	3.3 -NVIDIA GT 330M							.*NVIDIA .*GT *33*M.*					3	1	1	3.3 -NVIDIA GT 340M							.*NVIDIA .*GT *34*M.*					4	1	1	3.3 -NVIDIA GTS 350M							.*NVIDIA .*GTS *35*M.*					4	1	1	3.3 -NVIDIA GTS 360M							.*NVIDIA .*GTS *360M.*					5	1	1	3.3 -NVIDIA 405M								.*NVIDIA .* 40*M.*						2	1	0	4.2 -NVIDIA 410M								.*NVIDIA .* 41*M.*						3	1	0	0 -NVIDIA GT 415M							.*NVIDIA .*GT *41*M.*					3	1	1	4.2 -NVIDIA GT 420M							.*NVIDIA .*GT *42*M.*					3	1	1	4.2 -NVIDIA GT 430M							.*NVIDIA .*GT *43*M.*					3	1	1	4.2 -NVIDIA GT 440M							.*NVIDIA .*GT *44*M.*					3	1	1	4.2 -NVIDIA GT 450M							.*NVIDIA .*GT *45*M.*					3	1	0	0 -NVIDIA GTX 460M							.*NVIDIA .*GTX *46*M.*					4	1	1	4.2 -NVIDIA GTX 470M							.*NVIDIA .*GTX *47*M.*					3	1	0	0 -NVIDIA GTX 480M							.*NVIDIA .*GTX *48*M.*					3	1	1	4.2 -NVIDIA GT 520M							.*NVIDIA .*GT *52*M.*					3	1	1	4.2 -NVIDIA GT 530M							.*NVIDIA .*GT *53*M.*					3	1	1	4.2 -NVIDIA GT 540M							.*NVIDIA .*GT *54*M.*					3	1	1	4.2 -NVIDIA GT 550M							.*NVIDIA .*GT *55*M.*					3	1	1	4.2 -NVIDIA GTX 560M							.*NVIDIA .*GTX *56*M.*					3	1	0	0 -NVIDIA GTX 570M							.*NVIDIA .*GTX *57*M.*					5	1	0	0 -NVIDIA GTX 580M							.*NVIDIA .*GTX *58*M.*					5	1	1	4.2 -NVIDIA 610M								.*NVIDIA.* 61*M.*						3	1	1	4.2 -NVIDIA GT 620M							.*NVIDIA .*GT *62*M.*					3	1	0	0 -NVIDIA GT 630M							.*NVIDIA .*GT *63*M.*					3	1	0	0 -NVIDIA GT 640M							.*NVIDIA .*GT *64*M.*					3	1	0	0 -NVIDIA GT 650M							.*NVIDIA .*GT *65*M.*					3	1	0	0 -NVIDIA GTX 660M							.*NVIDIA .*GTX *66*M.*					5	1	0	0 -NVIDIA GTX 670M							.*NVIDIA .*GTX *67*M.*					5	1	1	4.2 -NVIDIA GTX 680M							.*NVIDIA .*GTX *68*M.*					5	1	0	0 -NVIDIA GTX 690M							.*NVIDIA .*GTX *69*M.*					5	1	0	0 +NVIDIA G100M							.*NVIDIA .* 10[0-9]M.*								4	1	1	3.3 +NVIDIA G 110M							.*NVIDIA .* 11[0-9]M.*								1	1	1	3.3 +NVIDIA G 120M							.*NVIDIA .* 12[0-9]M.*								1	1	1	3.3 +NVIDIA G 200M							.*NVIDIA .* 20[0-9]M.*								1	1	0	0 +NVIDIA G 410M							.*NVIDIA .* 41[0-9]M.*								3	1	1	4.2 +NVIDIA GT 130M							.*NVIDIA .*GT 13[0-9]M.*							3	1	1	3.3 +NVIDIA GT 140M							.*NVIDIA .*GT 14[0-9]M.*							3	1	1	3.3 +NVIDIA GT 150M							.*NVIDIA .*GTS 15[0-9]M.*							2	1	0	0 +NVIDIA GTS 160M							.*NVIDIA .*GTS 16[0-9]M.*							2	1	0	0 +NVIDIA G210M							.*NVIDIA .*G21[0-9]M.*								3	1	0	3.3 +NVIDIA GT 220M							.*NVIDIA .*GT 22[0-9]M.*							3	1	1	3.3 +NVIDIA GT 230M							.*NVIDIA .*GT 23[0-9]M.*							3	1	1	3.3 +NVIDIA GT 240M							.*NVIDIA .*GT 24[0-9]M.*							3	1	1	3.3 +NVIDIA GTS 250M							.*NVIDIA .*GTS 25[0-9]M.*							3	1	0	3.3 +NVIDIA GTS 260M							.*NVIDIA .*GTS 26[0-9]M.*							3	1	0	0 +NVIDIA GTX 260M							.*NVIDIA .*GTX 26[0-9]M.*							3	1	0	3.3 +NVIDIA GTX 270M							.*NVIDIA .*GTX 27[0-9]M.*							3	1	0	0 +NVIDIA GTX 280M							.*NVIDIA .*GTX 28[0-9]M.*							3	1	0	3.3 +NVIDIA 300M								.*NVIDIA .*GT 30[0-9]M.*							3	1	1	4.2 +NVIDIA G 310M							.*NVIDIA .* 31[0-9]M.*								2	1	0	3.3 +NVIDIA GT 320M							.*NVIDIA .* 32[0-9]M.*								3	1	0	3.3 +NVIDIA GT 330M							.*NVIDIA .*GT 33[0-9]M.*							3	1	1	3.3 +NVIDIA GT 340M							.*NVIDIA .*GT 34[0-9]M.*							4	1	1	3.3 +NVIDIA GTS 350M							.*NVIDIA .*GTS 35[0-9]M.*							4	1	1	3.3 +NVIDIA GTS 360M							.*NVIDIA .*GTS 36[0-9]M.*							5	1	1	3.3 +NVIDIA 400M								.*NVIDIA .* 40[0-9]M.*								2	1	0	0 +NVIDIA 410M								.*NVIDIA .* 41[0-9]M.*								3	1	0	0 +NVIDIA GT 420M							.*NVIDIA .*GT 42[0-9]M.*							3	1	1	4.2 +NVIDIA GT 430M							.*NVIDIA .*GT 43[0-9]M.*							3	1	1	4.2 +NVIDIA GT 440M							.*NVIDIA .*GT 44[0-9]M.*							3	1	1	4.2 +NVIDIA GT 450M							.*NVIDIA .*GT 45[0-9]M.*							3	1	0	0 +NVIDIA GTX 460M							.*NVIDIA .*GTX 46[0-9]M.*							4	1	1	4.3 +NVIDIA GTX 470M							.*NVIDIA .*GTX 47[0-9]M.*							3	1	0	4.2 +NVIDIA GTX 480M							.*NVIDIA .*GTX 48[0-9]M.*							3	1	1	4.2 +NVIDIA GT 520M							.*NVIDIA .*GT 52[0-9]M.*							3	1	1	4.2 +NVIDIA GT 530M							.*NVIDIA .*GT 53[0-9]M.*							3	1	1	4.2 +NVIDIA GT 540M							.*NVIDIA .*GT 54[0-9]M.*							3	1	1	4.2 +NVIDIA GT 550M							.*GeForce GT 55[0-9]M.*								3	1	1	4.2 +NVIDIA GTX 560M							.*NVIDIA .*GTX 56[0-9]M.*							3	1	0	4.2 +NVIDIA GTX 570M							.*NVIDIA .*GTX 57[0-9]M.*							5	1	0	4.2 +NVIDIA GTX 580M							.*NVIDIA .*GTX 58[0-9]M.*							5	1	1	4.2 +NVIDIA 610M								.*NVIDIA.* 61[0-9]M.*								3	1	1	4.2 +NVIDIA GT 620M							.*NVIDIA .*GT 62[0-9]M.*							3	1	0	4.2 +NVIDIA GT 630M							.*NVIDIA .*GT 63[0-9]M.*							3	1	0	4.2 +NVIDIA GT 640M							.*NVIDIA .*GT 64[0-9]M.*							3	1	0	4.2 +NVIDIA GT 650M							.*NVIDIA .*GT 65[0-9]M.*							3	1	0	4.2 +NVIDIA GTX 660M							.*NVIDIA .*GTX 66[0-9]M.*							5	1	0	4.3 +NVIDIA GTX 670M							.*NVIDIA .*GTX 67[0-9]M.*							5	1	1	4.2 +NVIDIA GTX 680M							.*NVIDIA .*GTX 68[0-9]M.*							5	1	0	4.2 +NVIDIA GTX 690M							.*NVIDIA .*GTX 69[0-9]M.*							5	1	0	0  NVIDIA G100								.*NVIDIA .*G10.*									3	1	1	4.2 -NVIDIA GT 120							.*NVIDIA .*GT *12.*						2	1	0	3 -NVIDIA GT 130							.*NVIDIA .*GT *13.*						2	1	0	3.3 -NVIDIA GTS 150							.*NVIDIA .*GTS *15.*					2	1	0	0 +NVIDIA GT 120							.*NVIDIA .*GT 12.*									2	1	0	3.3 +NVIDIA GT 130							.*NVIDIA .*GT 13.*									2	1	0	3.3 +NVIDIA GT 140							.*NVIDIA .*GT 14.*									2	1	0	3.3 +NVIDIA GTS 150							.*NVIDIA .*GTS 15.*									2	1	0	0  NVIDIA 200								.*NVIDIA .*GeForce 20.*								2	1	1	3.3  NVIDIA G200								.*NVIDIA .*GeForce G20.*							2	1	1	3.3  NVIDIA G210								.*NVIDIA .*GeForce G210.*							3	1	1	3.3  NVIDIA 210								.*NVIDIA .*GeForce 210.*							3	1	1	3.3 -NVIDIA GT 220							.*NVIDIA .*GT *22.*						2	1	1	3.3 -NVIDIA GT 230							.*NVIDIA .*GT *23.*						2	1	1	3.3 -NVIDIA GT 240							.*NVIDIA .*GT *24.*						4	1	1	3.3 -NVIDIA GTS 240							.*NVIDIA .*GTS *24.*					4	1	1	3.3 -NVIDIA GTS 250							.*NVIDIA .*GTS *25.*					4	1	1	3.3 -NVIDIA GTX 260							.*NVIDIA .*GTX *26.*					4	1	1	3.3 -NVIDIA GTX 270							.*NVIDIA .*GTX *27.*					4	1	0	3.3 -NVIDIA GTX 280							.*NVIDIA .*GTX *28.*					4	1	1	3.3 -NVIDIA GTX 290							.*NVIDIA .*GTX *29.*					5	1	0	3.3 +NVIDIA GT 220							.*NVIDIA .*GT 22.*									2	1	1	3.3 +NVIDIA GT 230							.*NVIDIA .*GT 23.*									2	1	1	3.3 +NVIDIA GT 240							.*NVIDIA .*GT 24.*									4	1	1	3.3 +NVIDIA GTS 240							.*NVIDIA .*GTS 24.*									4	1	1	3.3 +NVIDIA GTS 250							.*NVIDIA .*GTS 25.*									4	1	1	3.3 +NVIDIA GTX 260							.*NVIDIA .*GTX 26.*									4	1	1	3.3 +NVIDIA GTX 270							.*NVIDIA .*GTX 27.*									4	1	0	3.3 +NVIDIA GTX 280							.*NVIDIA .*GTX 28.*									4	1	1	3.3 +NVIDIA GTX 290							.*NVIDIA .*GTX 29.*									5	1	0	3.3  NVIDIA 310								.*NVIDIA .*GeForce 310.*							3	1	1	3.3  NVIDIA 315								.*NVIDIA .*GeForce 315.*							3	1	1	3.3 -NVIDIA GT 320							.*NVIDIA .*GT *32.*						3	1	0	3.3 -NVIDIA GT 330							.*NVIDIA .*GT *33.*						3	1	0	3.3 -NVIDIA GT 340							.*NVIDIA .*GT *34.*						3	1	0	0 +NVIDIA GT 320							.*NVIDIA .*GT 32.*									3	1	0	3.3 +NVIDIA GT 330							.*NVIDIA .*GT 33.*									3	1	0	3.3 +NVIDIA GT 340							.*NVIDIA .*GT 34.*									3	1	0	3.3  NVIDIA 405								.*NVIDIA .* 405.*									3	1	0	3.3 -NVIDIA GT 420							.*NVIDIA .*GT *42.*						3	1	1	4.2 -NVIDIA GT 430							.*NVIDIA .*GT *43.*						3	1	1	4.2 -NVIDIA GT 440							.*NVIDIA .*GT *44.*						4	1	0	4.2 -NVIDIA GTS 450							.*NVIDIA .*GTS *45.*					4	1	1	4.2 -NVIDIA GTX 460							.*NVIDIA .*GTX *46.*					5	1	1	4.3 -NVIDIA GTX 470							.*NVIDIA .*GTX *47.*					5	1	1	4.2 -NVIDIA GTX 480							.*NVIDIA .*GTX *48.*					5	1	1	4.2 -NVIDIA 510								.*NVIDIA .* 510.*						3	1	0	0 -NVIDIA GT 520							.*NVIDIA .*GT *52.*						3	1	1	4.2 -NVIDIA GT 530							.*NVIDIA .*GT *53.*						3	1	1	4.2 -NVIDIA GT 540							.*NVIDIA .*GT *54.*						3	1	1	4.2 -NVIDIA GTX 550							.*NVIDIA .*GTX *55.*					5	1	1	4.3 -NVIDIA GTX 560							.*NVIDIA .*GTX *56.*					5	1	1	4.2 -NVIDIA GTX 570							.*NVIDIA .*GTX *57.*					5	1	1	4.2 -NVIDIA GTX 580							.*NVIDIA .*GTX *58.*					5	1	1	4.3 -NVIDIA GTX 590							.*NVIDIA .*GTX *59.*					5	1	1	4.2 -NVIDIA GT 610							.*NVIDIA .*GT *61.*						3	1	1	4.2 -NVIDIA GT 620							.*NVIDIA .*GT *62.*						3	1	0	4.2 -NVIDIA GT 630							.*NVIDIA .*GT *63.*						3	1	0	4.2 -NVIDIA GT 640							.*NVIDIA .*GT *64.*						3	1	0	4.3 -NVIDIA GT 650							.*NVIDIA .*GT *65.*						3	1	1	4.2 -NVIDIA GTX 650							.*NVIDIA .*GTX *65.*					3	1	1	4.2 -NVIDIA GTX 660							.*NVIDIA .*GTX *66.*					5	1	0	4.3 -NVIDIA GTX 670							.*NVIDIA .*GTX *67.*					5	1	1	4.2 -NVIDIA GTX 680							.*NVIDIA .*GTX *68.*					5	1	1	4.2 -NVIDIA GTX 690							.*NVIDIA .*GTX *69.*					5	1	1	4.2 +NVIDIA GT 420							.*NVIDIA .*GT 42.*									3	1	1	4.2 +NVIDIA GT 430							.*NVIDIA .*GT 43.*									3	1	1	4.3 +NVIDIA GT 440							.*NVIDIA .*GT 44.*									4	1	0	4.3 +NVIDIA GTS 450							.*NVIDIA .*GTS 45.*									4	1	1	4.2 +NVIDIA GTX 460							.*NVIDIA .*GTX 46.*									5	1	1	4.3 +NVIDIA GTX 470							.*NVIDIA .*GTX 47.*									5	1	1	4.2 +NVIDIA GTX 480							.*NVIDIA .*GTX 48.*									5	1	1	4.2 +NVIDIA 510								.*NVIDIA .* 510.*									3	1	0	4.2 +NVIDIA GT 520							.*NVIDIA .*GT 52.*									3	1	1	4.2 +NVIDIA GT 530							.*NVIDIA .*GT 53.*									3	1	1	4.2 +NVIDIA GT 540							.*NVIDIA .*GT 54.*									3	1	1	4.2 +NVIDIA GTX 550							.*NVIDIA .*GTX 55.*									5	1	1	4.3 +NVIDIA GTX 560							.*NVIDIA .*GTX 56.*									5	1	1	4.3 +NVIDIA GTX 570							.*NVIDIA .*GTX 57.*									5	1	1	4.2 +NVIDIA GTX 580							.*NVIDIA .*GTX 58.*									5	1	1	4.3 +NVIDIA GTX 590							.*NVIDIA .*GTX 59.*									5	1	1	4.2 +NVIDIA 605								.*NVIDIA .* 605.*									3	1	1	4.2 +NVIDIA GT 610							.*NVIDIA .*GT 61.*									3	1	1	4.2 +NVIDIA GT 620							.*NVIDIA .*GT 62.*									3	1	0	4.2 +NVIDIA GT 630							.*NVIDIA .*GT 63.*									3	1	0	4.2 +NVIDIA GT 640							.*NVIDIA .*GT 64.*									3	1	0	4.2 +NVIDIA GT 650							.*NVIDIA .*GT 65.*									3	1	1	4.2 +NVIDIA GTX 650							.*NVIDIA .*GTX 65.*									3	1	1	4.2 +NVIDIA GTX 660							.*NVIDIA .*GTX 66.*									5	1	0	4.3 +NVIDIA GTX 670							.*NVIDIA .*GTX 67.*									5	1	1	4.2 +NVIDIA GTX 680							.*NVIDIA .*GTX 68.*									5	1	1	4.2 +NVIDIA GTX 690							.*NVIDIA .*GTX 69.*									5	1	1	4.2  NVIDIA C51								.*NVIDIA .*C51.*									0	1	1	2  NVIDIA G72								.*NVIDIA .*G72.*									1	1	0	0  NVIDIA G73								.*NVIDIA .*G73.*									1	1	0	0 @@ -437,13 +407,7 @@ NVIDIA G86								.*NVIDIA .*G86.*									3	1	0	0  NVIDIA G92								.*NVIDIA .*G92.*									3	1	0	0  NVIDIA GeForce							.*GeForce 256.*										0	0	0	0  NVIDIA GeForce 2						.*GeForce ?2 ?.*									0	1	1	1.5 -NVIDIA GeForce 3						.*GeForce ?3 ?.*						2	1	1	2.1 -NVIDIA GeForce 3 Ti						.*GeForce ?3 Ti.*						0	1	0	0  NVIDIA GeForce 4						.*NVIDIA .*GeForce ?4.*								0	1	1	1.5 -NVIDIA GeForce 4 Go						.*NVIDIA .*GeForce ?4.*Go.*				0	1	0	0 -NVIDIA GeForce 4 MX						.*NVIDIA .*GeForce ?4 MX.*				0	1	0	0 -NVIDIA GeForce 4 PCX					.*NVIDIA .*GeForce ?4 PCX.*				0	1	0	0 -NVIDIA GeForce 4 Ti						.*NVIDIA .*GeForce ?4 Ti.*				0	1	0	0  NVIDIA GeForce 6100						.*NVIDIA .*GeForce 61.*								3	1	1	4.2  NVIDIA GeForce 6200						.*NVIDIA .*GeForce 62.*								0	1	1	2.1  NVIDIA GeForce 6500						.*NVIDIA .*GeForce 65.*								1	1	1	2.1 @@ -458,33 +422,33 @@ NVIDIA GeForce 7500						.*NVIDIA .*GeForce 75.*								2	1	1	2.1  NVIDIA GeForce 7600						.*NVIDIA .*GeForce 76.*								2	1	1	2.1  NVIDIA GeForce 7800						.*NVIDIA .*GeForce 78.*								2	1	1	2.1  NVIDIA GeForce 7900						.*NVIDIA .*GeForce 79.*								3	1	1	2.1 -NVIDIA GeForce 8100						.*NVIDIA .*GeForce 81.*					1	1	0	0 -NVIDIA GeForce 8200M					.*NVIDIA .*GeForce 8200M.*				1	1	0	3.3 -NVIDIA GeForce 8200						.*NVIDIA .*GeForce 82.*					1	1	0	2.1 +NVIDIA GeForce 8100						.*NVIDIA .*GeForce 81.*								1	1	0	3.3 +NVIDIA GeForce 8200M					.*NVIDIA .*GeForce 820[0-9]M.*						1	1	0	3.3 +NVIDIA GeForce 8200						.*NVIDIA .*GeForce 82.*								1	1	0	3.3  NVIDIA GeForce 8300						.*NVIDIA .*GeForce 83.*								3	1	1	3.3 -NVIDIA GeForce 8400M					.*NVIDIA .*GeForce 8400M.*				1	1	1	3.3 +NVIDIA GeForce 8400M					.*NVIDIA .*GeForce 840[0-9]M.*						1	1	1	3.3  NVIDIA GeForce 8400						.*NVIDIA .*GeForce 84.*								2	1	1	3.3  NVIDIA GeForce 8500						.*NVIDIA .*GeForce 85.*								2	1	1	3.3 -NVIDIA GeForce 8600M					.*NVIDIA .*GeForce 8600M.*				2	1	1	3.3 +NVIDIA GeForce 8600M					.*NVIDIA .*GeForce 860[0-9]M.*						2	1	1	3.3  NVIDIA GeForce 8600						.*NVIDIA .*GeForce 86.*								3	1	1	3.3 -NVIDIA GeForce 8700M					.*NVIDIA .*GeForce 8700M.*				2	1	1	3.3 +NVIDIA GeForce 8700M					.*NVIDIA .*GeForce 870[0-9]M.*						2	1	1	3.3  NVIDIA GeForce 8700						.*NVIDIA .*GeForce 87.*								3	1	0	0 -NVIDIA GeForce 8800M					.*NVIDIA .*GeForce 8800M.*				2	1	1	3.3 +NVIDIA GeForce 8800M					.*NVIDIA .*GeForce 880[0-9]M.*						2	1	1	3.3  NVIDIA GeForce 8800						.*NVIDIA .*GeForce 88.*								3	1	1	3.3 -NVIDIA GeForce 9100M					.*NVIDIA .*GeForce 9100M.*				0	1	0	0 +NVIDIA GeForce 9100M					.*NVIDIA .*GeForce 910[0-9]M.*						0	1	0	3.3  NVIDIA GeForce 9100						.*NVIDIA .*GeForce 91.*								0	1	0	3.3 -NVIDIA GeForce 9200M					.*NVIDIA .*GeForce 9200M.*				1	1	0	3.1 +NVIDIA GeForce 9200M					.*NVIDIA .*GeForce 920[0-9]M.*						1	1	0	3.3  NVIDIA GeForce 9200						.*NVIDIA .*GeForce 92.*								1	1	0	3.3 -NVIDIA GeForce 9300M					.*NVIDIA .*GeForce 9300M.*				1	1	1	3.3 +NVIDIA GeForce 9300M					.*NVIDIA .*GeForce 930[0-9]M.*						1	1	1	3.3  NVIDIA GeForce 9300						.*NVIDIA .*GeForce 93.*								1	1	1	3.3 -NVIDIA GeForce 9400M					.*NVIDIA .*GeForce 9400M.*				2	1	1	3.3 +NVIDIA GeForce 9400M					.*NVIDIA .*GeForce 940[0-9]M.*						2	1	1	3.3  NVIDIA GeForce 9400						.*NVIDIA .*GeForce 94.*								3	1	1	3.3 -NVIDIA GeForce 9500M					.*NVIDIA .*GeForce 9500M.*				1	1	1	3.3 +NVIDIA GeForce 9500M					.*NVIDIA .*GeForce 950[0-9]M.*						1	1	1	3.3  NVIDIA GeForce 9500						.*NVIDIA .*GeForce 95.*								3	1	1	3.3 -NVIDIA GeForce 9600M					.*NVIDIA .*GeForce 9600M.*				2	1	1	3.3 +NVIDIA GeForce 9600M					.*NVIDIA .*GeForce 960[0-9]M.*						2	1	1	3.3  NVIDIA GeForce 9600						.*NVIDIA .*GeForce 96.*								3	1	1	3.3 -NVIDIA GeForce 9700M					.*NVIDIA .*GeForce 9700M.*				0	1	1	3.3 -NVIDIA GeForce 9800M					.*NVIDIA .*GeForce 9800M.*				2	1	1	3.3 +NVIDIA GeForce 9700M					.*NVIDIA .*GeForce 970[0-9]M.*						0	1	1	3.3 +NVIDIA GeForce 9800M					.*NVIDIA .*GeForce 980[0-9]M.*						2	1	1	3.3  NVIDIA GeForce 9800						.*NVIDIA .*GeForce 98.*								3	1	1	3.3  NVIDIA GeForce FX 5100					.*NVIDIA .*GeForce FX 51.*							0	1	0	0  NVIDIA GeForce FX 5200					.*NVIDIA .*GeForce FX 52.*							0	1	0	2.1 @@ -495,7 +459,7 @@ NVIDIA GeForce FX 5700					.*NVIDIA .*GeForce FX 57.*							0	1	1	2.1  NVIDIA GeForce FX 5800					.*NVIDIA .*GeForce FX 58.*							1	1	0	0  NVIDIA GeForce FX 5900					.*NVIDIA .*GeForce FX 59.*							1	1	1	2.1  NVIDIA GeForce FX Go5100				.*NVIDIA .*GeForce FX Go51.*						0	1	0	0 -NVIDIA GeForce FX Go5200				.*NVIDIA .*GeForce FX Go52.*			0	1	0	0 +NVIDIA GeForce FX Go5200				.*NVIDIA .*GeForce FX Go52.*						0	1	0	1.5  NVIDIA GeForce FX Go5300				.*NVIDIA .*GeForce FX Go53.*						0	1	0	0  NVIDIA GeForce FX Go5500				.*NVIDIA .*GeForce FX Go55.*						0	1	0	0  NVIDIA GeForce FX Go5600				.*NVIDIA .*GeForce FX Go56.*						0	1	1	2.1 @@ -504,13 +468,13 @@ NVIDIA GeForce FX Go5800				.*NVIDIA .*GeForce FX Go58.*						1	1	0	0  NVIDIA GeForce FX Go5900				.*NVIDIA .*GeForce FX Go59.*						1	1	0	0  NVIDIA GeForce FX Go5xxx				.*NVIDIA .*GeForce FX Go.*							0	1	0	0  NVIDIA GeForce Go 6100					.*NVIDIA .*GeForce Go 61.*							0	1	1	2.1 -NVIDIA GeForce Go 6200					.*NVIDIA .*GeForce Go 62.*				0	1	0	0 -NVIDIA GeForce Go 6400					.*NVIDIA .*GeForce Go 64.*				1	1	1	2 +NVIDIA GeForce Go 6200					.*NVIDIA .*GeForce Go 62.*							0	1	0	1.5 +NVIDIA GeForce Go 6400					.*NVIDIA .*GeForce Go 64.*							1	1	1	2.1  NVIDIA GeForce Go 6500					.*NVIDIA .*GeForce Go 65.*							1	1	0	0  NVIDIA GeForce Go 6600					.*NVIDIA .*GeForce Go 66.*							0	1	1	2.1  NVIDIA GeForce Go 6700					.*NVIDIA .*GeForce Go 67.*							1	1	0	0  NVIDIA GeForce Go 6800					.*NVIDIA .*GeForce Go 68.*							0	1	1	2.1 -NVIDIA GeForce Go 7200					.*NVIDIA .*GeForce Go 72.*				1	1	0	0 +NVIDIA GeForce Go 7200					.*NVIDIA .*GeForce Go 72.*							1	1	0	2.1  NVIDIA GeForce Go 7300 LE				.*NVIDIA .*GeForce Go 73.*LE.*						1	1	0	0  NVIDIA GeForce Go 7300					.*NVIDIA .*GeForce Go 73.*							1	1	1	2.1  NVIDIA GeForce Go 7400					.*NVIDIA .*GeForce Go 74.*							1	1	1	2.1 @@ -528,9 +492,9 @@ NVIDIA NB8P								.*NVIDIA .*NB8P.*									2	1	0	0  NVIDIA NB9E								.*NVIDIA .*NB9E.*									3	1	0	0  NVIDIA NB9M								.*NVIDIA .*NB9M.*									1	1	0	0  NVIDIA NB9P								.*NVIDIA .*NB9P.*									2	1	0	0 -NVIDIA N10								.*NVIDIA .*N10.*						1	1	0	0 -NVIDIA GeForce PCX						.*GeForce PCX.*							0	1	0	0 -NVIDIA Generic							.*NVIDIA .*Unknown.*					0	0	0	3 +NVIDIA N10								.*NVIDIA .*N10.*									1	1	0	2.1 +NVIDIA GeForce PCX						.*GeForce PCX.*										0	1	0	1.5 +NVIDIA Generic							.*NVIDIA .*Unknown.*								0	0	0	2.1  NVIDIA NV17								.*NVIDIA .*NV17.*									0	1	0	0  NVIDIA NV34								.*NVIDIA .*NV34.*									0	1	0	0  NVIDIA NV35								.*NVIDIA .*NV35.*									0	1	0	0 @@ -540,7 +504,7 @@ NVIDIA NV43								.*NVIDIA .*NV43.*									1	1	0	0  NVIDIA NV44								.*NVIDIA .*NV44.*									1	1	0	0  NVIDIA nForce							.*NVIDIA .*nForce.*									0	0	0	3.3  NVIDIA MCP51							.*NVIDIA .*MCP51.*									1	1	0	0 -NVIDIA MCP61							.*NVIDIA .*MCP61.*						1	1	0	0 +NVIDIA MCP61							.*NVIDIA .*MCP61.*									1	1	0	2.1  NVIDIA MCP67							.*NVIDIA .*MCP67.*									1	1	0	0  NVIDIA MCP68							.*NVIDIA .*MCP68.*									1	1	0	0  NVIDIA MCP73							.*NVIDIA .*MCP73.*									1	1	0	0 @@ -548,44 +512,44 @@ NVIDIA MCP77							.*NVIDIA .*MCP77.*									1	1	0	0  NVIDIA MCP78							.*NVIDIA .*MCP78.*									1	1	0	0  NVIDIA MCP79							.*NVIDIA .*MCP79.*									1	1	0	0  NVIDIA MCP7A							.*NVIDIA .*MCP7A.*									1	1	0	0 -NVIDIA Quadro2							.*Quadro2.*								0	1	0	0 -NVIDIA Quadro 1000M						.*Quadro.*1000M.*						2	1	0	4.2 -NVIDIA Quadro 2000 M/D					.*Quadro.*2000.*						3	1	0	4.2 -NVIDIA Quadro 3000M						.*Quadro.*3000M.*						3	1	0	0 -NVIDIA Quadro 4000M						.*Quadro.*4000M.*						3	1	0	0 -NVIDIA Quadro 4000						.*Quadro *4000.*						3	1	0	4.2 -NVIDIA Quadro 50x0 M					.*Quadro.*50.0.*						3	1	0	0 +NVIDIA Quadro2							.*Quadro2.*											0	1	0	1.5 +NVIDIA Quadro 1000M						.*Quadro.* (K1|1)00[0-9]M.*							2	1	0	4.2 +NVIDIA Quadro 2000 M/D					.*Quadro.* (K2|2)000.*								3	1	0	4.2 +NVIDIA Quadro 3000M						.*Quadro.* (K3|3)00[0-9]M.*							3	1	0	4.2 +NVIDIA Quadro 4000M						.*Quadro.* (K4|4)00[0-9]M.*							3	1	0	4.2 +NVIDIA Quadro 4000						.*Quadro 4000.*										3	1	0	4.2 +NVIDIA Quadro 50x0 M					.*Quadro.* 50.0.*									3	1	0	4.2  NVIDIA Quadro 6000						.*Quadro.* 6000.*									3	1	0	0  NVIDIA Quadro 400						.*Quadro.* 400.*									2	1	0	3.3 -NVIDIA Quadro 600						.*Quadro.*600.*							2	1	0	3.3 -NVIDIA Quadro4							.*Quadro4.*								0	1	0	0 +NVIDIA Quadro 600						.*Quadro.* 600.*									2	1	0	4.2 +NVIDIA Quadro4							.*Quadro4.*											0	1	0	1.5  NVIDIA Quadro DCC						.*Quadro DCC.*										0	1	0	0  NVIDIA Quadro CX						.*Quadro.*CX.*										3	1	0	0 -NVIDIA Quadro FX 770M					.*Quadro.*FX *770M.*					2	1	0	0 -NVIDIA Quadro FX 1500M					.*Quadro.*FX *1500M.*					1	1	0	2.1 -NVIDIA Quadro FX 1600M					.*Quadro.*FX *1600M.*					2	1	0	0 -NVIDIA Quadro FX 2500M					.*Quadro.*FX *2500M.*					2	1	0	0 -NVIDIA Quadro FX 2700M					.*Quadro.*FX *2700M.*					3	1	0	0 -NVIDIA Quadro FX 2800M					.*Quadro.*FX *2800M.*					3	1	0	3.3 -NVIDIA Quadro FX 3500					.*Quadro.*FX *3500.*					2	1	0	2.1 -NVIDIA Quadro FX 3600					.*Quadro.*FX *3600.*					3	1	0	0 -NVIDIA Quadro FX 3700					.*Quadro.*FX *3700.*					3	1	0	3.3 -NVIDIA Quadro FX 3800					.*Quadro.*FX *3800.*					3	1	0	3.2 -NVIDIA Quadro FX 4500					.*Quadro.*FX *45.*						3	1	0	0 -NVIDIA Quadro FX 880M					.*Quadro.*FX *880M.*					3	1	0	3.3 -NVIDIA Quadro FX 4800					.*NVIDIA .*Quadro *FX *4800.*			3	1	0	0 +NVIDIA Quadro FX 770M					.*Quadro.*FX 77[0-9]M.*								2	1	0	3.3 +NVIDIA Quadro FX 1500M					.*Quadro.*FX 150[0-9]M.*							1	1	0	2.1 +NVIDIA Quadro FX 1600M					.*Quadro.*FX 160[0-9]M.*							2	1	0	3.3 +NVIDIA Quadro FX 2500M					.*Quadro.*FX 250[0-9]M.*							2	1	0	2.1 +NVIDIA Quadro FX 2700M					.*Quadro.*FX 270[0-9]M.*							3	1	0	3.3 +NVIDIA Quadro FX 2800M					.*Quadro.*FX 280[0-9]M.*							3	1	0	3.3 +NVIDIA Quadro FX 3500					.*Quadro.*FX 3500.*									2	1	0	2.1 +NVIDIA Quadro FX 3600					.*Quadro.*FX 3600.*									3	1	0	3.3 +NVIDIA Quadro FX 3700					.*Quadro.*FX 3700.*									3	1	0	3.3 +NVIDIA Quadro FX 3800					.*Quadro.*FX 3800.*									3	1	0	3.3 +NVIDIA Quadro FX 4500					.*Quadro.*FX 45.*									3	1	0	2.1 +NVIDIA Quadro FX 880M					.*Quadro.*FX 88[0-9]M.*								3	1	0	3.3 +NVIDIA Quadro FX 4800					.*NVIDIA .*Quadro FX 4800.*							3	1	0	3.1  NVIDIA Quadro FX						.*Quadro FX.*										1	1	0	3.3 -NVIDIA Quadro NVS 1xxM					.*Quadro NVS *1.[05]M.*					0	1	1	3.3 -NVIDIA Quadro NVS 300M					.*NVIDIA .*NVS *300M.*					2	1	0	0 -NVIDIA Quadro NVS 320M					.*NVIDIA .*NVS *320M.*					2	1	0	0 -NVIDIA Quadro NVS 2100M					.*NVIDIA .*NVS *2100M.*					2	1	0	0 -NVIDIA Quadro NVS 3100M					.*NVIDIA .*NVS *3100M.*					2	1	0	0 -NVIDIA Quadro NVS 4200M					.*NVIDIA .*NVS *4200M.*					2	1	0	4.1 -NVIDIA Quadro NVS 5100M					.*NVIDIA .*NVS *5100M.*					2	1	0	0 -NVIDIA Quadro NVS						.*NVIDIA .*NVS							0	1	0	3.2 +NVIDIA Quadro NVS 1xxM					.*Quadro NVS 1.[05]M.*								0	1	1	3.3 +NVIDIA Quadro NVS 300M					.*NVIDIA .*NVS 30[0-9]M.*							2	1	0	0 +NVIDIA Quadro NVS 320M					.*NVIDIA .*NVS 32[0-9]M.*							2	1	0	0 +NVIDIA Quadro NVS 2100M					.*NVIDIA .*NVS 210[0-9]M.*							2	1	0	3.3 +NVIDIA Quadro NVS 3100M					.*NVIDIA .*NVS 310[0-9]M.*							2	1	0	3.3 +NVIDIA Quadro NVS 4200M					.*NVIDIA .*NVS 420[0-9]M.*							2	1	0	4.2 +NVIDIA Quadro NVS 5100M					.*NVIDIA .*NVS 510[0-9]M.*							2	1	0	0 +NVIDIA Quadro NVS						.*NVIDIA .*NVS										0	1	0	4.2  NVIDIA Corporation N12P					.*NVIDIA .*N12P.*									1	1	1	4.1 -NVIDIA Corporation N11M					.*NVIDIA .*N11M.*						2	1	0	0 -NVIDIA RIVA TNT							.*RIVA TNT.*							0	0	0	0 +NVIDIA Corporation N11M					.*NVIDIA .*N11M.*									2	1	0	3.1 +NVIDIA RIVA TNT							.*RIVA TNT.*										0	0	0	1.5  S3										.*S3 Graphics.*										0	0	1	1.4  SiS										SiS.*												0	0	1	1.5  Trident									Trident.*											0	0	0	0 diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index f92274dbbd..ffb168b43b 100755 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -4599,11 +4599,6 @@ void LLAppViewer::idle()  				llinfos << "Dead object updates: " << gObjectList.mNumDeadObjectUpdates << llendl;  				gObjectList.mNumDeadObjectUpdates = 0;  			} -			if (gObjectList.mNumUnknownKills) -			{ -				llinfos << "Kills on unknown objects: " << gObjectList.mNumUnknownKills << llendl; -				gObjectList.mNumUnknownKills = 0; -			}  			if (gObjectList.mNumUnknownUpdates)  			{  				llinfos << "Unknown object updates: " << gObjectList.mNumUnknownUpdates << llendl; diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp index 075299386e..a0024a231c 100755 --- a/indra/newview/lldrawpoolavatar.cpp +++ b/indra/newview/lldrawpoolavatar.cpp @@ -135,6 +135,16 @@ void LLDrawPoolAvatar::prerender()  	{  		sBufferUsage = GL_STREAM_DRAW_ARB;  	} + +	if (!mDrawFace.empty()) +	{ +		const LLFace *facep = mDrawFace[0]; +		if (facep && facep->getDrawable()) +		{ +			LLVOAvatar* avatarp = (LLVOAvatar *)facep->getDrawable()->getVObj().get(); +			updateRiggedVertexBuffers(avatarp); +		} +	}  }  LLMatrix4& LLDrawPoolAvatar::getModelView() @@ -1434,6 +1444,65 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)  	}  } +void LLDrawPoolAvatar::getRiggedGeometry(LLFace* face, LLPointer<LLVertexBuffer>& buffer, U32 data_mask, const LLMeshSkinInfo* skin, LLVolume* volume, const LLVolumeFace& vol_face) +{ +	face->setGeomIndex(0); +	face->setIndicesIndex(0); +		 +	//rigged faces do not batch textures +	face->setTextureIndex(255); + +	if (buffer.isNull() || buffer->getTypeMask() != data_mask || !buffer->isWriteable()) +	{ //make a new buffer +		if (sShaderLevel > 0) +		{ +			buffer = new LLVertexBuffer(data_mask, GL_DYNAMIC_DRAW_ARB); +		} +		else +		{ +			buffer = new LLVertexBuffer(data_mask, GL_STREAM_DRAW_ARB); +		} +		buffer->allocateBuffer(vol_face.mNumVertices, vol_face.mNumIndices, true); +	} +	else +	{ //resize existing buffer +		buffer->resizeBuffer(vol_face.mNumVertices, vol_face.mNumIndices); +	} + +	face->setSize(vol_face.mNumVertices, vol_face.mNumIndices); +	face->setVertexBuffer(buffer); + +	U16 offset = 0; +		 +	LLMatrix4 mat_vert = skin->mBindShapeMatrix; +	glh::matrix4f m((F32*) mat_vert.mMatrix); +	m = m.inverse().transpose(); +		 +	F32 mat3[] =  +	{ m.m[0], m.m[1], m.m[2], +		m.m[4], m.m[5], m.m[6], +		m.m[8], m.m[9], m.m[10] }; + +	LLMatrix3 mat_normal(mat3);				 + +	//let getGeometryVolume know if alpha should override shiny +	U32 type = gPipeline.getPoolTypeFromTE(face->getTextureEntry(), face->getTexture()); + +	if (type == LLDrawPool::POOL_ALPHA) +	{ +		face->setPoolType(LLDrawPool::POOL_ALPHA); +	} +	else +	{ +		face->setPoolType(LLDrawPool::POOL_AVATAR); +	} + +	//llinfos << "Rebuilt face " << face->getTEOffset() << " of " << face->getDrawable() << " at " << gFrameTimeSeconds << llendl; +	face->getGeometryVolume(*volume, face->getTEOffset(), mat_vert, mat_normal, offset, true); + +	buffer->flush(); +} +  void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace* face, const LLMeshSkinInfo* skin, LLVolume* volume, const LLVolumeFace& vol_face)  {  	LLVector4a* weight = vol_face.mWeights; @@ -1453,60 +1522,27 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace*  		buffer->getNumIndices() != vol_face.mNumIndices ||  		(drawable && drawable->isState(LLDrawable::REBUILD_ALL)))  	{ -		face->setGeomIndex(0); -		face->setIndicesIndex(0); -		 -		//rigged faces do not batch textures -		face->setTextureIndex(255); - -		if (buffer.isNull() || buffer->getTypeMask() != data_mask || !buffer->isWriteable()) -		{ //make a new buffer -			if (sShaderLevel > 0) +		if (drawable && drawable->isState(LLDrawable::REBUILD_ALL)) +		{ //rebuild EVERY face in the drawable, not just this one, to avoid missing drawable wide rebuild issues +			for (S32 i = 0; i < drawable->getNumFaces(); ++i)  			{ -				buffer = new LLVertexBuffer(data_mask, GL_DYNAMIC_DRAW_ARB); -			} -			else -			{ -				buffer = new LLVertexBuffer(data_mask, GL_STREAM_DRAW_ARB); +				LLFace* facep = drawable->getFace(i); +				U32 face_data_mask = facep->getRiggedVertexBufferDataMask(); +				if (face_data_mask) +				{ +					LLPointer<LLVertexBuffer> cur_buffer = facep->getVertexBuffer(); +					const LLVolumeFace& cur_vol_face = volume->getVolumeFace(i); +					getRiggedGeometry(facep, cur_buffer, face_data_mask, skin, volume, cur_vol_face); +				}  			} -			buffer->allocateBuffer(vol_face.mNumVertices, vol_face.mNumIndices, true); -		} -		else -		{ //resize existing buffer -			buffer->resizeBuffer(vol_face.mNumVertices, vol_face.mNumIndices); -		} - -		face->setSize(vol_face.mNumVertices, vol_face.mNumIndices); -		face->setVertexBuffer(buffer); - -		U16 offset = 0; -		 -		LLMatrix4 mat_vert = skin->mBindShapeMatrix; -		glh::matrix4f m((F32*) mat_vert.mMatrix); -		m = m.inverse().transpose(); -		 -		F32 mat3[] =  -		{ m.m[0], m.m[1], m.m[2], -		  m.m[4], m.m[5], m.m[6], -		  m.m[8], m.m[9], m.m[10] }; - -		LLMatrix3 mat_normal(mat3);				 - -		//let getGeometryVolume know if alpha should override shiny -		U32 type = gPipeline.getPoolTypeFromTE(face->getTextureEntry(), face->getTexture()); +			drawable->clearState(LLDrawable::REBUILD_ALL); -		if (type == LLDrawPool::POOL_ALPHA) -		{ -			face->setPoolType(LLDrawPool::POOL_ALPHA); +			buffer = face->getVertexBuffer();  		}  		else -		{ -			face->setPoolType(LLDrawPool::POOL_AVATAR); +		{ //just rebuild this face +			getRiggedGeometry(face, buffer, data_mask, skin, volume, vol_face);  		} - -		face->getGeometryVolume(*volume, face->getTEOffset(), mat_vert, mat_normal, offset, true); - -		buffer->flush();  	}  	if (sShaderLevel <= 0 && face->mLastSkinTime < avatar->getLastSkinTime()) @@ -1591,11 +1627,6 @@ void LLDrawPoolAvatar::updateRiggedFaceVertexBuffer(LLVOAvatar* avatar, LLFace*  			}  		}  	} - -	if (drawable && (face->getTEOffset() == drawable->getNumFaces()-1)) -	{ -		drawable->clearState(LLDrawable::REBUILD_ALL); -	}  }  void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow) @@ -1771,7 +1802,6 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)  void LLDrawPoolAvatar::renderDeferredRiggedSimple(LLVOAvatar* avatar)  { -	updateRiggedVertexBuffers(avatar);  	renderRigged(avatar, RIGGED_DEFERRED_SIMPLE);  } @@ -1840,7 +1870,6 @@ void LLDrawPoolAvatar::updateRiggedVertexBuffers(LLVOAvatar* avatar)  void LLDrawPoolAvatar::renderRiggedSimple(LLVOAvatar* avatar)  { -	updateRiggedVertexBuffers(avatar);  	renderRigged(avatar, RIGGED_SIMPLE);  } diff --git a/indra/newview/lldrawpoolavatar.h b/indra/newview/lldrawpoolavatar.h index 7d0368a945..4fbda1f862 100755 --- a/indra/newview/lldrawpoolavatar.h +++ b/indra/newview/lldrawpoolavatar.h @@ -133,6 +133,7 @@ public:  	void endDeferredRiggedSimple();  	void endDeferredRiggedBump(); +	void getRiggedGeometry(LLFace* face, LLPointer<LLVertexBuffer>& buffer, U32 data_mask, const LLMeshSkinInfo* skin, LLVolume* volume, const LLVolumeFace& vol_face);  	void updateRiggedFaceVertexBuffer(LLVOAvatar* avatar,  									  LLFace* facep,   									  const LLMeshSkinInfo* skin,  diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp index 8290494c22..d4355007c1 100755 --- a/indra/newview/llfloaterland.cpp +++ b/indra/newview/llfloaterland.cpp @@ -2118,7 +2118,7 @@ void LLPanelLandOptions::refreshSearch()  	bool can_change =  			LLViewerParcelMgr::isParcelModifiableByAgent( -				parcel, GP_LAND_CHANGE_IDENTITY) +				parcel, GP_LAND_FIND_PLACES)  			&& region  			&& !(region->getRegionFlag(REGION_FLAGS_BLOCK_PARCEL_SEARCH)); diff --git a/indra/newview/llmenuoptionpathfindingrebakenavmesh.cpp b/indra/newview/llmenuoptionpathfindingrebakenavmesh.cpp index 2b92b0b3d1..a567d1217a 100755 --- a/indra/newview/llmenuoptionpathfindingrebakenavmesh.cpp +++ b/indra/newview/llmenuoptionpathfindingrebakenavmesh.cpp @@ -92,7 +92,7 @@ void LLMenuOptionPathfindingRebakeNavmesh::initialize()  void LLMenuOptionPathfindingRebakeNavmesh::quit()  { -	if (mIsInitialized) +	if (mIsInitialized)		// Quitting from the login screen leaves this uninitialized  	{  		if (mNavMeshSlot.connected())  		{ diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h index 8602271f84..8eaf691d6f 100755 --- a/indra/newview/llmeshrepository.h +++ b/indra/newview/llmeshrepository.h @@ -413,7 +413,7 @@ public:  	void startRequest() { ++mPendingUploads; }  	void stopRequest() { --mPendingUploads; } -		 +  	bool finished() { return mFinished; }  	virtual void run();  	void preStart(); diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp index 7f396b7b7e..7ddd04fed0 100755 --- a/indra/newview/llnamelistctrl.cpp +++ b/indra/newview/llnamelistctrl.cpp @@ -416,9 +416,9 @@ void LLNameListCtrl::onAvatarNameCache(const LLUUID& agent_id,  } -void LLNameListCtrl::updateColumns() +void LLNameListCtrl::updateColumns(bool force_update)  { -	LLScrollListCtrl::updateColumns(); +	LLScrollListCtrl::updateColumns(force_update);  	if (!mNameColumn.empty())  	{ diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h index 271802d48a..5aa1e1c458 100755 --- a/indra/newview/llnamelistctrl.h +++ b/indra/newview/llnamelistctrl.h @@ -149,7 +149,7 @@ public:  	void sortByName(BOOL ascending); -	/*virtual*/ void updateColumns(); +	/*virtual*/ void updateColumns(bool force_update);  	/*virtual*/ void	mouseOverHighlightNthItem( S32 index );  private: diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp index 133b269c11..a9a3c686a6 100755 --- a/indra/newview/llpanelgroupinvite.cpp +++ b/indra/newview/llpanelgroupinvite.cpp @@ -85,6 +85,7 @@ public:  	std::string		mAlreadyInGroup;  	std::string		mTooManySelected;  	bool		mConfirmedOwnerInvite; +	std::set<LLUUID>	mInviteeIDs;  	void (*mCloseCallback)(void* data); @@ -117,31 +118,30 @@ LLPanelGroupInvite::impl::~impl()  	}  } +const S32 MAX_GROUP_INVITES = 100; // Max invites per request. 100 to match server cap. +  void LLPanelGroupInvite::impl::addUsers(const std::vector<std::string>& names,  										const uuid_vec_t& agent_ids)  {  	std::string name;  	LLUUID id; +	if (names.size() + mInviteeIDs.size() > MAX_GROUP_INVITES) +	{ +		// Fail! Show a warning and don't add any names. +		LLSD msg; +		msg["MESSAGE"] = mTooManySelected; +		LLNotificationsUtil::add("GenericAlert", msg); +		return; +	} +  	for (S32 i = 0; i < (S32)names.size(); i++)  	{  		name = names[i];  		id = agent_ids[i];  		// Make sure this agent isn't already in the list. -		bool already_in_list = false; -		std::vector<LLScrollListItem*> items = mInvitees->getAllData(); -		for (std::vector<LLScrollListItem*>::iterator iter = items.begin(); -			 iter != items.end(); ++iter) -		{ -			LLScrollListItem* item = *iter; -			if (item->getUUID() == id) -			{ -				already_in_list = true; -				break; -			} -		} -		if (already_in_list) +		if (mInviteeIDs.find(id) != mInviteeIDs.end())  		{  			continue;  		} @@ -152,6 +152,7 @@ void LLPanelGroupInvite::impl::addUsers(const std::vector<std::string>& names,  		row["columns"][0]["value"] = name;  		mInvitees->addElement(row); +		mInviteeIDs.insert(id);  	}  } @@ -193,7 +194,6 @@ void LLPanelGroupInvite::impl::submitInvitations()  		role_member_pairs[item->getUUID()] = role_id;  	} -	const S32 MAX_GROUP_INVITES = 100; // Max invites per request. 100 to match server cap.  	if (role_member_pairs.size() > MAX_GROUP_INVITES)  	{  		// Fail! @@ -334,6 +334,12 @@ void LLPanelGroupInvite::impl::handleRemove()  			mInvitees->getAllSelected();  	if (selection.empty()) return; +	std::vector<LLScrollListItem*>::iterator iter; +	for(iter = selection.begin(); iter != selection.end(); ++iter) +	{ +		mInviteeIDs.erase( (*iter)->getUUID() ); +	} +  	// Remove all selected invitees.  	mInvitees->deleteSelectedItems();  	mRemoveButton->setEnabled(FALSE); @@ -459,6 +465,7 @@ void LLPanelGroupInvite::clear()  	mImplementation->mRoleNames->clear();  	mImplementation->mRoleNames->removeall();  	mImplementation->mOKButton->setEnabled(FALSE); +	mImplementation->mInviteeIDs.clear();  }  void LLPanelGroupInvite::addUsers(uuid_vec_t& agent_ids) diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index 78401020a6..6638b6640d 100755 --- 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/lltexturecache.cpp b/indra/newview/lltexturecache.cpp index 36a7aeb590..5bc2e971eb 100755 --- a/indra/newview/lltexturecache.cpp +++ b/indra/newview/lltexturecache.cpp @@ -1922,10 +1922,10 @@ bool LLTextureCache::writeToFastCache(S32 id, LLPointer<LLImageRaw> raw, S32 dis  		h >>= i;  		if(w * h *c > 0) //valid  		{ -			LLPointer<LLImageRaw> newraw = new LLImageRaw(raw->getData(), raw->getWidth(), raw->getHeight(), raw->getComponents()); -			newraw->scale(w, h) ; -			raw = newraw; - +			//make a duplicate to keep the original raw image untouched. +			raw = raw->duplicate(); +			raw->scale(w, h) ; +			  			discardlevel += i ;  		}  	} @@ -1935,9 +1935,12 @@ bool LLTextureCache::writeToFastCache(S32 id, LLPointer<LLImageRaw> raw, S32 dis  	memcpy(mFastCachePadBuffer + sizeof(S32), &h, sizeof(S32));  	memcpy(mFastCachePadBuffer + sizeof(S32) * 2, &c, sizeof(S32));  	memcpy(mFastCachePadBuffer + sizeof(S32) * 3, &discardlevel, sizeof(S32)); -	if(w * h * c > 0) //valid + +	S32 copy_size = w * h * c; +	if(copy_size > 0) //valid  	{ -		memcpy(mFastCachePadBuffer + TEXTURE_FAST_CACHE_ENTRY_OVERHEAD, raw->getData(), w * h * c); +		copy_size = llmin(copy_size, TEXTURE_FAST_CACHE_ENTRY_SIZE - TEXTURE_FAST_CACHE_ENTRY_OVERHEAD); +		memcpy(mFastCachePadBuffer + TEXTURE_FAST_CACHE_ENTRY_OVERHEAD, raw->getData(), copy_size);  	}  	S32 offset = id * TEXTURE_FAST_CACHE_ENTRY_SIZE; diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp index 6173e76a35..6173e76a35 100755..100644 --- a/indra/newview/lltexturefetch.cpp +++ b/indra/newview/lltexturefetch.cpp diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp index fc9a316759..1c362c18e0 100755 --- a/indra/newview/lltoolpie.cpp +++ b/indra/newview/lltoolpie.cpp @@ -121,7 +121,7 @@ BOOL LLToolPie::handleMouseDown(S32 x, S32 y, MASK mask)  BOOL LLToolPie::handleRightMouseDown(S32 x, S32 y, MASK mask)  {  	// don't pick transparent so users can't "pay" transparent objects -	mPick = gViewerWindow->pickImmediate(x, y, FALSE); +	mPick = gViewerWindow->pickImmediate(x, y, FALSE, TRUE);  	mPick.mKeyMask = mask;  	// claim not handled so UI focus stays same @@ -1687,6 +1687,13 @@ BOOL LLToolPie::handleRightClickPick()  			showVisualContextMenuEffect();  		}  	} +	else if (mPick.mParticleOwnerID.notNull()) +	{ +		if (gMenuMuteParticle && mPick.mParticleOwnerID != gAgent.getID()) +		{ +			gMenuMuteParticle->show(x,y); +		} +	}  	LLTool::handleRightMouseDown(x, y, mask);  	// We handled the event. diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 5e2f05f468..49eb7dc94a 100755 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -169,6 +169,7 @@ LLContextMenu	*gMenuObject = NULL;  LLContextMenu	*gMenuAttachmentSelf = NULL;  LLContextMenu	*gMenuAttachmentOther = NULL;  LLContextMenu	*gMenuLand	= NULL; +LLContextMenu	*gMenuMuteParticle = NULL;  const std::string SAVE_INTO_TASK_INVENTORY("Save Object Back to Object Contents"); @@ -425,6 +426,9 @@ void init_menus()  	gMenuLand = LLUICtrlFactory::createFromFile<LLContextMenu>(  		"menu_land.xml", gMenuHolder, registry); +	gMenuMuteParticle = LLUICtrlFactory::createFromFile<LLContextMenu>( +		"menu_mute_particle.xml", gMenuHolder, registry); +  	///  	/// set up the colors  	/// @@ -2450,6 +2454,9 @@ void cleanup_menus()  	delete gMenuLand;  	gMenuLand = NULL; +	delete gMenuMuteParticle; +	gMenuMuteParticle = NULL; +  	delete gMenuBarView;  	gMenuBarView = NULL; @@ -2803,6 +2810,13 @@ bool enable_object_edit()  	return enable;  } +bool enable_mute_particle() +{ +	const LLPickInfo& pick = LLToolPie::getInstance()->getPick(); + +	return pick.mParticleOwnerID != LLUUID::null && pick.mParticleOwnerID != gAgent.getID(); +} +  // mutually exclusive - show either edit option or build in menu  bool enable_object_build()  { @@ -6220,6 +6234,33 @@ class LLLandEdit : public view_listener_t  	}  }; +class LLMuteParticle : public view_listener_t +{ +	bool handleEvent(const LLSD& userdata) +	{ +		LLUUID id = LLToolPie::getInstance()->getPick().mParticleOwnerID; +		 +		if (id.notNull()) +		{ +			std::string name; +			gCacheName->getFullName(id, name); + +			LLMute mute(id, name, LLMute::AGENT); +			if (LLMuteList::getInstance()->isMuted(mute.mID)) +			{ +				LLMuteList::getInstance()->remove(mute); +			} +			else +			{ +				LLMuteList::getInstance()->add(mute); +				LLPanelBlockedList::showPanelAndSelect(mute.mID); +			} +		} + +		return true; +	} +}; +  class LLWorldEnableBuyLand : public view_listener_t  {  	bool handleEvent(const LLSD& userdata) @@ -8713,6 +8754,9 @@ void initialize_menus()  	view_listener_t::addMenu(new LLLandBuyPass(), "Land.BuyPass");  	view_listener_t::addMenu(new LLLandEdit(), "Land.Edit"); +	// Particle muting +	view_listener_t::addMenu(new LLMuteParticle(), "Particle.Mute"); +  	view_listener_t::addMenu(new LLLandEnableBuyPass(), "Land.EnableBuyPass");  	commit.add("Land.Buy", boost::bind(&handle_buy_land)); @@ -8735,6 +8779,7 @@ void initialize_menus()  	enable.add("EnablePayObject", boost::bind(&enable_pay_object));  	enable.add("EnablePayAvatar", boost::bind(&enable_pay_avatar));  	enable.add("EnableEdit", boost::bind(&enable_object_edit)); +	enable.add("EnableMuteParticle", boost::bind(&enable_mute_particle));  	enable.add("VisibleBuild", boost::bind(&enable_object_build));  	commit.add("Pathfinding.Linksets.Select", boost::bind(&LLFloaterPathfindingLinksets::openLinksetsWithSelectedObjects));  	enable.add("EnableSelectInPathfindingLinksets", boost::bind(&enable_object_select_in_pathfinding_linksets)); diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h index 143420e227..7f09fc2d8f 100755 --- a/indra/newview/llviewermenu.h +++ b/indra/newview/llviewermenu.h @@ -177,6 +177,7 @@ extern LLContextMenu		*gMenuObject;  extern LLContextMenu		*gMenuAttachmentSelf;  extern LLContextMenu		*gMenuAttachmentOther;  extern LLContextMenu		*gMenuLand; +extern LLContextMenu		*gMenuMuteParticle;  // Needed to build menus when attachment site list available  extern LLMenuGL* gAttachSubMenu; diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp index ace16396db..0db118835c 100755 --- a/indra/newview/llviewermessage.cpp +++ b/indra/newview/llviewermessage.cpp @@ -4570,7 +4570,6 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data)  		if (id == LLUUID::null)  		{  			LL_DEBUGS("Messaging") << "Unknown kill for local " << local_id << LL_ENDL; -			gObjectList.mNumUnknownKills++;  			continue;  		}  		else @@ -4594,18 +4593,12 @@ void process_kill_object(LLMessageSystem *mesgsys, void **user_data)  				// Do the kill  				gObjectList.killObject(objectp);  			} -			else -			{ -				LL_WARNS("Messaging") << "Object in UUID lookup, but not on object list in kill!" << LL_ENDL; -				gObjectList.mNumUnknownKills++; -			}  		}  		// We should remove the object from selection after it is marked dead by gObjectList to make LLToolGrab,          // which is using the object, release the mouse capture correctly when the object dies.          // See LLToolGrab::handleHoverActive() and LLToolGrab::handleHoverNonPhysical().  		LLSelectMgr::getInstance()->removeObjectFromSelections(id); -  	}  } @@ -7326,8 +7319,12 @@ void process_script_teleport_request(LLMessageSystem* msg, void**)  	LLFloaterWorldMap* instance = LLFloaterWorldMap::getInstance();  	if(instance)  	{ -		instance->trackURL( -						   sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]); +		llinfos << "Object named " << object_name  +			<< " is offering TP to region " +			<< sim_name << " position " << pos +			<< llendl; + +		instance->trackURL(sim_name, (S32)pos.mV[VX], (S32)pos.mV[VY], (S32)pos.mV[VZ]);  		LLFloaterReg::showInstance("world_map", "center");  	} diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index caacf26cb3..66615657d8 100755 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -106,7 +106,6 @@ LLViewerObjectList::LLViewerObjectList()  	mNumNewObjects = 0;  	mWasPaused = FALSE;  	mNumDeadObjectUpdates = 0; -	mNumUnknownKills = 0;  	mNumUnknownUpdates = 0;  } diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h index 449a4633ff..6518c25d09 100755 --- a/indra/newview/llviewerobjectlist.h +++ b/indra/newview/llviewerobjectlist.h @@ -188,7 +188,6 @@ public:  	S32 mNumUnknownUpdates;  	S32 mNumDeadObjectUpdates; -	S32 mNumUnknownKills;  	S32 mNumDeadObjects;  protected:  	std::vector<U64>	mOrphanParents;	// LocalID/ip,port of orphaned objects diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp index 6bd9f66b9c..61cdfd7818 100755 --- a/indra/newview/llviewerpartsim.cpp +++ b/indra/newview/llviewerpartsim.cpp @@ -488,9 +488,13 @@ void LLViewerPartSim::destroyClass()  //static  BOOL LLViewerPartSim::shouldAddPart()  { -	if (sParticleCount > PART_THROTTLE_THRESHOLD*sMaxParticleCount) +	if (sParticleCount >= MAX_PART_COUNT)  	{ +		return FALSE; +	} +	if (sParticleCount > PART_THROTTLE_THRESHOLD*sMaxParticleCount) +	{  		F32 frac = (F32)sParticleCount/(F32)sMaxParticleCount;  		frac -= PART_THROTTLE_THRESHOLD;  		frac *= PART_THROTTLE_RESCALE; @@ -500,7 +504,10 @@ BOOL LLViewerPartSim::shouldAddPart()  			return FALSE;  		}  	} -	if (sParticleCount >= MAX_PART_COUNT) + +	// Check frame rate, and don't add more if the viewer is really slow +	const F32 MIN_FRAME_RATE_FOR_NEW_PARTICLES = 4.f; +	if (gFPSClamped < MIN_FRAME_RATE_FOR_NEW_PARTICLES)  	{  		return FALSE;  	} diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp index 6cc9f4ace1..84f66c359f 100755 --- a/indra/newview/llviewertexture.cpp +++ b/indra/newview/llviewertexture.cpp @@ -1199,10 +1199,10 @@ void LLViewerFetchedTexture::dump()  // ONLY called from LLViewerFetchedTextureList  void LLViewerFetchedTexture::destroyTexture()   { -	//if(LLImageGL::sGlobalTextureMemoryInBytes < sMaxDesiredTextureMemInBytes)//not ready to release unused memory. -	//{ -	//	return ; -	//} +	if(LLImageGL::sGlobalTextureMemoryInBytes < sMaxDesiredTextureMemInBytes * 0.95f)//not ready to release unused memory. +	{ +		return ; +	}  	if (mNeedsCreateTexture)//return if in the process of generating a new texture.  	{  		return ; @@ -1290,7 +1290,12 @@ void LLViewerFetchedTexture::addToCreateTexture()  							destroyRawImage();  							return ;  						} -						mRawImage->scale(w >> i, h >> i) ;					 + +						{ +							//make a duplicate in case somebody else is using this raw image +							mRawImage = mRawImage->duplicate();  +							mRawImage->scale(w >> i, h >> i) ;					 +						}  					}  				}  			} @@ -1521,7 +1526,7 @@ F32 LLViewerFetchedTexture::calcDecodePriority()  	else if (pixel_priority < 0.001f && !have_all_data)  	{  		// Not on screen but we might want some data -		if (mBoostLevel > BOOST_HIGH) +		if (mBoostLevel > BOOST_SELECTED)  		{  			// Always want high boosted images  			priority = 1.f; @@ -2669,7 +2674,11 @@ void LLViewerFetchedTexture::setCachedRawImage()  				--i ;  			} -			mRawImage->scale(w >> i, h >> i) ; +			{ +				//make a duplicate in case somebody else is using this raw image +				mRawImage = mRawImage->duplicate();  +				mRawImage->scale(w >> i, h >> i) ; +			}  		}  		mCachedRawImage = mRawImage ;  		mRawDiscardLevel += i ; diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h index c96f89017f..10101a4b9b 100755 --- a/indra/newview/llviewertexture.h +++ b/indra/newview/llviewertexture.h @@ -101,6 +101,7 @@ public:  		INVALID_TEXTURE_TYPE  	}; +  	typedef std::vector<LLFace*> ll_face_list_t;  	typedef std::vector<LLVOVolume*> ll_volume_list_t; diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 65a906d3c0..19426090a2 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -229,7 +229,9 @@ LLFrameTimer	gAwayTriggerTimer;  BOOL			gShowOverlayTitle = FALSE;  LLViewerObject*  gDebugRaycastObject = NULL; +LLVOPartGroup* gDebugRaycastParticle = NULL;  LLVector4a       gDebugRaycastIntersection; +LLVector3		gDebugRaycastParticleIntersection;  LLVector2        gDebugRaycastTexCoord;  LLVector4a       gDebugRaycastNormal;  LLVector4a       gDebugRaycastTangent; @@ -2844,6 +2846,8 @@ void LLViewerWindow::updateUI()  											  &gDebugRaycastTangent,  											  &gDebugRaycastStart,  											  &gDebugRaycastEnd); + +		gDebugRaycastParticle = gPipeline.lineSegmentIntersectParticle(gDebugRaycastStart, gDebugRaycastEnd, &gDebugRaycastParticleIntersection, NULL);  	}  	updateMouseDelta(); @@ -3664,7 +3668,7 @@ void LLViewerWindow::pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback  		pick_transparent = TRUE;  	} -	LLPickInfo pick_info(LLCoordGL(x, y_from_bot), mask, pick_transparent, TRUE, callback); +	LLPickInfo pick_info(LLCoordGL(x, y_from_bot), mask, pick_transparent, FALSE, TRUE, callback);  	schedulePick(pick_info);  } @@ -3720,7 +3724,7 @@ void LLViewerWindow::returnEmptyPicks()  }  // Performs the GL object/land pick. -LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot,  BOOL pick_transparent) +LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot,  BOOL pick_transparent, BOOL pick_particle)  {  	BOOL in_build_mode = LLFloaterReg::instanceVisible("build");  	if (in_build_mode || LLDrawPoolAlpha::sShowDebugAlpha) @@ -3729,10 +3733,10 @@ LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot,  BOOL pick_trans  		// "Show Debug Alpha" means no object actually transparent  		pick_transparent = TRUE;  	} - +	  	// 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, TRUE, NULL); +	mLastPick = LLPickInfo(LLCoordGL(x, y_from_bot), key_mask, pick_transparent, pick_particle, TRUE, NULL);  	mLastPick.fetchResults();  	return mLastPick; @@ -4291,7 +4295,8 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei  	F32 scale_factor = 1.0f ;  	if (!keep_window_aspect || (image_width > window_width) || (image_height > window_height))  	{	 -		if ((image_width > window_width || image_height > window_height) && LLPipeline::sRenderDeferred && !show_ui) +		if ((image_width <= gGLManager.mGLMaxTextureSize && image_height <= gGLManager.mGLMaxTextureSize) &&  +			(image_width > window_width || image_height > window_height) && LLPipeline::sRenderDeferred && !show_ui)  		{  			if (scratch_space.allocate(image_width, image_height, GL_RGBA, true, true))  			{ @@ -4306,6 +4311,8 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei  					snapshot_height = image_height;  					reset_deferred = true;  					mWorldViewRectRaw.set(0, image_height, image_width, 0); +					LLViewerCamera::getInstance()->setViewHeightInPixels( mWorldViewRectRaw.getHeight() ); +					LLViewerCamera::getInstance()->setAspect( getWorldViewAspectRatio() );  					scratch_space.bindTarget();  				}  				else @@ -4515,6 +4522,8 @@ BOOL LLViewerWindow::rawSnapshot(LLImageRaw *raw, S32 image_width, S32 image_hei  	if (reset_deferred)  	{  		mWorldViewRectRaw = window_rect; +		LLViewerCamera::getInstance()->setViewHeightInPixels( mWorldViewRectRaw.getHeight() ); +		LLViewerCamera::getInstance()->setAspect( getWorldViewAspectRatio() );  		scratch_space.flush();  		scratch_space.release();  		gPipeline.allocateScreenBuffer(original_width, original_height); @@ -5128,13 +5137,15 @@ LLPickInfo::LLPickInfo()  	  mTangent(),  	  mBinormal(),  	  mHUDIcon(NULL), -	  mPickTransparent(FALSE) +	  mPickTransparent(FALSE), +	  mPickParticle(FALSE)  {  }  LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos,   		       MASK keyboard_mask,   		       BOOL pick_transparent, +			   BOOL pick_particle,  		       BOOL pick_uv_coords,  		       void (*pick_callback)(const LLPickInfo& pick_info))  	: mMousePt(mouse_pos), @@ -5150,7 +5161,8 @@ LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos,  	  mTangent(),  	  mBinormal(),  	  mHUDIcon(NULL), -	  mPickTransparent(pick_transparent) +	  mPickTransparent(pick_transparent), +	  mPickParticle(pick_particle)  {  } @@ -5168,6 +5180,10 @@ void LLPickInfo::fetchResults()  	LLVector4a origin;  	origin.load3(LLViewerCamera::getInstance()->getOrigin().mV);  	F32 icon_dist = 0.f; +	LLVector3 start; +	LLVector3 end; +	LLVector3 particle_end; +  	if (hit_icon)  	{  		LLVector4a delta; @@ -5177,14 +5193,24 @@ void LLPickInfo::fetchResults()  	LLViewerObject* hit_object = gViewerWindow->cursorIntersect(mMousePt.mX, mMousePt.mY, 512.f,  									NULL, -1, mPickTransparent, &face_hit, -									&intersection, &uv, &normal, &tangent); +									&intersection, &uv, &normal, &tangent, &start, &end);  	mPickPt = mMousePt;  	U32 te_offset = face_hit > -1 ? face_hit : 0; -	//unproject relative clicked coordinate from window coordinate using GL -	 +	if (mPickParticle) +	{ //get the end point of line segement to use for particle raycast +		if (hit_object) +		{ +			particle_end = intersection; +		} +		else +		{ +			particle_end = end; +		} +	} +  	LLViewerObject* objectp = hit_object; @@ -5199,6 +5225,7 @@ void LLPickInfo::fetchResults()  		mHUDIcon = hit_icon;  		mPickType = PICK_ICON;  		mPosGlobal = mHUDIcon->getPositionGlobal(); +  	}  	else if (objectp)  	{ @@ -5248,6 +5275,18 @@ void LLPickInfo::fetchResults()  		}  	} +	if (mPickParticle) +	{ //search for closest particle to click origin out to intersection point +		S32 part_face = -1; + +		LLVOPartGroup* group = gPipeline.lineSegmentIntersectParticle(start, particle_end, NULL, &part_face); +		if (group) +		{ +			mParticleOwnerID = group->getPartOwner(part_face); +			mParticleSourceID = group->getPartSource(part_face); +		} +	} +  	if (mPickCallback)  	{  		mPickCallback(*this); diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h index 89f6e3bc26..e764adbd35 100755 --- a/indra/newview/llviewerwindow.h +++ b/indra/newview/llviewerwindow.h @@ -65,6 +65,7 @@ class LLWindow;  class LLRootView;  class LLWindowListener;  class LLViewerWindowListener; +class LLVOPartGroup;  class LLPopupView;  #define PICK_HALF_WIDTH 5 @@ -87,7 +88,8 @@ public:  	LLPickInfo();  	LLPickInfo(const LLCoordGL& mouse_pos,   		MASK keyboard_mask,  -		BOOL pick_transparent,  +		BOOL pick_transparent, +		BOOL pick_particle,  		BOOL pick_surface_info,  		void (*pick_callback)(const LLPickInfo& pick_info)); @@ -108,6 +110,8 @@ public:  	LLVector3d		mPosGlobal;  	LLVector3		mObjectOffset;  	LLUUID			mObjectID; +	LLUUID			mParticleOwnerID; +	LLUUID			mParticleSourceID;  	S32				mObjectFace;  	LLHUDIcon*		mHUDIcon;  	LLVector3       mIntersection; @@ -118,6 +122,7 @@ public:  	LLVector4		mTangent;  	LLVector3		mBinormal;  	BOOL			mPickTransparent; +	BOOL			mPickParticle;  	void		    getSurfaceInfo();  private: @@ -356,7 +361,7 @@ public:  	void			returnEmptyPicks();  	void			pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback)(const LLPickInfo& pick_info), BOOL pick_transparent = FALSE); -	LLPickInfo		pickImmediate(S32 x, S32 y, BOOL pick_transparent); +	LLPickInfo		pickImmediate(S32 x, S32 y, BOOL pick_transparent, BOOL pick_particle = FALSE);  	LLHUDIcon* cursorIntersectIcon(S32 mouse_x, S32 mouse_y, F32 depth,  										   LLVector4a* intersection); @@ -501,6 +506,8 @@ extern LLFrameTimer		gAwayTriggerTimer;		// how long the avatar has been away  extern LLViewerObject*  gDebugRaycastObject;  extern LLVector4a       gDebugRaycastIntersection; +extern LLVOPartGroup*	gDebugRaycastParticle; +extern LLVector3		gDebugRaycastParticleIntersection;  extern LLVector2        gDebugRaycastTexCoord;  extern LLVector4a       gDebugRaycastNormal;  extern LLVector4a       gDebugRaycastTangent; diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp index 43a5ddba42..e8cfafc784 100755 --- a/indra/newview/llvopartgroup.cpp +++ b/indra/newview/llvopartgroup.cpp @@ -234,6 +234,37 @@ LLDrawable* LLVOPartGroup::createDrawable(LLPipeline *pipeline)   const F32 MAX_PARTICLE_AREA_SCALE = 0.02f; // some tuned constant, limits on how much particle area to draw + LLUUID LLVOPartGroup::getPartOwner(S32 idx) + { +	 LLUUID ret = LLUUID::null; + +	 if (idx < (S32) mViewerPartGroupp->mParticles.size()) +	 { +		 ret = mViewerPartGroupp->mParticles[idx]->mPartSourcep->getOwnerUUID(); +	 } + +	 return ret; + } + + LLUUID LLVOPartGroup::getPartSource(S32 idx) + { +	 LLUUID ret = LLUUID::null; + +	 if (idx < (S32) mViewerPartGroupp->mParticles.size()) +	 { +		 LLViewerPart* part = mViewerPartGroupp->mParticles[idx]; +		 if (part && part->mPartSourcep.notNull() && +			 part->mPartSourcep->mSourceObjectp.notNull()) +		 { +			 LLViewerObject* source = part->mPartSourcep->mSourceObjectp; +			 ret = source->getID(); +		 } +	 } + +	 return ret; + } + +  F32 LLVOPartGroup::getPartSize(S32 idx)  {  	if (idx < (S32) mViewerPartGroupp->mParticles.size()) @@ -387,20 +418,68 @@ BOOL LLVOPartGroup::updateGeometry(LLDrawable *drawable)  	return TRUE;  } -void LLVOPartGroup::getGeometry(S32 idx, -								LLStrider<LLVector4a>& verticesp, -								LLStrider<LLVector3>& normalsp,  -								LLStrider<LLVector2>& texcoordsp, -								LLStrider<LLColor4U>& colorsp,  -								LLStrider<U16>& indicesp) + +BOOL LLVOPartGroup::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, +										  S32 face, +										  BOOL pick_transparent, +										  S32* face_hit, +										  LLVector3* intersection, +										  LLVector2* tex_coord, +										  LLVector3* normal, +										  LLVector3* bi_normal)  { -	if (idx >= (S32) mViewerPartGroupp->mParticles.size()) +	LLVector4a starta, enda; +	starta.load3(start.mV); +	enda.load3(end.mV); + +	LLVector4a dir; +	dir.setSub(enda, starta); + +	F32 closest_t = 2.f; +	BOOL ret = FALSE; +	 +	for (U32 idx = 0; idx < mViewerPartGroupp->mParticles.size(); ++idx)  	{ -		return; +		const LLViewerPart &part = *((LLViewerPart*) (mViewerPartGroupp->mParticles[idx])); + +		LLVector4a v[4]; +		LLStrider<LLVector4a> verticesp; +		verticesp = v; +		 +		getGeometry(part, verticesp); + +		F32 a,b,t; +		if (LLTriangleRayIntersect(v[0], v[1], v[2], starta, dir, a,b,t) || +			LLTriangleRayIntersect(v[1], v[3], v[2], starta, dir, a,b,t)) +		{ +			if (t >= 0.f && +				t <= 1.f && +				t < closest_t) +			{ +				ret = TRUE; +				closest_t = t; +				if (face_hit) +				{ +					*face_hit = idx; +				} + +				if (intersection) +				{ +					LLVector4a intersect = dir; +					intersect.mul(closest_t); +					intersect.add(starta); +					intersection->set(intersect.getF32ptr()); +				} +			} +		}  	} -	const LLViewerPart &part = *((LLViewerPart*) (mViewerPartGroupp->mParticles[idx])); +	return ret; +} +void LLVOPartGroup::getGeometry(const LLViewerPart& part, +								LLStrider<LLVector4a>& verticesp) +{  	LLVector4a part_pos_agent;  	part_pos_agent.load3(part.mPosAgent.mV);  	LLVector4a camera_agent; @@ -452,8 +531,6 @@ void LLVOPartGroup::getGeometry(S32 idx,  	up.mul(0.5f*part.mScale.mV[1]); -	LLVector3 normal = -LLViewerCamera::getInstance()->getXAxis(); -  	//HACK -- the verticesp->mV[3] = 0.f here are to set the texture index to 0 (particles don't use texture batching, maybe they should)  	// this works because there is actually a 4th float stored after the vertex position which is used as a texture index  	// also, somebody please VECTORIZE THIS @@ -472,6 +549,25 @@ void LLVOPartGroup::getGeometry(S32 idx,  	(*verticesp++).getF32ptr()[3] = 0.f;  	verticesp->setAdd(ppamu, right);  	(*verticesp++).getF32ptr()[3] = 0.f; +} + + +								 +void LLVOPartGroup::getGeometry(S32 idx, +								LLStrider<LLVector4a>& verticesp, +								LLStrider<LLVector3>& normalsp,  +								LLStrider<LLVector2>& texcoordsp, +								LLStrider<LLColor4U>& colorsp,  +								LLStrider<U16>& indicesp) +{ +	if (idx >= (S32) mViewerPartGroupp->mParticles.size()) +	{ +		return; +	} +	 +	const LLViewerPart &part = *((LLViewerPart*) (mViewerPartGroupp->mParticles[idx])); + +	getGeometry(part, verticesp);  	*colorsp++ = part.mColor;  	*colorsp++ = part.mColor; @@ -480,6 +576,7 @@ void LLVOPartGroup::getGeometry(S32 idx,  	if (!(part.mFlags & LLPartData::LL_PART_EMISSIVE_MASK))  	{ //not fullbright, needs normal +		LLVector3 normal = -LLViewerCamera::getInstance()->getXAxis();  		*normalsp++   = normal;  		*normalsp++   = normal;  		*normalsp++   = normal; diff --git a/indra/newview/llvopartgroup.h b/indra/newview/llvopartgroup.h index 42c1252d01..ce05a0282e 100755 --- a/indra/newview/llvopartgroup.h +++ b/indra/newview/llvopartgroup.h @@ -69,11 +69,23 @@ public:  	virtual void updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax);  	virtual U32 getPartitionType() const; +	/*virtual*/ BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, +										  S32 face, +										  BOOL pick_transparent, +										  S32* face_hit, +										  LLVector3* intersection, +										  LLVector2* tex_coord, +										  LLVector3* normal, +										  LLVector3* bi_normal); +  	/*virtual*/ void setPixelAreaAndAngle(LLAgent &agent);  	/*virtual*/ void updateTextures();  	/*virtual*/ LLDrawable* createDrawable(LLPipeline *pipeline);  	/*virtual*/ BOOL        updateGeometry(LLDrawable *drawable); +	void		getGeometry(const LLViewerPart& part,							 +								LLStrider<LLVector4a>& verticesp); +				  				void		getGeometry(S32 idx,  								LLStrider<LLVector4a>& verticesp,  								LLStrider<LLVector3>& normalsp,  @@ -83,6 +95,9 @@ public:  	void updateFaceSize(S32 idx) { }  	F32 getPartSize(S32 idx); +	LLUUID getPartOwner(S32 idx); +	LLUUID getPartSource(S32 idx); +  	void setViewerPartGroup(LLViewerPartGroup *part_groupp)		{ mViewerPartGroupp = part_groupp; }  	LLViewerPartGroup* getViewerPartGroup()	{ return mViewerPartGroupp; } diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp index 007c2b9003..eb9e1bb2d0 100755 --- a/indra/newview/llvovolume.cpp +++ b/indra/newview/llvovolume.cpp @@ -1113,7 +1113,13 @@ void LLVOVolume::sculpt()  		S32 max_discard = mSculptTexture->getMaxDiscardLevel();  		if (discard_level > max_discard) -			discard_level = max_discard;    // clamp to the best we can do +		{ +			discard_level = max_discard;    // clamp to the best we can do			 +		} +		if(discard_level > MAX_DISCARD_LEVEL) +		{ +			return; //we think data is not ready yet. +		}  		S32 current_discard = getVolume()->getSculptLevel() ;  		if(current_discard < -2) @@ -4828,7 +4834,14 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)  			if (is_rigged)  			{ -				drawablep->setState(LLDrawable::RIGGED); +				if (!drawablep->isState(LLDrawable::RIGGED)) +				{ +					drawablep->setState(LLDrawable::RIGGED); + +					//first time this is drawable is being marked as rigged, +					// do another LoD update to use avatar bounding box +					vobj->updateLOD(); +				}  			}  			else  			{ diff --git a/indra/newview/noise.h b/indra/newview/noise.h index 0923bffcf2..b3efad73c5 100755 --- a/indra/newview/noise.h +++ b/indra/newview/noise.h @@ -310,6 +310,8 @@ static void normalize3(F32 v[3])  static void init(void)  { +	// we want repeatable noise (e.g. for stable terrain texturing), so seed with known value +	srand(42);  	int i, j, k;  	for (i = 0 ; i < B ; i++) { @@ -340,6 +342,9 @@ static void init(void)  		for (j = 0 ; j < 3 ; j++)  			g3[B + i][j] = g3[i][j];  	} + +	// reintroduce entropy +	srand(time(NULL));		// Flawfinder: ignore  }  #undef B diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp index ebf6be4e36..7bab06c868 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"); @@ -1116,6 +1118,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"); @@ -4772,18 +4775,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) @@ -5209,6 +5200,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; +				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(); @@ -6889,7 +6916,49 @@ void LLPipeline::setRenderHighlightTextureChannel(LLRender::eTexIndex channel)  	sRenderHighlightTextureChannel = channel;  } -LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector4a& start, const LLVector4a& end, +LLVOPartGroup* LLPipeline::lineSegmentIntersectParticle(const LLVector3& start, const LLVector3& end, LLVector3* intersection, +														S32* face_hit) +{ +	LLVector3 local_end = end; + +	LLVector3 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 LLVector3& start, const LLVector3& end,  														BOOL pick_transparent,												  														S32* face_hit,  														LLVector4a* intersection,         // return the intersection point @@ -7448,7 +7517,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; diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h index 2c023a6f70..1e9d54e7ac 100755 --- a/indra/newview/pipeline.h +++ b/indra/newview/pipeline.h @@ -58,6 +58,7 @@ class LLRenderFunc;  class LLCubeMap;  class LLCullResult;  class LLVOAvatar; +class LLVOPartGroup;  class LLGLSLShader;  class LLCurlRequest;  class LLDrawPoolAlpha; @@ -196,7 +197,13 @@ public:  												LLVector4a* normal = NULL,               // return the surface normal at the intersection point  												LLVector4a* tangent = NULL             // return the surface tangent at the intersection point    		); -	LLViewerObject* lineSegmentIntersectInHUD(const LLVector4a& start, const LLVector4a& end, + +	//get the closest particle to start between start and end, returns the LLVOPartGroup and particle index +	LLVOPartGroup* lineSegmentIntersectParticle(const LLVector3& start, const LLVector3& end, LLVector3* intersection, +														S32* face_hit); + + +	LLViewerObject* lineSegmentIntersectInHUD(const LLVector3& start, const LLVector3& end,  											  BOOL pick_transparent,  											  S32* face_hit,                          // return the face hit  											  LLVector4a* intersection = NULL,         // return the intersection point @@ -902,6 +909,7 @@ public:  	static F32 RenderGlowWidth;  	static F32 RenderGlowStrength;  	static BOOL RenderDepthOfField; +	static BOOL RenderDepthOfFieldInEditMode;  	static F32 CameraFocusTransitionTime;  	static F32 CameraFNumber;  	static F32 CameraFocalLength; diff --git a/indra/newview/skins/default/xui/en/menu_attachment_other.xml b/indra/newview/skins/default/xui/en/menu_attachment_other.xml index 46ba4bd29d..a8012656c2 100755 --- a/indra/newview/skins/default/xui/en/menu_attachment_other.xml +++ b/indra/newview/skins/default/xui/en/menu_attachment_other.xml @@ -112,4 +112,15 @@           <menu_item_call.on_enable            function="Object.EnableInspect" />     </menu_item_call> +  <menu_item_separator +       layout="topleft" /> +  <menu_item_call +     enabled="false" +     label="Mute Particle Owner" +     name="Mute Particle"> +    <menu_item_call.on_click +     function="Particle.Mute" /> +    <menu_item_call.on_enable +     function="EnableMuteParticle" /> +  </menu_item_call>  </context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_attachment_self.xml b/indra/newview/skins/default/xui/en/menu_attachment_self.xml index 28e032ce5f..500a5dc6d1 100755 --- a/indra/newview/skins/default/xui/en/menu_attachment_self.xml +++ b/indra/newview/skins/default/xui/en/menu_attachment_self.xml @@ -143,4 +143,15 @@ name="Edit Outfit">      <menu_item_call.on_enable       function="Attachment.EnableDrop" />    </menu_item_call> +  <menu_item_separator +       layout="topleft" /> +  <menu_item_call +     enabled="false" +     label="Mute Particle Owner" +     name="Mute Particle"> +    <menu_item_call.on_click +     function="Particle.Mute" /> +    <menu_item_call.on_enable +     function="EnableMuteParticle" /> +  </menu_item_call>  </context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_avatar_other.xml b/indra/newview/skins/default/xui/en/menu_avatar_other.xml index e7c2b80da2..bca9ba5a56 100755 --- a/indra/newview/skins/default/xui/en/menu_avatar_other.xml +++ b/indra/newview/skins/default/xui/en/menu_avatar_other.xml @@ -103,4 +103,15 @@          <menu_item_call.on_enable           function="EnablePayAvatar" />      </menu_item_call> +  <menu_item_separator +       layout="topleft" /> +  <menu_item_call +     enabled="false" +     label="Mute Particle Owner" +     name="Mute Particle"> +    <menu_item_call.on_click +     function="Particle.Mute" /> +    <menu_item_call.on_enable +     function="EnableMuteParticle" /> +  </menu_item_call>  </context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_avatar_self.xml b/indra/newview/skins/default/xui/en/menu_avatar_self.xml index c1ff026a74..362dca698f 100755 --- a/indra/newview/skins/default/xui/en/menu_avatar_self.xml +++ b/indra/newview/skins/default/xui/en/menu_avatar_self.xml @@ -269,4 +269,16 @@              <menu_item_call.on_visible               function="Advanced.EnableAppearanceToXML"/>      </menu_item_call> +  <menu_item_separator +       layout="topleft" /> +  <menu_item_call +     enabled="false" +     label="Mute Particle Owner" +     name="Mute Particle"> +    <menu_item_call.on_click +     function="Particle.Mute" /> + +    <menu_item_call.on_enable +     function="EnableMuteParticle" /> +  </menu_item_call>  </context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_land.xml b/indra/newview/skins/default/xui/en/menu_land.xml index cc6d8ad9c1..7b40e89535 100755 --- a/indra/newview/skins/default/xui/en/menu_land.xml +++ b/indra/newview/skins/default/xui/en/menu_land.xml @@ -61,4 +61,15 @@          <menu_item_call.on_enable           function="EnableEdit" />      </menu_item_call> +   <menu_item_separator +       layout="topleft" /> +  <menu_item_call +     enabled="false" +     label="Mute Particle Owner" +     name="Mute Particle"> +    <menu_item_call.on_click +     function="Particle.Mute" /> +    <menu_item_call.on_enable +     function="EnableMuteParticle" /> +  </menu_item_call>  </context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_mute_particle.xml b/indra/newview/skins/default/xui/en/menu_mute_particle.xml new file mode 100644 index 0000000000..41d5613623 --- /dev/null +++ b/indra/newview/skins/default/xui/en/menu_mute_particle.xml @@ -0,0 +1,15 @@ +<?xml version="1.0" encoding="utf-8" standalone="yes" ?> +<!-- *NOTE: See also menu_attachment_other.xml --> +<context_menu + layout="topleft" + name="Mute Particle Pie"> +  <menu_item_call +     enabled="false" +     label="Mute Particle Owner" +     name="Mute Particle"> +    <menu_item_call.on_click +     function="Particle.Mute" /> +    <menu_item_call.on_enable +     function="EnableMuteParticle" /> +  </menu_item_call> +</context_menu> diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml index f6004621a6..97b24d2aba 100755 --- a/indra/newview/skins/default/xui/en/menu_object.xml +++ b/indra/newview/skins/default/xui/en/menu_object.xml @@ -196,4 +196,15 @@      <menu_item_call.on_enable          function="Object.EnableDelete" />    </menu_item_call> +  <menu_item_separator +       layout="topleft" /> +  <menu_item_call +     enabled="false" +     label="Mute Particle Owner" +     name="Mute Particle"> +    <menu_item_call.on_click +     function="Particle.Mute" /> +    <menu_item_call.on_enable +     function="EnableMuteParticle" /> +  </menu_item_call>  </context_menu> diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml index 9e582cf0de..2e0e8bf885 100755 --- a/indra/newview/skins/default/xui/en/notifications.xml +++ b/indra/newview/skins/default/xui/en/notifications.xml @@ -6804,7 +6804,6 @@ This will add a bookmark in your inventory so you can quickly IM this Resident.     name="RegionRestartMinutes"     priority="high"     sound="UISndAlert" -   persist="true"     type="notify">  This region will restart in [MINUTES] minutes.  If you stay in this region you will be logged out. @@ -6815,7 +6814,6 @@ If you stay in this region you will be logged out.     name="RegionRestartSeconds"     priority="high"     sound="UISndAlert" -   persist="true"     type="notify">  This region will restart in [SECONDS] seconds.  If you stay in this region you will be logged out. diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml index d7db7caf66..3c4d288037 100755 --- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml +++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml @@ -47,7 +47,7 @@          Better      </text>      <icon -     color="0.12 0.12 0.12 1" +     color="DkGray"       height="14"       image_name="Rounded_Square"       layout="topleft" @@ -56,16 +56,15 @@       top_delta="-2"       width="2" />    <icon -     color="0.12 0.12 0.12 1" +     color="DkGray"       height="14"       image_name="Rounded_Square"       layout="topleft"       left_pad="41" -     name="LowMidraphicsDivet" -     top_delta="-2" +     name="LowMidGraphicsDivet"       width="2" />      <icon -     color="0.12 0.12 0.12 1" +     color="DkGray"       height="14"       image_name="Rounded_Square"       layout="topleft" @@ -74,7 +73,7 @@       top_delta="0"       width="2" />    <icon -     color="0.12 0.12 0.12 1" +     color="DkGray"       height="14"       image_name="Rounded_Square"       layout="topleft" @@ -83,7 +82,7 @@       top_delta="0"       width="2" />      <icon -     color="0.12 0.12 0.12 1" +     color="DkGray"       height="14"       image_name="Rounded_Square"       layout="topleft" @@ -92,7 +91,7 @@       top_delta="0"       width="2" />    <icon -     color="0.12 0.12 0.12 1" +     color="DkGray"       height="14"       image_name="Rounded_Square"       layout="topleft" @@ -101,7 +100,7 @@       top_delta="0"       width="2" />      <icon -     color="0.12 0.12 0.12 1" +     color="DkGray"       height="14"       image_name="Rounded_Square"       layout="topleft" diff --git a/indra/newview/skins/default/xui/en/role_actions.xml b/indra/newview/skins/default/xui/en/role_actions.xml index 89aef57cca..0eeccbeac5 100755 --- a/indra/newview/skins/default/xui/en/role_actions.xml +++ b/indra/newview/skins/default/xui/en/role_actions.xml @@ -70,8 +70,8 @@  		     longdescription="Toggle 'Show Place in Search' and setting a parcel's category in About Land > Options tab."  		     name="land find places" value="17" />  		<action -		     description="Change parcel name, description, and 'Show Place in Search' settings" -		     longdescription="Change parcel name, description, and 'Show Place in Search' settings. This is done in About Land > Options tab." +		     description="Change parcel name, description, and 'Moderate Content' settings" +		     longdescription="Change parcel name, description, and 'Moderate Content' settings. This is done in About Land > Options tab."  		     name="land change identity" value="18" />  		<action description="Set landing point and set teleport routing"  		     longdescription="On a group-owned parcel, Members in a Role with this Ability can set a landing point to specify where incoming teleports arrive, and also set teleport routing for further control. This is done in About Land > Options tab." diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml index f7b33b0a4a..d964ccaf79 100755 --- a/indra/newview/skins/default/xui/en/strings.xml +++ b/indra/newview/skins/default/xui/en/strings.xml @@ -2515,6 +2515,8 @@ Drag folders to this area and click "Send to Marketplace" to list them for sale  	<string name="ATTACH_HUD_BOTTOM_LEFT">HUD Bottom Left</string>  	<string name="ATTACH_HUD_BOTTOM">HUD Bottom</string>  	<string name="ATTACH_HUD_BOTTOM_RIGHT">HUD Bottom Right</string> +	<string name="ATTACH_NECK">Neck</string> +	<string name="ATTACH_AVATAR_CENTER">Avatar Center</string>  	<!-- script editor -->  	<string name="CursorPos">Line [LINE], Column [COLUMN]</string> | 
