aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorJacek Antonelli2008-08-15 23:45:01 -0500
committerJacek Antonelli2008-08-15 23:45:01 -0500
commit28d8d4e7664bcd6c8369cc18832e42096af7cad2 (patch)
tree069020fe66339aff2ca4176370ff743b14713f2d
parentSecond Life viewer sources 1.17.2.0 (diff)
downloadmeta-impy-28d8d4e7664bcd6c8369cc18832e42096af7cad2.zip
meta-impy-28d8d4e7664bcd6c8369cc18832e42096af7cad2.tar.gz
meta-impy-28d8d4e7664bcd6c8369cc18832e42096af7cad2.tar.bz2
meta-impy-28d8d4e7664bcd6c8369cc18832e42096af7cad2.tar.xz
Second Life viewer sources 1.17.3.0
-rw-r--r--linden/doc/contributions.txt7
-rw-r--r--linden/indra/SConstruct89
-rw-r--r--linden/indra/indra_complete/indra_complete.sln4
-rw-r--r--linden/indra/llcharacter/llheadrotmotion.cpp20
-rw-r--r--linden/indra/llcharacter/lljointstate.h2
-rw-r--r--linden/indra/llcharacter/llmotioncontroller.cpp21
-rw-r--r--linden/indra/llcharacter/llmotioncontroller.h2
-rw-r--r--linden/indra/llcharacter/llvisualparam.h4
-rw-r--r--linden/indra/llcommon/llenum.h2
-rw-r--r--linden/indra/llcommon/llpreprocessor.h22
-rw-r--r--linden/indra/llcommon/llprocessor.cpp8
-rw-r--r--linden/indra/llcommon/llprocessor.h1
-rw-r--r--linden/indra/llcommon/llskiplist.h12
-rw-r--r--linden/indra/llcommon/llsys.cpp25
-rw-r--r--linden/indra/llcommon/llsys.h12
-rw-r--r--linden/indra/llcommon/llversion.h2
-rw-r--r--linden/indra/llcommon/metaclass.cpp3
-rw-r--r--linden/indra/llcommon/metaproperty.cpp3
-rw-r--r--linden/indra/llcommon/reflective.cpp2
-rw-r--r--linden/indra/llinventory/llparcel.h2
-rw-r--r--linden/indra/llinventory/llparcelflags.h2
-rw-r--r--linden/indra/llmath/llmath.vcproj12
-rw-r--r--linden/indra/llmath/llmath_vc8.vcproj16
-rw-r--r--linden/indra/llmath/lluuid.h2
-rw-r--r--linden/indra/llmath/llv4math.h121
-rw-r--r--linden/indra/llmath/llv4matrix3.h222
-rw-r--r--linden/indra/llmath/llv4matrix4.h251
-rw-r--r--linden/indra/llmath/llv4vector3.h82
-rw-r--r--linden/indra/llmath/llvolume.h2
-rw-r--r--linden/indra/llmath/v4color.h2
-rw-r--r--linden/indra/llmessage/llteleportflags.h1
-rw-r--r--linden/indra/llmessage/machine.h4
-rw-r--r--linden/indra/llmessage/net.cpp5
-rw-r--r--linden/indra/llprimitive/llprimitive.h6
-rw-r--r--linden/indra/llprimitive/lltreeparams.h2
-rw-r--r--linden/indra/llui/llscrolllistctrl.h4
-rw-r--r--linden/indra/llui/lltextbox.cpp7
-rw-r--r--linden/indra/llui/lluictrl.h4
-rw-r--r--linden/indra/llui/llview.cpp4
-rw-r--r--linden/indra/llui/llviewquery.cpp2
-rw-r--r--linden/indra/llxml/llxmlnode.h6
-rw-r--r--linden/indra/lscript/lscript_library.h4
-rw-r--r--linden/indra/newview/English.lproj/InfoPlist.strings4
-rw-r--r--linden/indra/newview/Info-SecondLife.plist2
-rw-r--r--linden/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl26
-rw-r--r--linden/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl54
-rw-r--r--linden/indra/newview/app_settings/shaders/class3/environment/waterF.glsl290
-rw-r--r--linden/indra/newview/files.lst7
-rw-r--r--linden/indra/newview/gpu_table.txt3
-rw-r--r--linden/indra/newview/llagent.cpp4
-rw-r--r--linden/indra/newview/llagent.h4
-rw-r--r--linden/indra/newview/llcape.h3
-rw-r--r--linden/indra/newview/llcontroldef.cpp6
-rw-r--r--linden/indra/newview/llcountdown.cpp106
-rw-r--r--linden/indra/newview/llcountdown.h67
-rw-r--r--linden/indra/newview/lldrawable.h13
-rw-r--r--linden/indra/newview/lldriverparam.h3
-rw-r--r--linden/indra/newview/llface.cpp2
-rw-r--r--linden/indra/newview/llface.h10
-rw-r--r--linden/indra/newview/llfft.cpp577
-rw-r--r--linden/indra/newview/llfft.h105
-rw-r--r--linden/indra/newview/llflexibleobject.cpp4
-rw-r--r--linden/indra/newview/llflexibleobject.h3
-rw-r--r--linden/indra/newview/llfloaterabout.cpp5
-rw-r--r--linden/indra/newview/llfloaterchat.cpp64
-rw-r--r--linden/indra/newview/llfloatereditui.cpp4
-rw-r--r--linden/indra/newview/llfloaterland.cpp10
-rw-r--r--linden/indra/newview/llfloaterregioninfo.cpp5
-rw-r--r--linden/indra/newview/llfloatertopobjects.cpp11
-rw-r--r--linden/indra/newview/llfloatertopobjects.h2
-rw-r--r--linden/indra/newview/llimpanel.h2
-rw-r--r--linden/indra/newview/llpanelcontents.cpp1
-rw-r--r--linden/indra/newview/llpaneldisplay.cpp1
-rw-r--r--linden/indra/newview/llpanelface.cpp1
-rw-r--r--linden/indra/newview/llpanellogin.cpp28
-rw-r--r--linden/indra/newview/llpolymesh.h6
-rw-r--r--linden/indra/newview/llprogressview.cpp2
-rw-r--r--linden/indra/newview/llsrv.cpp232
-rw-r--r--linden/indra/newview/llsrv.h19
-rw-r--r--linden/indra/newview/llstatusbar.cpp85
-rw-r--r--linden/indra/newview/llstatusbar.h7
-rw-r--r--linden/indra/newview/lltexlayer.cpp2
-rw-r--r--linden/indra/newview/lltexlayer.h9
-rw-r--r--linden/indra/newview/lltexturetable.cpp157
-rw-r--r--linden/indra/newview/lltexturetable.h70
-rw-r--r--linden/indra/newview/lltextureview.cpp4
-rw-r--r--linden/indra/newview/llviewerimage.cpp1
-rw-r--r--linden/indra/newview/llviewerimagelist.cpp1
-rw-r--r--linden/indra/newview/llviewerjointattachment.h5
-rw-r--r--linden/indra/newview/llviewerjointmesh.cpp214
-rw-r--r--linden/indra/newview/llviewerjointmesh.h16
-rw-r--r--linden/indra/newview/llviewerjointmesh_sse.cpp114
-rw-r--r--linden/indra/newview/llviewerjointmesh_sse2.cpp116
-rw-r--r--linden/indra/newview/llviewerjointmesh_vec.cpp97
-rw-r--r--linden/indra/newview/llviewermenu.cpp3
-rw-r--r--linden/indra/newview/llviewermenufile.cpp2
-rw-r--r--linden/indra/newview/llviewermessage.cpp8
-rw-r--r--linden/indra/newview/llviewerwindow.cpp2
-rw-r--r--linden/indra/newview/llvosky.h2
-rw-r--r--linden/indra/newview/llvowater.h3
-rw-r--r--linden/indra/newview/llwaterpatch.cpp132
-rw-r--r--linden/indra/newview/llwaterpatch.h317
-rw-r--r--linden/indra/newview/macview.xcodeproj/project.pbxproj648
-rw-r--r--linden/indra/newview/newview.vcproj89
-rw-r--r--linden/indra/newview/newview_vc8.vcproj121
-rw-r--r--linden/indra/newview/releasenotes.txt21
-rw-r--r--linden/indra/newview/res/newViewRes.rc8
-rw-r--r--linden/indra/newview/skins/xui/en-us/alerts.xml25
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_login.xml6
-rw-r--r--linden/indra/newview/skins/xui/en-us/panel_status_bar.xml11
-rw-r--r--linden/indra/newview/viewer.cpp142
-rw-r--r--linden/indra/newview/viewer.h3
-rwxr-xr-xlinden/indra/newview/viewer_manifest.py4
113 files changed, 2736 insertions, 2399 deletions
diff --git a/linden/doc/contributions.txt b/linden/doc/contributions.txt
index cd9745b..4546053 100644
--- a/linden/doc/contributions.txt
+++ b/linden/doc/contributions.txt
@@ -5,7 +5,7 @@ received from them. To see more about these contributions, visit
5http://jira.secondlife.com/ and enter the issue identifier. 5http://jira.secondlife.com/ and enter the issue identifier.
6 6
7Able Whitman - VWR-650 7Able Whitman - VWR-650
8Alissa Sabre - VWR-81, VWR-83, VWR-171, VWR-251, VWR-414, VWR-415, VWR-459, VWR-606, VWR-652 8Alissa Sabre - VWR-81, VWR-83, VWR-171, VWR-251, VWR-414, VWR-415, VWR-459, VWR-606, VWR-652, VWR-1351, VWR-1410
9Argent Stonecutter - VWR-68 9Argent Stonecutter - VWR-68
10Benja Kepler - VWR-746 10Benja Kepler - VWR-746
11Blakar Ogre - VWR-881 11Blakar Ogre - VWR-881
@@ -17,15 +17,17 @@ Duckless Vandyke - VWR-383
17Dylan Haskell - VWR-72 17Dylan Haskell - VWR-72
18Dzonatas Sol - VWR-198, VWR-878 18Dzonatas Sol - VWR-198, VWR-878
19Eddy Stryker - VWR-15, VWR-23 19Eddy Stryker - VWR-15, VWR-23
20Fremont Cunningham - VWR-1147
20Gigs Taggart - VWR-71, VWR-326, VWR-1217 21Gigs Taggart - VWR-71, VWR-326, VWR-1217
21Ginko Bayliss - VWR-4 22Ginko Bayliss - VWR-4
22Hikkoshi Sakai - VWR-429 23Hikkoshi Sakai - VWR-429
23Hiro Sommambulist - VWR-66, VWR-97, VWR-100, VWR-105, VWR-108, VWR-118, VWR-132, VWR-136, VWR-143 24Hiro Sommambulist - VWR-66, VWR-97, VWR-100, VWR-105, VWR-108, VWR-118, VWR-132, VWR-136, VWR-143
25Iskar Ariantho - VWR-1223
24Jacek Antonelli - VWR-165, VWR-188, VWR-427, VWR-597 26Jacek Antonelli - VWR-165, VWR-188, VWR-427, VWR-597
25Joghert LeSabre - VWR-64 27Joghert LeSabre - VWR-64
26Kage Pixel - VWR-11 28Kage Pixel - VWR-11
27Kunnis Basiat - VWR-82 29Kunnis Basiat - VWR-82
28Nicholaz Beresford - VWR-132, VWR-176, VWR-793, VWR-794, VWR-802, VWR-803, VWR-804, VWR-805, VWR-808, VWR-809, VWR-810, VWR-823, VWR-869, VWR-870, VWR-871, VWR-873, VWR-908, VWR-966 30Nicholaz Beresford - VWR-132, VWR-176, VWR-793, VWR-794, VWR-802, VWR-803, VWR-804, VWR-805, VWR-808, VWR-809, VWR-810, VWR-823, VWR-869, VWR-870, VWR-871, VWR-873, VWR-908, VWR-966, VWR-1410, VWR-1418
29Paul Churchill - VWR-20 31Paul Churchill - VWR-20
30Paula Innis - VWR-30, VWR-1049 32Paula Innis - VWR-30, VWR-1049
31Peekay Semyorka - VWR-7, VWR-19, VWR-49, VWR-79 33Peekay Semyorka - VWR-7, VWR-19, VWR-49, VWR-79
@@ -38,6 +40,7 @@ Still Defiant - VWR-207, VWR-446
38Strife Onizuka - SVC-9, VWR-74, VWR-85, VWR-148 40Strife Onizuka - SVC-9, VWR-74, VWR-85, VWR-148
39tenebrous pau - VWR-247 41tenebrous pau - VWR-247
40TBBle Kurosawa - VWR-938, VWR-941, VWR-944 42TBBle Kurosawa - VWR-938, VWR-941, VWR-944
43Tharax Ferraris - VWR-605
41Zi Ree - VWR-671, VWR-682, VWR-1140 44Zi Ree - VWR-671, VWR-682, VWR-1140
42Zipherius Turas - VWR-76, VWR-77 45Zipherius Turas - VWR-76, VWR-77
43 46
diff --git a/linden/indra/SConstruct b/linden/indra/SConstruct
index 68c8fc7..3de5e4f 100644
--- a/linden/indra/SConstruct
+++ b/linden/indra/SConstruct
@@ -184,13 +184,20 @@ for build_target in targets:
184 ./llcommon ./llmath ./llwindow ./llaudio ./llcharacter 184 ./llcommon ./llmath ./llwindow ./llaudio ./llcharacter
185 ./lldatabase ./llhavok ./llimage ./llinventory ./llmedia ./llmessage 185 ./lldatabase ./llhavok ./llimage ./llinventory ./llmedia ./llmessage
186 ./llprimitive ./llrender ./llscene ./llui ./llvfs ./llwindow 186 ./llprimitive ./llrender ./llscene ./llui ./llvfs ./llwindow
187 ./llxml ./lscript 187 ./llxml ./lscript ./lscript/lscript_compile
188 ../libraries/include 188 ../libraries/include
189 ../libraries/include/havok 189 ../libraries/include/havok
190 """ + 190 """ +
191 '../libraries/' + system_str + '/include' ) 191 '../libraries/' + system_str + '/include' )
192 192
193 client_external_libs = ['resolv'] 193 if platform == 'linux' and build_target == 'client':
194 if arch == 'x86_64' and os.path.exists('/usr/lib64'):
195 client_external_libs = [File('/usr/lib64/libresolv.a')]
196 else:
197 client_external_libs = ['llresolv6']
198 else:
199 client_external_libs = ['resolv']
200
194 system_link_flags = '' 201 system_link_flags = ''
195 202
196 if platform != 'linux' and build_target == 'client' and enable_mozlib: 203 if platform != 'linux' and build_target == 'client' and enable_mozlib:
@@ -240,7 +247,7 @@ for build_target in targets:
240 cppflags += server_cppflags + ' ' 247 cppflags += server_cppflags + ' '
241 else: 248 else:
242 # Viewer flags 249 # Viewer flags
243 cflags += '-falign-loops=16 -fno-math-errno -fexceptions -fsigned-char -fno-strict-aliasing -ffast-math ' 250 cflags += '-fno-math-errno -fexceptions -fsigned-char -fno-strict-aliasing '
244 cppflags += '-DLL_MESA_HEADLESS=0 -DLL_MESA=0 ' 251 cppflags += '-DLL_MESA_HEADLESS=0 -DLL_MESA=0 '
245 try: 252 try:
246 client_cppflags = os.environ['CLIENT_CPPFLAGS'] 253 client_cppflags = os.environ['CLIENT_CPPFLAGS']
@@ -283,32 +290,44 @@ for build_target in targets:
283 cflags += '-x c++ -arch ppc -pipe -Wno-trigraphs -fpascal-strings -faltivec -fasm-blocks -g -fmessage-length=0 -mtune=G4 -Wno-deprecated-declarations -Wno-invalid-offsetof -mmacosx-version-min=10.3 -Wmost -Wno-sign-compare -Wno-switch -fconstant-cfstrings -ffor-scope -Wno-reorder ' 290 cflags += '-x c++ -arch ppc -pipe -Wno-trigraphs -fpascal-strings -faltivec -fasm-blocks -g -fmessage-length=0 -mtune=G4 -Wno-deprecated-declarations -Wno-invalid-offsetof -mmacosx-version-min=10.3 -Wmost -Wno-sign-compare -Wno-switch -fconstant-cfstrings -ffor-scope -Wno-reorder '
284 cppflags += '-x c++ -DLL_DARWIN=1 -fpch-preprocess -F./newview/build/Deployment -fconstant-cfstrings -isysroot /Developer/SDKs/MacOSX10.3.9.sdk ' 291 cppflags += '-x c++ -DLL_DARWIN=1 -fpch-preprocess -F./newview/build/Deployment -fconstant-cfstrings -isysroot /Developer/SDKs/MacOSX10.3.9.sdk '
285 292
293 if standalone:
294 gcc_bin = 'g++'
295 elif build_target != 'client':
296 gcc_bin = 'g++-3.3'
297 elif arch == 'x86_64cross':
298 gcc_bin = '/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-gcc'
299 strip_cmd = '/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/bin/strip -S -o $TARGET $SOURCE'
300
301 else:
302 gcc_bin = 'g++-3.4'
303
304 # Are we using the Intel compiler?
305 if gcc_bin.find('icpc') >= 0:
306 cflags += '-wr193,654,981,1125 -w1 '
307 elif build_target == 'client':
308 cflags += '-falign-loops=16 -ffast-math '
309
286 cxxflags += cflags 310 cxxflags += cflags
287 311
288 ### Build type-specific flags ### 312 ### Build type-specific flags ###
289 313
290 debug_cflags = cflags + '-fno-inline -O0 ' 314 debug_cflags = cflags + '-fno-inline -O0 '
315 debug_cxxflags = cxxflags + '-fno-inline -O0 '
291 debug_cppflags = cppflags + '-D_DEBUG -DLL_DEBUG=1 ' 316 debug_cppflags = cppflags + '-D_DEBUG -DLL_DEBUG=1 '
292 debug_cxxflags = cxxflags
293 release_cflags = cflags + '-O2 ' 317 release_cflags = cflags + '-O2 '
318 release_cxxflags = cxxflags + '-O2 '
294 release_cppflags = cppflags + '-DNDEBUG -DLL_RELEASE=1 ' 319 release_cppflags = cppflags + '-DNDEBUG -DLL_RELEASE=1 '
295 release_cxxflags = cxxflags
296 releasenoopt_cflags = cflags + '-O0 ' 320 releasenoopt_cflags = cflags + '-O0 '
321 releasenoopt_cxxflags = cxxflags + '-O0 '
297 releasenoopt_cppflags = cppflags + '-DNDEBUG -DLL_RELEASE=1 ' 322 releasenoopt_cppflags = cppflags + '-DNDEBUG -DLL_RELEASE=1 '
298 releasenoopt_cxxflags = cxxflags
299 releasefordownload_cflags = cflags + '-O2 ' 323 releasefordownload_cflags = cflags + '-O2 '
324 releasefordownload_cxxflags = cxxflags + '-O2 '
300 releasefordownload_cppflags = cppflags + '-DNDEBUG -DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 ' 325 releasefordownload_cppflags = cppflags + '-DNDEBUG -DLL_RELEASE=1 -DLL_RELEASE_FOR_DOWNLOAD=1 '
301 releasefordownload_cxxflags = cxxflags
302 326
303 ################ 327 ################
304 # ENVIRONMENT # 328 # ENVIRONMENT #
305 ################ 329 ################
306 330
307 if standalone:
308 gcc_bin = 'g++'
309 else:
310 gcc_bin = 'g++-3.4'
311
312 # If you strip more aggressively than -S then the quality of crash- 331 # If you strip more aggressively than -S then the quality of crash-
313 # logger backtraces deteriorates. 332 # logger backtraces deteriorates.
314 strip_cmd = 'strip -S -o $TARGET $SOURCE' 333 strip_cmd = 'strip -S -o $TARGET $SOURCE'
@@ -324,13 +343,6 @@ for build_target in targets:
324 else: 343 else:
325 hidesyms_cmd = 'cp -f $SOURCE $TARGET' 344 hidesyms_cmd = 'cp -f $SOURCE $TARGET'
326 345
327 if build_target != 'client':
328 gcc_bin = 'g++-3.3'
329
330 if arch == 'x86_64cross':
331 gcc_bin = '/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/bin/x86_64-unknown-linux-gnu-gcc'
332 strip_cmd = '/opt/crosstool/gcc-4.0.2-glibc-2.3.6/x86_64-unknown-linux-gnu/x86_64-unknown-linux-gnu/bin/strip -S -o $TARGET $SOURCE'
333
334 compiler = gcc_bin 346 compiler = gcc_bin
335 compiler_no_distcc = compiler 347 compiler_no_distcc = compiler
336 if enable_distcc: 348 if enable_distcc:
@@ -380,6 +392,18 @@ for build_target in targets:
380 392
381 env_no_distcc = env.Copy(CXX = compiler_no_distcc) 393 env_no_distcc = env.Copy(CXX = compiler_no_distcc)
382 394
395 vec_match = re.compile("_vec\.")
396 env_vec = env.Copy() # _vec is for default vector optimizations or none
397
398 sse_match = re.compile("_sse\.")
399 env_sse = env.Copy()
400 env_sse.Append(CPPFLAGS = ' -msse -mfpmath=sse')
401
402 sse2_match = re.compile("_sse2\.")
403 env_sse2 = env.Copy()
404 env_sse2.Append(CPPFLAGS = ' -msse2 -mfpmath=sse')
405
406
383 ### Distributed build hosts ### 407 ### Distributed build hosts ###
384 408
385 if enable_distcc: 409 if enable_distcc:
@@ -407,6 +431,21 @@ for build_target in targets:
407 # HELPER FUNCTIONS # 431 # HELPER FUNCTIONS #
408 ##################### 432 #####################
409 433
434 ## handle special compiler modes
435
436 def file_obj(file):
437 if file == 'newsim/lltask.cpp':
438 print 'Found lltask!'
439 return env_no_distcc.Object(file)
440 elif vec_match.search(file) != None:
441 return env_vec.Object(file)
442 elif sse_match.search(file) != None:
443 return env_sse.Object(file)
444 elif sse2_match.search(file) != None:
445 return env_sse2.Object(file)
446 else:
447 return file
448
410 ### Load a files.lst and files.PLATFORM.lst for each module ### 449 ### Load a files.lst and files.PLATFORM.lst for each module ###
411 450
412 def load_files(module, source_fname): 451 def load_files(module, source_fname):
@@ -417,12 +456,7 @@ for build_target in targets:
417 for x in list: 456 for x in list:
418 if not x.startswith('#'): 457 if not x.startswith('#'):
419 file = os.path.join(build_dir, x) 458 file = os.path.join(build_dir, x)
420 if x == 'newsim/lltask.cpp': 459 new_list.append(file_obj(file))
421 print 'Found lltask!'
422 obj = env_no_distcc.Object(file)
423 new_list.append(obj)
424 else:
425 new_list.append(file)
426 list_file.close() 460 list_file.close()
427 except IOError, val: 461 except IOError, val:
428 print 'Error: unable to open file list',source_fname, 462 print 'Error: unable to open file list',source_fname,
@@ -434,7 +468,7 @@ for build_target in targets:
434 list = Split(platform_list_file.read()) 468 list = Split(platform_list_file.read())
435 for x in list: 469 for x in list:
436 file = os.path.join(build_dir, x) 470 file = os.path.join(build_dir, x)
437 new_list.append(file) 471 new_list.append(file_obj(file))
438 platform_list_file.close() 472 platform_list_file.close()
439 except IOError: 473 except IOError:
440 return new_list 474 return new_list
@@ -559,7 +593,8 @@ for build_target in targets:
559 if arch != 'x86_64' and arch != 'x86_64cross': 593 if arch != 'x86_64' and arch != 'x86_64cross':
560 if enable_fmod: 594 if enable_fmod:
561 external_libs += [ 'fmod-3.75' ] 595 external_libs += [ 'fmod-3.75' ]
562 external_libs += ['tcmalloc', 'stacktrace'] 596 if buildtype == 'debug':
597 external_libs += ['tcmalloc', 'stacktrace']
563 598
564 external_libs.remove('cares') 599 external_libs.remove('cares')
565 600
diff --git a/linden/indra/indra_complete/indra_complete.sln b/linden/indra/indra_complete/indra_complete.sln
index a56a889..27e147e 100644
--- a/linden/indra/indra_complete/indra_complete.sln
+++ b/linden/indra/indra_complete/indra_complete.sln
@@ -141,12 +141,14 @@ EndProject
141 ProjectSection(ProjectDependencies) = postProject 141 ProjectSection(ProjectDependencies) = postProject
142 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} 142 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
143 {44CE6D82-7320-4609-8FC3-5965C19F4808} = {44CE6D82-7320-4609-8FC3-5965C19F4808} 143 {44CE6D82-7320-4609-8FC3-5965C19F4808} = {44CE6D82-7320-4609-8FC3-5965C19F4808}
144 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E} = {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}
144 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} 145 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
145 EndProjectSection 146 EndProjectSection
146EndProject 147EndProject
147 ProjectSection(ProjectDependencies) = postProject 148 ProjectSection(ProjectDependencies) = postProject
148 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} 149 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F} = {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}
149 {F882263E-4F2A-43D9-A45A-FA4C8EC66552} = {F882263E-4F2A-43D9-A45A-FA4C8EC66552} 150 {F882263E-4F2A-43D9-A45A-FA4C8EC66552} = {F882263E-4F2A-43D9-A45A-FA4C8EC66552}
151 {BFA102B0-C891-4E13-B1CF-C2F28073DA8E} = {BFA102B0-C891-4E13-B1CF-C2F28073DA8E}
150 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} 152 {E87FD9BE-BE42-4EA3-BF4D-D992223046D9} = {E87FD9BE-BE42-4EA3-BF4D-D992223046D9}
151 EndProjectSection 153 EndProjectSection
152EndProject 154EndProject
@@ -262,6 +264,8 @@ Global
262 Debug = Debug 264 Debug = Debug
263 Release = Release 265 Release = Release
264 EndGlobalSection 266 EndGlobalSection
267 GlobalSection(ProjectDependencies) = postSolution
268 EndGlobalSection
265 GlobalSection(ProjectConfiguration) = postSolution 269 GlobalSection(ProjectConfiguration) = postSolution
266 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.ActiveCfg = Debug|Win32 270 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.ActiveCfg = Debug|Win32
267 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.Build.0 = Debug|Win32 271 {7BCB4B2C-8378-4186-88EA-5742B5ABE17F}.Debug.Build.0 = Debug|Win32
diff --git a/linden/indra/llcharacter/llheadrotmotion.cpp b/linden/indra/llcharacter/llheadrotmotion.cpp
index cfab048..73f8e8b 100644
--- a/linden/indra/llcharacter/llheadrotmotion.cpp
+++ b/linden/indra/llcharacter/llheadrotmotion.cpp
@@ -438,6 +438,10 @@ BOOL LLEyeMotion::onUpdate(F32 time, U8* joint_mask)
438 up.setVec(eye_look_at % left); 438 up.setVec(eye_look_at % left);
439 439
440 target_eye_rot = LLQuaternion(eye_look_at, left, up); 440 target_eye_rot = LLQuaternion(eye_look_at, left, up);
441 // convert target rotation to head-local coordinates
442 target_eye_rot *= ~mHeadJoint->getWorldRotation();
443 // constrain target orientation to be in front of avatar's face
444 target_eye_rot.constrain(EYE_ROT_LIMIT_ANGLE);
441 445
442 // calculate vergence 446 // calculate vergence
443 F32 interocular_dist = (mLeftEyeState.getJoint()->getWorldPosition() - mRightEyeState.getJoint()->getWorldPosition()).magVec(); 447 F32 interocular_dist = (mLeftEyeState.getJoint()->getWorldPosition() - mRightEyeState.getJoint()->getWorldPosition()).magVec();
@@ -446,7 +450,7 @@ BOOL LLEyeMotion::onUpdate(F32 time, U8* joint_mask)
446 } 450 }
447 else 451 else
448 { 452 {
449 target_eye_rot = mHeadJoint->getWorldRotation(); 453 target_eye_rot = LLQuaternion::DEFAULT;
450 vergence = 0.f; 454 vergence = 0.f;
451 } 455 }
452 456
@@ -488,18 +492,8 @@ BOOL LLEyeMotion::onUpdate(F32 time, U8* joint_mask)
488 vergence_quat.transQuat(); 492 vergence_quat.transQuat();
489 right_eye_rot = vergence_quat * eye_jitter_rot * right_eye_rot; 493 right_eye_rot = vergence_quat * eye_jitter_rot * right_eye_rot;
490 494
491 //set final eye rotations 495 mLeftEyeState.setRotation( left_eye_rot );
492 // start with left 496 mRightEyeState.setRotation( right_eye_rot );
493 LLQuaternion tQw = mLeftEyeState.getJoint()->getParent()->getWorldRotation();
494 LLQuaternion tQh = left_eye_rot * ~tQw;
495 tQh.constrain(EYE_ROT_LIMIT_ANGLE);
496 mLeftEyeState.setRotation( tQh );
497
498 // now do right eye
499 tQw = mRightEyeState.getJoint()->getParent()->getWorldRotation();
500 tQh = right_eye_rot * ~tQw;
501 tQh.constrain(EYE_ROT_LIMIT_ANGLE);
502 mRightEyeState.setRotation( tQh );
503 497
504 return TRUE; 498 return TRUE;
505} 499}
diff --git a/linden/indra/llcharacter/lljointstate.h b/linden/indra/llcharacter/lljointstate.h
index 8b55410..5311374 100644
--- a/linden/indra/llcharacter/lljointstate.h
+++ b/linden/indra/llcharacter/lljointstate.h
@@ -118,7 +118,7 @@ public:
118 void setScale( const LLVector3& scale ) { llassert(mUsage & SCALE); mScale = scale; } 118 void setScale( const LLVector3& scale ) { llassert(mUsage & SCALE); mScale = scale; }
119 119
120 // get/set priority 120 // get/set priority
121 const LLJoint::JointPriority getPriority() { return mPriority; } 121 LLJoint::JointPriority getPriority() { return mPriority; }
122 void setPriority( const LLJoint::JointPriority priority ) { mPriority = priority; } 122 void setPriority( const LLJoint::JointPriority priority ) { mPriority = priority; }
123}; 123};
124 124
diff --git a/linden/indra/llcharacter/llmotioncontroller.cpp b/linden/indra/llcharacter/llmotioncontroller.cpp
index 3ef35ec..2427fd8 100644
--- a/linden/indra/llcharacter/llmotioncontroller.cpp
+++ b/linden/indra/llcharacter/llmotioncontroller.cpp
@@ -360,7 +360,7 @@ BOOL LLMotionController::startMotion(const LLUUID &id, F32 start_offset)
360 { 360 {
361 if (motion->isStopped()) // motion has been stopped 361 if (motion->isStopped()) // motion has been stopped
362 { 362 {
363 deactivateMotion(motion); 363 deactivateMotion(motion, false);
364 } 364 }
365 else if (mTime < motion->mSendStopTimestamp) // motion is still active 365 else if (mTime < motion->mSendStopTimestamp) // motion is still active
366 { 366 {
@@ -396,7 +396,7 @@ BOOL LLMotionController::stopMotionLocally(const LLUUID &id, BOOL stop_immediate
396 396
397 if (stop_immediate) 397 if (stop_immediate)
398 { 398 {
399 deactivateMotion(motion); 399 deactivateMotion(motion, false);
400 } 400 }
401 return TRUE; 401 return TRUE;
402 } 402 }
@@ -492,7 +492,7 @@ void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_ty
492 { 492 {
493 if (motionp->isStopped() && mTime > motionp->getStopTime() + motionp->getEaseOutDuration()) 493 if (motionp->isStopped() && mTime > motionp->getStopTime() + motionp->getEaseOutDuration())
494 { 494 {
495 deactivateMotion(motionp); 495 deactivateMotion(motionp, false);
496 } 496 }
497 else if (motionp->isStopped() && mTime > motionp->getStopTime()) 497 else if (motionp->isStopped() && mTime > motionp->getStopTime())
498 { 498 {
@@ -546,8 +546,7 @@ void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_ty
546 { 546 {
547 if (motionp->isStopped() && mTime > motionp->getStopTime() + motionp->getEaseOutDuration()) 547 if (motionp->isStopped() && mTime > motionp->getStopTime() + motionp->getEaseOutDuration())
548 { 548 {
549 posep->setWeight(0.f); 549 deactivateMotion(motionp, true);
550 deactivateMotion(motionp);
551 } 550 }
552 continue; 551 continue;
553 } 552 }
@@ -573,8 +572,7 @@ void LLMotionController::updateMotionsByType(LLMotion::LLMotionBlendType anim_ty
573 } 572 }
574 else 573 else
575 { 574 {
576 posep->setWeight(0.f); 575 deactivateMotion(motionp, true);
577 deactivateMotion(motionp);
578 continue; 576 continue;
579 } 577 }
580 } 578 }
@@ -822,8 +820,15 @@ BOOL LLMotionController::activateMotion(LLMotion *motion, F32 time)
822//----------------------------------------------------------------------------- 820//-----------------------------------------------------------------------------
823// deactivateMotion() 821// deactivateMotion()
824//----------------------------------------------------------------------------- 822//-----------------------------------------------------------------------------
825BOOL LLMotionController::deactivateMotion(LLMotion *motion) 823BOOL LLMotionController::deactivateMotion(LLMotion *motion, bool remove_weight)
826{ 824{
825 if( remove_weight )
826 {
827 // immediately remove pose weighting instead of letting it time out
828 LLPose *posep = motion->getPose();
829 posep->setWeight(0.f);
830 }
831
827 motion->deactivate(); 832 motion->deactivate();
828 mActiveMotions.remove(motion); 833 mActiveMotions.remove(motion);
829 834
diff --git a/linden/indra/llcharacter/llmotioncontroller.h b/linden/indra/llcharacter/llmotioncontroller.h
index 94149da..959a16a 100644
--- a/linden/indra/llcharacter/llmotioncontroller.h
+++ b/linden/indra/llcharacter/llmotioncontroller.h
@@ -182,7 +182,7 @@ protected:
182 void deleteAllMotions(); 182 void deleteAllMotions();
183 void addLoadedMotion(LLMotion *motion); 183 void addLoadedMotion(LLMotion *motion);
184 BOOL activateMotion(LLMotion *motion, F32 time); 184 BOOL activateMotion(LLMotion *motion, F32 time);
185 BOOL deactivateMotion(LLMotion *motion); 185 BOOL deactivateMotion(LLMotion *motion, bool remove_weight);
186 void updateRegularMotions(); 186 void updateRegularMotions();
187 void updateAdditiveMotions(); 187 void updateAdditiveMotions();
188 void resetJointSignatures(); 188 void resetJointSignatures();
diff --git a/linden/indra/llcharacter/llvisualparam.h b/linden/indra/llcharacter/llvisualparam.h
index ec19fa0..ddd0469 100644
--- a/linden/indra/llcharacter/llvisualparam.h
+++ b/linden/indra/llcharacter/llvisualparam.h
@@ -108,7 +108,7 @@ public:
108 virtual void stopAnimating(BOOL set_by_user); 108 virtual void stopAnimating(BOOL set_by_user);
109 109
110 // Interface methods 110 // Interface methods
111 const S32 getID() { return mID; } 111 S32 getID() { return mID; }
112 void setID(S32 id) { llassert(!mInfo); mID = id; } 112 void setID(S32 id) { llassert(!mInfo); mID = id; }
113 113
114 const LLString& getName() const { return mInfo->mName; } 114 const LLString& getName() const { return mInfo->mName; }
@@ -120,7 +120,7 @@ public:
120 void setMaxDisplayName(const char* s) { mInfo->mMaxName = s; } 120 void setMaxDisplayName(const char* s) { mInfo->mMaxName = s; }
121 void setMinDisplayName(const char* s) { mInfo->mMinName = s; } 121 void setMinDisplayName(const char* s) { mInfo->mMinName = s; }
122 122
123 const EVisualParamGroup getGroup() { return mInfo->mGroup; } 123 EVisualParamGroup getGroup() { return mInfo->mGroup; }
124 F32 getMinWeight() { return mInfo->mMinWeight; } 124 F32 getMinWeight() { return mInfo->mMinWeight; }
125 F32 getMaxWeight() { return mInfo->mMaxWeight; } 125 F32 getMaxWeight() { return mInfo->mMaxWeight; }
126 F32 getDefaultWeight() { return mInfo->mDefaultWeight; } 126 F32 getDefaultWeight() { return mInfo->mDefaultWeight; }
diff --git a/linden/indra/llcommon/llenum.h b/linden/indra/llcommon/llenum.h
index 310ccd2..3e75a22 100644
--- a/linden/indra/llcommon/llenum.h
+++ b/linden/indra/llcommon/llenum.h
@@ -52,7 +52,7 @@ public:
52 } 52 }
53 } 53 }
54 54
55 const U32 operator[](std::string str) 55 U32 operator[](std::string str)
56 { 56 {
57 std::map<const std::string, const U32>::iterator itor; 57 std::map<const std::string, const U32>::iterator itor;
58 itor = mEnumMap.find(str); 58 itor = mEnumMap.find(str);
diff --git a/linden/indra/llcommon/llpreprocessor.h b/linden/indra/llcommon/llpreprocessor.h
index 495b9e8..76145c5 100644
--- a/linden/indra/llcommon/llpreprocessor.h
+++ b/linden/indra/llcommon/llpreprocessor.h
@@ -71,12 +71,22 @@
71 #define MOZILLA_INTERNAL_API 1 71 #define MOZILLA_INTERNAL_API 1
72#endif 72#endif
73 73
74// Deal with minor differences on Unixy OSes. 74// Figure out differences between compilers
75#if LL_DARWIN || LL_LINUX 75#if defined(__GNUC__)
76 #define GCC_VERSION (__GNUC__ * 10000 \ 76 #define GCC_VERSION (__GNUC__ * 10000 \
77 + __GNUC_MINOR__ * 100 \ 77 + __GNUC_MINOR__ * 100 \
78 + __GNUC_PATCHLEVEL__) 78 + __GNUC_PATCHLEVEL__)
79 #ifndef LL_GNUC
80 #define LL_GNUC 1
81 #endif
82#elif defined(__MSVC_VER__) || defined(_MSC_VER)
83 #ifndef LL_MSVC
84 #define LL_MSVC 1
85 #endif
86#endif
79 87
88// Deal with minor differences on Unixy OSes.
89#if LL_DARWIN || LL_LINUX
80 // Different name, same functionality. 90 // Different name, same functionality.
81 #define stricmp strcasecmp 91 #define stricmp strcasecmp
82 #define strnicmp strncasecmp 92 #define strnicmp strncasecmp
@@ -89,9 +99,9 @@
89#endif 99#endif
90 100
91// Deal with the differeneces on Windows 101// Deal with the differeneces on Windows
92#if LL_WINDOWS 102#if LL_MSVC
93#define snprintf safe_snprintf /* Flawfinder: ignore */ 103#define snprintf safe_snprintf /* Flawfinder: ignore */
94#endif // LL_WINDOWS 104#endif // LL_MSVC
95 105
96// Static linking with apr on windows needs to be declared. 106// Static linking with apr on windows needs to be declared.
97#ifdef LL_WINDOWS 107#ifdef LL_WINDOWS
@@ -110,7 +120,7 @@
110 120
111 121
112// Deal with VC6 problems 122// Deal with VC6 problems
113#if defined(LL_WINDOWS) 123#if LL_MSVC
114#pragma warning( 3 : 4701 ) // "local variable used without being initialized" Treat this as level 3, not level 4. 124#pragma warning( 3 : 4701 ) // "local variable used without being initialized" Treat this as level 3, not level 4.
115#pragma warning( 3 : 4702 ) // "unreachable code" Treat this as level 3, not level 4. 125#pragma warning( 3 : 4702 ) // "unreachable code" Treat this as level 3, not level 4.
116#pragma warning( 3 : 4189 ) // "local variable initialized but not referenced" Treat this as level 3, not level 4. 126#pragma warning( 3 : 4189 ) // "local variable initialized but not referenced" Treat this as level 3, not level 4.
@@ -121,6 +131,6 @@
121#pragma warning( disable : 4503 ) // 'decorated name length exceeded, name was truncated'. Does not seem to affect compilation. 131#pragma warning( disable : 4503 ) // 'decorated name length exceeded, name was truncated'. Does not seem to affect compilation.
122#pragma warning( disable : 4800 ) // 'BOOL' : forcing value to bool 'true' or 'false' (performance warning) 132#pragma warning( disable : 4800 ) // 'BOOL' : forcing value to bool 'true' or 'false' (performance warning)
123#pragma warning( disable : 4996 ) // warning: deprecated 133#pragma warning( disable : 4996 ) // warning: deprecated
124#endif // LL_WINDOWS 134#endif // LL_MSVC
125 135
126#endif // not LL_LINDEN_PREPROCESSOR_H 136#endif // not LL_LINDEN_PREPROCESSOR_H
diff --git a/linden/indra/llcommon/llprocessor.cpp b/linden/indra/llcommon/llprocessor.cpp
index bd21351..e76294d 100644
--- a/linden/indra/llcommon/llprocessor.cpp
+++ b/linden/indra/llcommon/llprocessor.cpp
@@ -1538,6 +1538,7 @@ void CProcessor::GetStandardProcessorExtensions()
1538 CPUInfo._Ext.FXSR_FastStreamingSIMD_ExtensionsSaveRestore = CheckBit(edxreg, 24); 1538 CPUInfo._Ext.FXSR_FastStreamingSIMD_ExtensionsSaveRestore = CheckBit(edxreg, 24);
1539 CPUInfo._Ext.SSE_StreamingSIMD_Extensions = CheckBit(edxreg, 25); 1539 CPUInfo._Ext.SSE_StreamingSIMD_Extensions = CheckBit(edxreg, 25);
1540 CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions = CheckBit(edxreg, 26); 1540 CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions = CheckBit(edxreg, 26);
1541 CPUInfo._Ext.Altivec_Extensions = false;
1541 CPUInfo._Ext.SS_SelfSnoop = CheckBit(edxreg, 27); 1542 CPUInfo._Ext.SS_SelfSnoop = CheckBit(edxreg, 27);
1542 CPUInfo._Ext.HT_HyperThreading = CheckBit(edxreg, 28); 1543 CPUInfo._Ext.HT_HyperThreading = CheckBit(edxreg, 28);
1543 CPUInfo._Ext.HT_HyterThreadingSiblings = (ebxreg >> 16) & 0xFF; 1544 CPUInfo._Ext.HT_HyterThreadingSiblings = (ebxreg >> 16) & 0xFF;
@@ -1891,11 +1892,12 @@ const ProcessorInfo *CProcessor::GetCPUInfo()
1891 break; 1892 break;
1892 } 1893 }
1893 1894
1894 // It's kinda like MMX or SSE...
1895 CPUInfo._Ext.EMMX_MultimediaExtensions = 1895 CPUInfo._Ext.EMMX_MultimediaExtensions =
1896 CPUInfo._Ext.MMX_MultimediaExtensions = 1896 CPUInfo._Ext.MMX_MultimediaExtensions =
1897 CPUInfo._Ext.SSE_StreamingSIMD_Extensions = 1897 CPUInfo._Ext.SSE_StreamingSIMD_Extensions =
1898 CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions = hasFeature("hw.optional.altivec"); 1898 CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions = false;
1899
1900 CPUInfo._Ext.Altivec_Extensions = hasFeature("hw.optional.altivec");
1899 1901
1900#endif 1902#endif
1901 1903
@@ -1912,6 +1914,7 @@ const ProcessorInfo *CProcessor::GetCPUInfo()
1912 CPUInfo._Ext.MMX_MultimediaExtensions = hasFeature("hw.optional.mmx"); 1914 CPUInfo._Ext.MMX_MultimediaExtensions = hasFeature("hw.optional.mmx");
1913 CPUInfo._Ext.SSE_StreamingSIMD_Extensions = hasFeature("hw.optional.sse"); 1915 CPUInfo._Ext.SSE_StreamingSIMD_Extensions = hasFeature("hw.optional.sse");
1914 CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions = hasFeature("hw.optional.sse2"); 1916 CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions = hasFeature("hw.optional.sse2");
1917 CPUInfo._Ext.Altivec_Extensions = false;
1915 CPUInfo._Ext.AA64_AMD64BitArchitecture = hasFeature("hw.optional.x86_64"); 1918 CPUInfo._Ext.AA64_AMD64BitArchitecture = hasFeature("hw.optional.x86_64");
1916 1919
1917#endif 1920#endif
@@ -2065,6 +2068,7 @@ bool CProcessor::CPUInfoToText(char *strBuffer, unsigned int uiMaxLen)
2065 BOOLADD("SS Self Snoop: ", CPUInfo._Ext.SS_SelfSnoop); 2068 BOOLADD("SS Self Snoop: ", CPUInfo._Ext.SS_SelfSnoop);
2066 BOOLADD("SSE Streaming SIMD Extensions: ", CPUInfo._Ext.SSE_StreamingSIMD_Extensions); 2069 BOOLADD("SSE Streaming SIMD Extensions: ", CPUInfo._Ext.SSE_StreamingSIMD_Extensions);
2067 BOOLADD("SSE2 Streaming SIMD 2 Extensions: ", CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions); 2070 BOOLADD("SSE2 Streaming SIMD 2 Extensions: ", CPUInfo._Ext.SSE2_StreamingSIMD2_Extensions);
2071 BOOLADD("ALTVEC Altivec Extensions: ", CPUInfo._Ext.Altivec_Extensions);
2068 BOOLADD("TM Thermal Monitor: ", CPUInfo._Ext.TM_ThermalMonitor); 2072 BOOLADD("TM Thermal Monitor: ", CPUInfo._Ext.TM_ThermalMonitor);
2069 BOOLADD("TSC Time Stamp Counter: ", CPUInfo._Ext.TSC_TimeStampCounter); 2073 BOOLADD("TSC Time Stamp Counter: ", CPUInfo._Ext.TSC_TimeStampCounter);
2070 BOOLADD("VME Virtual 8086 Mode Enhancements: ", CPUInfo._Ext.VME_Virtual8086ModeEnhancements); 2074 BOOLADD("VME Virtual 8086 Mode Enhancements: ", CPUInfo._Ext.VME_Virtual8086ModeEnhancements);
diff --git a/linden/indra/llcommon/llprocessor.h b/linden/indra/llcommon/llprocessor.h
index fd9a5da..6db9328 100644
--- a/linden/indra/llcommon/llprocessor.h
+++ b/linden/indra/llcommon/llprocessor.h
@@ -71,6 +71,7 @@ typedef struct ProcessorExtensions
71 bool FXSR_FastStreamingSIMD_ExtensionsSaveRestore; 71 bool FXSR_FastStreamingSIMD_ExtensionsSaveRestore;
72 bool SSE_StreamingSIMD_Extensions; 72 bool SSE_StreamingSIMD_Extensions;
73 bool SSE2_StreamingSIMD2_Extensions; 73 bool SSE2_StreamingSIMD2_Extensions;
74 bool Altivec_Extensions;
74 bool SS_SelfSnoop; 75 bool SS_SelfSnoop;
75 bool HT_HyperThreading; 76 bool HT_HyperThreading;
76 unsigned int HT_HyterThreadingSiblings; 77 unsigned int HT_HyterThreadingSiblings;
diff --git a/linden/indra/llcommon/llskiplist.h b/linden/indra/llcommon/llskiplist.h
index be3385d..40d0c8a 100644
--- a/linden/indra/llcommon/llskiplist.h
+++ b/linden/indra/llcommon/llskiplist.h
@@ -28,11 +28,10 @@
28#ifndef LL_LLSKIPLIST_H 28#ifndef LL_LLSKIPLIST_H
29#define LL_LLSKIPLIST_H 29#define LL_LLSKIPLIST_H
30 30
31#include "llerror.h" 31#include "llrand.h"
32//#include "vmath.h"
33 32
34// NOTA BENE: Insert first needs to be < NOT <= 33// NOTA BENE: Insert first needs to be < NOT <=
35 34// Binary depth must be >= 2
36template <class DATA_TYPE, S32 BINARY_DEPTH = 10> 35template <class DATA_TYPE, S32 BINARY_DEPTH = 10>
37class LLSkipList 36class LLSkipList
38{ 37{
@@ -144,14 +143,11 @@ private:
144// Implementation 143// Implementation
145// 144//
146 145
146
147// Binary depth must be >= 2
147template <class DATA_TYPE, S32 BINARY_DEPTH> 148template <class DATA_TYPE, S32 BINARY_DEPTH>
148inline void LLSkipList<DATA_TYPE, BINARY_DEPTH>::init() 149inline void LLSkipList<DATA_TYPE, BINARY_DEPTH>::init()
149{ 150{
150 if (BINARY_DEPTH < 2)
151 {
152 llerrs << "Trying to create skip list with too little depth, "
153 "must be 2 or greater" << llendl;
154 }
155 S32 i; 151 S32 i;
156 for (i = 0; i < BINARY_DEPTH; i++) 152 for (i = 0; i < BINARY_DEPTH; i++)
157 { 153 {
diff --git a/linden/indra/llcommon/llsys.cpp b/linden/indra/llcommon/llsys.cpp
index 48f2474..33e5cda 100644
--- a/linden/indra/llcommon/llsys.cpp
+++ b/linden/indra/llcommon/llsys.cpp
@@ -304,12 +304,33 @@ LLCPUInfo::LLCPUInfo()
304{ 304{
305 CProcessor proc; 305 CProcessor proc;
306 const ProcessorInfo* info = proc.GetCPUInfo(); 306 const ProcessorInfo* info = proc.GetCPUInfo();
307 mHasSSE = (info->_Ext.SSE_StreamingSIMD_Extensions != 0); 307 // proc.WriteInfoTextFile("procInfo.txt");
308 mHasSSE2 = (info->_Ext.SSE2_StreamingSIMD2_Extensions != 0); 308 mHasSSE = info->_Ext.SSE_StreamingSIMD_Extensions;
309 mHasSSE2 = info->_Ext.SSE2_StreamingSIMD2_Extensions;
310 mHasAltivec = info->_Ext.Altivec_Extensions;
309 mCPUMhz = (S32)(proc.GetCPUFrequency(50)/1000000.0); 311 mCPUMhz = (S32)(proc.GetCPUFrequency(50)/1000000.0);
310 mFamily.assign( info->strFamily ); 312 mFamily.assign( info->strFamily );
311} 313}
312 314
315bool LLCPUInfo::hasAltivec() const
316{
317 return mHasAltivec;
318}
319
320bool LLCPUInfo::hasSSE() const
321{
322 return mHasSSE;
323}
324
325bool LLCPUInfo::hasSSE2() const
326{
327 return mHasSSE2;
328}
329
330S32 LLCPUInfo::getMhz() const
331{
332 return mCPUMhz;
333}
313 334
314std::string LLCPUInfo::getCPUString() const 335std::string LLCPUInfo::getCPUString() const
315{ 336{
diff --git a/linden/indra/llcommon/llsys.h b/linden/indra/llcommon/llsys.h
index 2047d9a..83ea081 100644
--- a/linden/indra/llcommon/llsys.h
+++ b/linden/indra/llcommon/llsys.h
@@ -72,16 +72,18 @@ public:
72 72
73 std::string getCPUString() const; 73 std::string getCPUString() const;
74 74
75 BOOL hasSSE() const { return mHasSSE; } 75 bool hasAltivec() const;
76 BOOL hasSSE2() const { return mHasSSE2; } 76 bool hasSSE() const;
77 S32 getMhz() const { return mCPUMhz; } 77 bool hasSSE2() const;
78 S32 getMhz() const;
78 79
79 // Family is "AMD Duron" or "Intel Pentium Pro" 80 // Family is "AMD Duron" or "Intel Pentium Pro"
80 const std::string& getFamily() const { return mFamily; } 81 const std::string& getFamily() const { return mFamily; }
81 82
82private: 83private:
83 BOOL mHasSSE; 84 bool mHasSSE;
84 BOOL mHasSSE2; 85 bool mHasSSE2;
86 bool mHasAltivec;
85 S32 mCPUMhz; 87 S32 mCPUMhz;
86 std::string mFamily; 88 std::string mFamily;
87}; 89};
diff --git a/linden/indra/llcommon/llversion.h b/linden/indra/llcommon/llversion.h
index 096cf2e..eb8310e 100644
--- a/linden/indra/llcommon/llversion.h
+++ b/linden/indra/llcommon/llversion.h
@@ -31,7 +31,7 @@
31 31
32const S32 LL_VERSION_MAJOR = 1; 32const S32 LL_VERSION_MAJOR = 1;
33const S32 LL_VERSION_MINOR = 17; 33const S32 LL_VERSION_MINOR = 17;
34const S32 LL_VERSION_PATCH = 2; 34const S32 LL_VERSION_PATCH = 3;
35const S32 LL_VERSION_BUILD = 0; 35const S32 LL_VERSION_BUILD = 0;
36 36
37#endif 37#endif
diff --git a/linden/indra/llcommon/metaclass.cpp b/linden/indra/llcommon/metaclass.cpp
index 251795e..e545411 100644
--- a/linden/indra/llcommon/metaclass.cpp
+++ b/linden/indra/llcommon/metaclass.cpp
@@ -28,7 +28,10 @@
28 * COMPLETENESS OR PERFORMANCE. 28 * COMPLETENESS OR PERFORMANCE.
29 */ 29 */
30 30
31#include "linden_common.h"
32
31#include "metaclass.h" 33#include "metaclass.h"
34
32#include "metaproperty.h" 35#include "metaproperty.h"
33#include "reflective.h" 36#include "reflective.h"
34 37
diff --git a/linden/indra/llcommon/metaproperty.cpp b/linden/indra/llcommon/metaproperty.cpp
index 23ed7d9..221f7a7 100644
--- a/linden/indra/llcommon/metaproperty.cpp
+++ b/linden/indra/llcommon/metaproperty.cpp
@@ -28,7 +28,10 @@
28 * COMPLETENESS OR PERFORMANCE. 28 * COMPLETENESS OR PERFORMANCE.
29 */ 29 */
30 30
31#include "linden_common.h"
32
31#include "metaproperty.h" 33#include "metaproperty.h"
34
32#include "metaclass.h" 35#include "metaclass.h"
33 36
34LLMetaProperty::LLMetaProperty(const std::string& name, const LLMetaClass& object_class) : 37LLMetaProperty::LLMetaProperty(const std::string& name, const LLMetaClass& object_class) :
diff --git a/linden/indra/llcommon/reflective.cpp b/linden/indra/llcommon/reflective.cpp
index 7c07d88..c8050e0 100644
--- a/linden/indra/llcommon/reflective.cpp
+++ b/linden/indra/llcommon/reflective.cpp
@@ -27,6 +27,8 @@
27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY, 27 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
28 * COMPLETENESS OR PERFORMANCE. 28 * COMPLETENESS OR PERFORMANCE.
29 */ 29 */
30
31#include "linden_common.h"
30 32
31#include "reflective.h" 33#include "reflective.h"
32 34
diff --git a/linden/indra/llinventory/llparcel.h b/linden/indra/llinventory/llparcel.h
index a33ffad..66af8ad 100644
--- a/linden/indra/llinventory/llparcel.h
+++ b/linden/indra/llinventory/llparcel.h
@@ -298,7 +298,7 @@ public:
298 const char* getMusicURL() const { return mMusicURL.c_str(); } 298 const char* getMusicURL() const { return mMusicURL.c_str(); }
299 const char* getMediaURL() const { return mMediaURL.c_str(); } 299 const char* getMediaURL() const { return mMediaURL.c_str(); }
300 const LLUUID& getMediaID() const { return mMediaID; } 300 const LLUUID& getMediaID() const { return mMediaID; }
301 const U8 getMediaAutoScale() const { return mMediaAutoScale; } 301 U8 getMediaAutoScale() const { return mMediaAutoScale; }
302 S32 getLocalID() const { return mLocalID; } 302 S32 getLocalID() const { return mLocalID; }
303 const LLUUID& getOwnerID() const { return mOwnerID; } 303 const LLUUID& getOwnerID() const { return mOwnerID; }
304 const LLUUID& getGroupID() const { return mGroupID; } 304 const LLUUID& getGroupID() const { return mGroupID; }
diff --git a/linden/indra/llinventory/llparcelflags.h b/linden/indra/llinventory/llparcelflags.h
index 38d49fe..0c07b29 100644
--- a/linden/indra/llinventory/llparcelflags.h
+++ b/linden/indra/llinventory/llparcelflags.h
@@ -64,7 +64,7 @@ const U32 PF_ALLOW_GROUP_OBJECT_ENTRY = 1 << 28; // Only allow group (and owner)
64const U32 PF_ALLOW_VOICE_CHAT = 1 << 29; // Allow residents to use voice chat on this parcel 64const U32 PF_ALLOW_VOICE_CHAT = 1 << 29; // Allow residents to use voice chat on this parcel
65const U32 PF_USE_ESTATE_VOICE_CHAN = 1 << 30; 65const U32 PF_USE_ESTATE_VOICE_CHAN = 1 << 30;
66 66
67const U32 PF_RESERVED = 1 << 31; 67const U32 PF_RESERVED = 1U << 31;
68 68
69// If any of these are true the parcel is restricting access in some maner. 69// If any of these are true the parcel is restricting access in some maner.
70const U32 PF_USE_RESTRICTED_ACCESS = PF_USE_ACCESS_GROUP 70const U32 PF_USE_RESTRICTED_ACCESS = PF_USE_ACCESS_GROUP
diff --git a/linden/indra/llmath/llmath.vcproj b/linden/indra/llmath/llmath.vcproj
index 4876065..bdc8ded 100644
--- a/linden/indra/llmath/llmath.vcproj
+++ b/linden/indra/llmath/llmath.vcproj
@@ -272,6 +272,18 @@
272 RelativePath=".\lluuid.h"> 272 RelativePath=".\lluuid.h">
273 </File> 273 </File>
274 <File 274 <File
275 RelativePath=".\llv4math.h">
276 </File>
277 <File
278 RelativePath=".\llv4matrix3.h">
279 </File>
280 <File
281 RelativePath=".\llv4matrix4.h">
282 </File>
283 <File
284 RelativePath=".\llv4vector3.h">
285 </File>
286 <File
275 RelativePath=".\llvolume.h"> 287 RelativePath=".\llvolume.h">
276 </File> 288 </File>
277 <File 289 <File
diff --git a/linden/indra/llmath/llmath_vc8.vcproj b/linden/indra/llmath/llmath_vc8.vcproj
index ea23702..03d75c3 100644
--- a/linden/indra/llmath/llmath_vc8.vcproj
+++ b/linden/indra/llmath/llmath_vc8.vcproj
@@ -389,6 +389,22 @@
389 > 389 >
390 </File> 390 </File>
391 <File 391 <File
392 RelativePath=".\llv4math.h"
393 >
394 </File>
395 <File
396 RelativePath=".\llv4matrix3.h"
397 >
398 </File>
399 <File
400 RelativePath=".\llv4matrix4.h"
401 >
402 </File>
403 <File
404 RelativePath=".\llv4vector3.h"
405 >
406 </File>
407 <File
392 RelativePath=".\llvolume.h" 408 RelativePath=".\llvolume.h"
393 > 409 >
394 </File> 410 </File>
diff --git a/linden/indra/llmath/lluuid.h b/linden/indra/llmath/lluuid.h
index 99cd585..6334ea4 100644
--- a/linden/indra/llmath/lluuid.h
+++ b/linden/indra/llmath/lluuid.h
@@ -317,6 +317,8 @@ typedef LLUUID LLAssetID;
317class LLTransactionID : public LLUUID 317class LLTransactionID : public LLUUID
318{ 318{
319public: 319public:
320 LLTransactionID() : LLUUID() { }
321
320 static const LLTransactionID tnull; 322 static const LLTransactionID tnull;
321 LLAssetID makeAssetID(const LLUUID& session) const; 323 LLAssetID makeAssetID(const LLUUID& session) const;
322}; 324};
diff --git a/linden/indra/llmath/llv4math.h b/linden/indra/llmath/llv4math.h
new file mode 100644
index 0000000..d0b956b
--- /dev/null
+++ b/linden/indra/llmath/llv4math.h
@@ -0,0 +1,121 @@
1/**
2 * @file llviewerjointmesh.cpp
3 * @brief LLV4* class header file - vector processor enabled math
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29#ifndef LL_LLV4MATH_H
30#define LL_LLV4MATH_H
31
32//-----------------------------------------------------------------------------
33//-----------------------------------------------------------------------------
34// LLV4MATH - GNUC
35//-----------------------------------------------------------------------------
36//-----------------------------------------------------------------------------
37
38#if LL_GNUC && __GNUC__ >= 4 && __SSE__
39
40#define LL_VECTORIZE 1
41
42#if LL_DARWIN
43
44#include <Accelerate/Accelerate.h>
45#include <xmmintrin.h>
46typedef vFloat V4F32;
47
48#else
49
50#include <xmmintrin.h>
51typedef float V4F32 __attribute__((vector_size(16)));
52
53#endif
54
55#endif
56#if LL_GNUC
57
58#define LL_LLV4MATH_ALIGN_PREFIX
59#define LL_LLV4MATH_ALIGN_POSTFIX __attribute__((aligned(16)))
60
61#endif
62
63//-----------------------------------------------------------------------------
64//-----------------------------------------------------------------------------
65// LLV4MATH - MSVC
66//-----------------------------------------------------------------------------
67//-----------------------------------------------------------------------------
68
69#if LL_MSVC && _M_IX86_FP
70
71#define LL_VECTORIZE 1
72
73#include <xmmintrin.h>
74
75typedef __m128 V4F32;
76
77#endif
78#if LL_MSVC
79
80#define LL_LLV4MATH_ALIGN_PREFIX __declspec(align(16))
81#define LL_LLV4MATH_ALIGN_POSTFIX
82
83#endif
84
85//-----------------------------------------------------------------------------
86//-----------------------------------------------------------------------------
87// LLV4MATH - default - no vectorization
88//-----------------------------------------------------------------------------
89//-----------------------------------------------------------------------------
90
91#if !LL_VECTORIZE
92
93#define LL_VECTORIZE 0
94
95struct V4F32 { F32 __pad__[4]; };
96
97inline F32 llv4lerp(F32 a, F32 b, F32 w) { return ( b - a ) * w + a; }
98
99#endif
100
101#ifndef LL_LLV4MATH_ALIGN_PREFIX
102# define LL_LLV4MATH_ALIGN_PREFIX
103#endif
104#ifndef LL_LLV4MATH_ALIGN_POSTFIX
105# define LL_LLV4MATH_ALIGN_POSTFIX
106#endif
107
108//-----------------------------------------------------------------------------
109//-----------------------------------------------------------------------------
110// LLV4MATH
111//-----------------------------------------------------------------------------
112//-----------------------------------------------------------------------------
113
114
115#define LLV4_NUM_AXIS 4
116
117class LLV4Vector3;
118class LLV4Matrix3;
119class LLV4Matrix4;
120
121#endif
diff --git a/linden/indra/llmath/llv4matrix3.h b/linden/indra/llmath/llv4matrix3.h
new file mode 100644
index 0000000..0811338
--- /dev/null
+++ b/linden/indra/llmath/llv4matrix3.h
@@ -0,0 +1,222 @@
1/**
2 * @file llviewerjointmesh.cpp
3 * @brief LLV4* class header file - vector processor enabled math
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29#ifndef LL_LLV4MATRIX3_H
30#define LL_LLV4MATRIX3_H
31
32#include "llv4math.h"
33#include "llv4vector3.h"
34#include "m3math.h" // for operator LLMatrix3()
35
36//-----------------------------------------------------------------------------
37//-----------------------------------------------------------------------------
38// LLV4Matrix3
39//-----------------------------------------------------------------------------
40//-----------------------------------------------------------------------------
41
42LL_LLV4MATH_ALIGN_PREFIX
43
44class LLV4Matrix3
45{
46public:
47 union {
48 F32 mMatrix[LLV4_NUM_AXIS][LLV4_NUM_AXIS];
49 V4F32 mV[LLV4_NUM_AXIS];
50 };
51
52 void lerp(const LLV4Matrix3 &a, const LLV4Matrix3 &b, const F32 &w);
53 void multiply(const LLVector3 &a, LLVector3& out) const;
54 void multiply(const LLVector4 &a, LLV4Vector3& out) const;
55 void multiply(const LLVector3 &a, LLV4Vector3& out) const;
56
57 const LLV4Matrix3& transpose();
58 const LLV4Matrix3& operator=(const LLMatrix3& a);
59
60 operator LLMatrix3() const { return (reinterpret_cast<const LLMatrix4*>(const_cast<const F32*>(&mMatrix[0][0])))->getMat3(); }
61
62 friend LLVector3 operator*(const LLVector3& a, const LLV4Matrix3& b);
63}
64
65LL_LLV4MATH_ALIGN_POSTFIX;
66
67
68
69//-----------------------------------------------------------------------------
70//-----------------------------------------------------------------------------
71// LLV4Matrix3 - SSE
72//-----------------------------------------------------------------------------
73//-----------------------------------------------------------------------------
74
75#if LL_VECTORIZE
76
77inline void LLV4Matrix3::lerp(const LLV4Matrix3 &a, const LLV4Matrix3 &b, const F32 &w)
78{
79 __m128 vw = _mm_set1_ps(w);
80 mV[VX] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VX], a.mV[VX]), vw), a.mV[VX]); // ( b - a ) * w + a
81 mV[VY] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VY], a.mV[VY]), vw), a.mV[VY]);
82 mV[VZ] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VZ], a.mV[VZ]), vw), a.mV[VZ]);
83}
84
85inline void LLV4Matrix3::multiply(const LLVector3 &a, LLVector3& o) const
86{
87 LLV4Vector3 j;
88 j.v = _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX]); // ( ax * vx ) + ...
89 j.v = _mm_add_ps(j.v , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY]));
90 j.v = _mm_add_ps(j.v , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ]));
91 o.setVec(j.mV);
92}
93
94inline void LLV4Matrix3::multiply(const LLVector4 &a, LLV4Vector3& o) const
95{
96 o.v = _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX]); // ( ax * vx ) + ...
97 o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY]));
98 o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ]));
99}
100
101inline void LLV4Matrix3::multiply(const LLVector3 &a, LLV4Vector3& o) const
102{
103 o.v = _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX]); // ( ax * vx ) + ...
104 o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY]));
105 o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ]));
106}
107
108//-----------------------------------------------------------------------------
109//-----------------------------------------------------------------------------
110// LLV4Matrix3
111//-----------------------------------------------------------------------------
112//-----------------------------------------------------------------------------
113
114#else
115
116inline void LLV4Matrix3::lerp(const LLV4Matrix3 &a, const LLV4Matrix3 &b, const F32 &w)
117{
118 mMatrix[VX][VX] = llv4lerp(a.mMatrix[VX][VX], b.mMatrix[VX][VX], w);
119 mMatrix[VX][VY] = llv4lerp(a.mMatrix[VX][VY], b.mMatrix[VX][VY], w);
120 mMatrix[VX][VZ] = llv4lerp(a.mMatrix[VX][VZ], b.mMatrix[VX][VZ], w);
121
122 mMatrix[VY][VX] = llv4lerp(a.mMatrix[VY][VX], b.mMatrix[VY][VX], w);
123 mMatrix[VY][VY] = llv4lerp(a.mMatrix[VY][VY], b.mMatrix[VY][VY], w);
124 mMatrix[VY][VZ] = llv4lerp(a.mMatrix[VY][VZ], b.mMatrix[VY][VZ], w);
125
126 mMatrix[VZ][VX] = llv4lerp(a.mMatrix[VZ][VX], b.mMatrix[VZ][VX], w);
127 mMatrix[VZ][VY] = llv4lerp(a.mMatrix[VZ][VY], b.mMatrix[VZ][VY], w);
128 mMatrix[VZ][VZ] = llv4lerp(a.mMatrix[VZ][VZ], b.mMatrix[VZ][VZ], w);
129}
130
131inline void LLV4Matrix3::multiply(const LLVector3 &a, LLVector3& o) const
132{
133 o.setVec( a.mV[VX] * mMatrix[VX][VX] +
134 a.mV[VY] * mMatrix[VY][VX] +
135 a.mV[VZ] * mMatrix[VZ][VX],
136
137 a.mV[VX] * mMatrix[VX][VY] +
138 a.mV[VY] * mMatrix[VY][VY] +
139 a.mV[VZ] * mMatrix[VZ][VY],
140
141 a.mV[VX] * mMatrix[VX][VZ] +
142 a.mV[VY] * mMatrix[VY][VZ] +
143 a.mV[VZ] * mMatrix[VZ][VZ]);
144}
145
146inline void LLV4Matrix3::multiply(const LLVector4 &a, LLV4Vector3& o) const
147{
148 o.setVec( a.mV[VX] * mMatrix[VX][VX] +
149 a.mV[VY] * mMatrix[VY][VX] +
150 a.mV[VZ] * mMatrix[VZ][VX],
151
152 a.mV[VX] * mMatrix[VX][VY] +
153 a.mV[VY] * mMatrix[VY][VY] +
154 a.mV[VZ] * mMatrix[VZ][VY],
155
156 a.mV[VX] * mMatrix[VX][VZ] +
157 a.mV[VY] * mMatrix[VY][VZ] +
158 a.mV[VZ] * mMatrix[VZ][VZ]);
159}
160
161inline void LLV4Matrix3::multiply(const LLVector3 &a, LLV4Vector3& o) const
162{
163 o.setVec( a.mV[VX] * mMatrix[VX][VX] +
164 a.mV[VY] * mMatrix[VY][VX] +
165 a.mV[VZ] * mMatrix[VZ][VX],
166
167 a.mV[VX] * mMatrix[VX][VY] +
168 a.mV[VY] * mMatrix[VY][VY] +
169 a.mV[VZ] * mMatrix[VZ][VY],
170
171 a.mV[VX] * mMatrix[VX][VZ] +
172 a.mV[VY] * mMatrix[VY][VZ] +
173 a.mV[VZ] * mMatrix[VZ][VZ]);
174}
175
176//-----------------------------------------------------------------------------
177//-----------------------------------------------------------------------------
178// LLV4Matrix3
179//-----------------------------------------------------------------------------
180//-----------------------------------------------------------------------------
181
182#endif
183
184inline const LLV4Matrix3& LLV4Matrix3::transpose()
185{
186#if LL_VECTORIZE && defined(_MM_TRANSPOSE4_PS)
187 _MM_TRANSPOSE4_PS(mV[VX], mV[VY], mV[VZ], mV[VW]);
188 return *this;
189#else
190 F32 temp;
191 temp = mMatrix[VX][VY]; mMatrix[VX][VY] = mMatrix[VY][VX]; mMatrix[VY][VX] = temp;
192 temp = mMatrix[VX][VZ]; mMatrix[VX][VZ] = mMatrix[VZ][VX]; mMatrix[VZ][VX] = temp;
193 temp = mMatrix[VY][VZ]; mMatrix[VY][VZ] = mMatrix[VZ][VY]; mMatrix[VZ][VY] = temp;
194#endif
195 return *this;
196}
197
198inline const LLV4Matrix3& LLV4Matrix3::operator=(const LLMatrix3& a)
199{
200 memcpy(mMatrix[VX], a.mMatrix[VX], sizeof(F32) * 3 );
201 memcpy(mMatrix[VY], a.mMatrix[VY], sizeof(F32) * 3 );
202 memcpy(mMatrix[VZ], a.mMatrix[VZ], sizeof(F32) * 3 );
203 return *this;
204}
205
206inline LLVector3 operator*(const LLVector3& a, const LLV4Matrix3& b)
207{
208 return LLVector3(
209 a.mV[VX] * b.mMatrix[VX][VX] +
210 a.mV[VY] * b.mMatrix[VY][VX] +
211 a.mV[VZ] * b.mMatrix[VZ][VX],
212
213 a.mV[VX] * b.mMatrix[VX][VY] +
214 a.mV[VY] * b.mMatrix[VY][VY] +
215 a.mV[VZ] * b.mMatrix[VZ][VY],
216
217 a.mV[VX] * b.mMatrix[VX][VZ] +
218 a.mV[VY] * b.mMatrix[VY][VZ] +
219 a.mV[VZ] * b.mMatrix[VZ][VZ] );
220}
221
222#endif
diff --git a/linden/indra/llmath/llv4matrix4.h b/linden/indra/llmath/llv4matrix4.h
new file mode 100644
index 0000000..38280a2
--- /dev/null
+++ b/linden/indra/llmath/llv4matrix4.h
@@ -0,0 +1,251 @@
1/**
2 * @file llviewerjointmesh.cpp
3 * @brief LLV4* class header file - vector processor enabled math
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29#ifndef LL_LLV4MATRIX4_H
30#define LL_LLV4MATRIX4_H
31
32#include "llv4math.h"
33#include "llv4matrix3.h" // just for operator LLV4Matrix3()
34#include "llv4vector3.h"
35
36//-----------------------------------------------------------------------------
37//-----------------------------------------------------------------------------
38// LLV4Matrix4
39//-----------------------------------------------------------------------------
40//-----------------------------------------------------------------------------
41
42LL_LLV4MATH_ALIGN_PREFIX
43
44class LLV4Matrix4
45{
46public:
47 union {
48 F32 mMatrix[LLV4_NUM_AXIS][LLV4_NUM_AXIS];
49 V4F32 mV[LLV4_NUM_AXIS];
50 };
51
52 void lerp(const LLV4Matrix4 &a, const LLV4Matrix4 &b, const F32 &w);
53 void multiply(const LLVector3 &a, LLVector3& o) const;
54 void multiply(const LLVector3 &a, LLV4Vector3& o) const;
55
56 const LLV4Matrix4& transpose();
57 const LLV4Matrix4& translate(const LLVector3 &vec);
58 const LLV4Matrix4& translate(const LLV4Vector3 &vec);
59 const LLV4Matrix4& operator=(const LLMatrix4& a);
60
61 operator LLMatrix4() const { return *(reinterpret_cast<const LLMatrix4*>(const_cast<const F32*>(&mMatrix[0][0]))); }
62 operator LLV4Matrix3() const { return *(reinterpret_cast<const LLV4Matrix3*>(const_cast<const F32*>(&mMatrix[0][0]))); }
63
64 friend LLVector3 operator*(const LLVector3 &a, const LLV4Matrix4 &b);
65}
66
67LL_LLV4MATH_ALIGN_POSTFIX;
68
69//-----------------------------------------------------------------------------
70//-----------------------------------------------------------------------------
71// LLV4Matrix4 - SSE
72//-----------------------------------------------------------------------------
73//-----------------------------------------------------------------------------
74
75#if LL_VECTORIZE
76
77inline void LLV4Matrix4::lerp(const LLV4Matrix4 &a, const LLV4Matrix4 &b, const F32 &w)
78{
79 __m128 vw = _mm_set1_ps(w);
80 mV[VX] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VX], a.mV[VX]), vw), a.mV[VX]); // ( b - a ) * w + a
81 mV[VY] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VY], a.mV[VY]), vw), a.mV[VY]);
82 mV[VZ] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VZ], a.mV[VZ]), vw), a.mV[VZ]);
83 mV[VW] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VW], a.mV[VW]), vw), a.mV[VW]);
84}
85
86inline void LLV4Matrix4::multiply(const LLVector3 &a, LLVector3& o) const
87{
88 LLV4Vector3 j;
89 j.v = _mm_add_ps(mV[VW], _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX])); // ( ax * vx ) + vw
90 j.v = _mm_add_ps(j.v , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY]));
91 j.v = _mm_add_ps(j.v , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ]));
92 o.setVec(j.mV);
93}
94
95inline void LLV4Matrix4::multiply(const LLVector3 &a, LLV4Vector3& o) const
96{
97 o.v = _mm_add_ps(mV[VW], _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX])); // ( ax * vx ) + vw
98 o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY]));
99 o.v = _mm_add_ps(o.v , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ]));
100}
101
102inline const LLV4Matrix4& LLV4Matrix4::translate(const LLV4Vector3 &vec)
103{
104 mV[VW] = _mm_add_ps(mV[VW], vec.v);
105 return (*this);
106}
107
108//-----------------------------------------------------------------------------
109//-----------------------------------------------------------------------------
110// LLV4Matrix4
111//-----------------------------------------------------------------------------
112//-----------------------------------------------------------------------------
113
114#else
115
116inline void LLV4Matrix4::lerp(const LLV4Matrix4 &a, const LLV4Matrix4 &b, const F32 &w)
117{
118 mMatrix[VX][VX] = llv4lerp(a.mMatrix[VX][VX], b.mMatrix[VX][VX], w);
119 mMatrix[VX][VY] = llv4lerp(a.mMatrix[VX][VY], b.mMatrix[VX][VY], w);
120 mMatrix[VX][VZ] = llv4lerp(a.mMatrix[VX][VZ], b.mMatrix[VX][VZ], w);
121
122 mMatrix[VY][VX] = llv4lerp(a.mMatrix[VY][VX], b.mMatrix[VY][VX], w);
123 mMatrix[VY][VY] = llv4lerp(a.mMatrix[VY][VY], b.mMatrix[VY][VY], w);
124 mMatrix[VY][VZ] = llv4lerp(a.mMatrix[VY][VZ], b.mMatrix[VY][VZ], w);
125
126 mMatrix[VZ][VX] = llv4lerp(a.mMatrix[VZ][VX], b.mMatrix[VZ][VX], w);
127 mMatrix[VZ][VY] = llv4lerp(a.mMatrix[VZ][VY], b.mMatrix[VZ][VY], w);
128 mMatrix[VZ][VZ] = llv4lerp(a.mMatrix[VZ][VZ], b.mMatrix[VZ][VZ], w);
129
130 mMatrix[VW][VX] = llv4lerp(a.mMatrix[VW][VX], b.mMatrix[VW][VX], w);
131 mMatrix[VW][VY] = llv4lerp(a.mMatrix[VW][VY], b.mMatrix[VW][VY], w);
132 mMatrix[VW][VZ] = llv4lerp(a.mMatrix[VW][VZ], b.mMatrix[VW][VZ], w);
133}
134
135inline void LLV4Matrix4::multiply(const LLVector3 &a, LLVector3& o) const
136{
137 o.setVec( a.mV[VX] * mMatrix[VX][VX] +
138 a.mV[VY] * mMatrix[VY][VX] +
139 a.mV[VZ] * mMatrix[VZ][VX] +
140 mMatrix[VW][VX],
141
142 a.mV[VX] * mMatrix[VX][VY] +
143 a.mV[VY] * mMatrix[VY][VY] +
144 a.mV[VZ] * mMatrix[VZ][VY] +
145 mMatrix[VW][VY],
146
147 a.mV[VX] * mMatrix[VX][VZ] +
148 a.mV[VY] * mMatrix[VY][VZ] +
149 a.mV[VZ] * mMatrix[VZ][VZ] +
150 mMatrix[VW][VZ]);
151}
152
153inline void LLV4Matrix4::multiply(const LLVector3 &a, LLV4Vector3& o) const
154{
155 o.setVec( a.mV[VX] * mMatrix[VX][VX] +
156 a.mV[VY] * mMatrix[VY][VX] +
157 a.mV[VZ] * mMatrix[VZ][VX] +
158 mMatrix[VW][VX],
159
160 a.mV[VX] * mMatrix[VX][VY] +
161 a.mV[VY] * mMatrix[VY][VY] +
162 a.mV[VZ] * mMatrix[VZ][VY] +
163 mMatrix[VW][VY],
164
165 a.mV[VX] * mMatrix[VX][VZ] +
166 a.mV[VY] * mMatrix[VY][VZ] +
167 a.mV[VZ] * mMatrix[VZ][VZ] +
168 mMatrix[VW][VZ]);
169}
170
171inline const LLV4Matrix4& LLV4Matrix4::translate(const LLV4Vector3 &vec)
172{
173 mMatrix[3][0] += vec.mV[0];
174 mMatrix[3][1] += vec.mV[1];
175 mMatrix[3][2] += vec.mV[2];
176 return (*this);
177}
178
179//-----------------------------------------------------------------------------
180//-----------------------------------------------------------------------------
181// LLV4Matrix4
182//-----------------------------------------------------------------------------
183//-----------------------------------------------------------------------------
184
185#endif
186
187inline const LLV4Matrix4& LLV4Matrix4::operator=(const LLMatrix4& a)
188{
189 memcpy(mMatrix, a.mMatrix, sizeof(F32) * 16 );
190 return *this;
191}
192
193inline const LLV4Matrix4& LLV4Matrix4::transpose()
194{
195#if LL_VECTORIZE && defined(_MM_TRANSPOSE4_PS)
196 _MM_TRANSPOSE4_PS(mV[VX], mV[VY], mV[VZ], mV[VW]);
197#else
198 LLV4Matrix4 mat;
199 mat.mMatrix[0][0] = mMatrix[0][0];
200 mat.mMatrix[1][0] = mMatrix[0][1];
201 mat.mMatrix[2][0] = mMatrix[0][2];
202 mat.mMatrix[3][0] = mMatrix[0][3];
203
204 mat.mMatrix[0][1] = mMatrix[1][0];
205 mat.mMatrix[1][1] = mMatrix[1][1];
206 mat.mMatrix[2][1] = mMatrix[1][2];
207 mat.mMatrix[3][1] = mMatrix[1][3];
208
209 mat.mMatrix[0][2] = mMatrix[2][0];
210 mat.mMatrix[1][2] = mMatrix[2][1];
211 mat.mMatrix[2][2] = mMatrix[2][2];
212 mat.mMatrix[3][2] = mMatrix[2][3];
213
214 mat.mMatrix[0][3] = mMatrix[3][0];
215 mat.mMatrix[1][3] = mMatrix[3][1];
216 mat.mMatrix[2][3] = mMatrix[3][2];
217 mat.mMatrix[3][3] = mMatrix[3][3];
218
219 *this = mat;
220#endif
221 return *this;
222}
223
224inline const LLV4Matrix4& LLV4Matrix4::translate(const LLVector3 &vec)
225{
226 mMatrix[3][0] += vec.mV[0];
227 mMatrix[3][1] += vec.mV[1];
228 mMatrix[3][2] += vec.mV[2];
229 return (*this);
230}
231
232inline LLVector3 operator*(const LLVector3 &a, const LLV4Matrix4 &b)
233{
234 return LLVector3(a.mV[VX] * b.mMatrix[VX][VX] +
235 a.mV[VY] * b.mMatrix[VY][VX] +
236 a.mV[VZ] * b.mMatrix[VZ][VX] +
237 b.mMatrix[VW][VX],
238
239 a.mV[VX] * b.mMatrix[VX][VY] +
240 a.mV[VY] * b.mMatrix[VY][VY] +
241 a.mV[VZ] * b.mMatrix[VZ][VY] +
242 b.mMatrix[VW][VY],
243
244 a.mV[VX] * b.mMatrix[VX][VZ] +
245 a.mV[VY] * b.mMatrix[VY][VZ] +
246 a.mV[VZ] * b.mMatrix[VZ][VZ] +
247 b.mMatrix[VW][VZ]);
248}
249
250
251#endif
diff --git a/linden/indra/llmath/llv4vector3.h b/linden/indra/llmath/llv4vector3.h
new file mode 100644
index 0000000..994e7f5
--- /dev/null
+++ b/linden/indra/llmath/llv4vector3.h
@@ -0,0 +1,82 @@
1/**
2 * @file llviewerjointmesh.cpp
3 * @brief LLV4* class header file - vector processor enabled math
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29#ifndef LL_LLV4VECTOR3_H
30#define LL_LLV4VECTOR3_H
31
32#include "llv4math.h"
33
34//-----------------------------------------------------------------------------
35//-----------------------------------------------------------------------------
36// LLV4Vector3
37//-----------------------------------------------------------------------------
38//-----------------------------------------------------------------------------
39
40LL_LLV4MATH_ALIGN_PREFIX
41
42class LLV4Vector3
43{
44public:
45 union {
46 F32 mV[LLV4_NUM_AXIS];
47 V4F32 v;
48 };
49
50 enum {
51 ALIGNMENT = 16
52 };
53
54 void setVec(F32 x, F32 y, F32 z);
55 void setVec(F32 a);
56}
57
58LL_LLV4MATH_ALIGN_POSTFIX;
59
60//-----------------------------------------------------------------------------
61//-----------------------------------------------------------------------------
62// LLV4Vector3
63//-----------------------------------------------------------------------------
64//-----------------------------------------------------------------------------
65
66inline void LLV4Vector3::setVec(F32 x, F32 y, F32 z)
67{
68 mV[VX] = x;
69 mV[VY] = y;
70 mV[VZ] = z;
71}
72
73inline void LLV4Vector3::setVec(F32 a)
74{
75#if LL_VECTORIZE
76 v = _mm_set1_ps(a);
77#else
78 setVec(a, a, a);
79#endif
80}
81
82#endif
diff --git a/linden/indra/llmath/llvolume.h b/linden/indra/llmath/llvolume.h
index 3973f70..8292d0c 100644
--- a/linden/indra/llmath/llvolume.h
+++ b/linden/indra/llmath/llvolume.h
@@ -842,7 +842,7 @@ public:
842 U8 getPathType() const { return mPathp->mParams.getCurveType(); } 842 U8 getPathType() const { return mPathp->mParams.getCurveType(); }
843 S32 getNumFaces() const { return (S32)mProfilep->mFaces.size(); } 843 S32 getNumFaces() const { return (S32)mProfilep->mFaces.size(); }
844 S32 getNumVolumeFaces() const { return mNumVolumeFaces; } 844 S32 getNumVolumeFaces() const { return mNumVolumeFaces; }
845 const F32 getDetail() const { return mDetail; } 845 F32 getDetail() const { return mDetail; }
846 const LLVolumeParams & getParams() const { return mParams; } 846 const LLVolumeParams & getParams() const { return mParams; }
847 LLVolumeParams getCopyOfParams() const { return mParams; } 847 LLVolumeParams getCopyOfParams() const { return mParams; }
848 const LLProfile& getProfile() const { return *mProfilep; } 848 const LLProfile& getProfile() const { return *mProfilep; }
diff --git a/linden/indra/llmath/v4color.h b/linden/indra/llmath/v4color.h
index d79b6c8..2e9d13f 100644
--- a/linden/indra/llmath/v4color.h
+++ b/linden/indra/llmath/v4color.h
@@ -93,7 +93,7 @@ class LLColor4
93 F32 magVec() const; // Returns magnitude of LLColor4 93 F32 magVec() const; // Returns magnitude of LLColor4
94 F32 magVecSquared() const; // Returns magnitude squared of LLColor4 94 F32 magVecSquared() const; // Returns magnitude squared of LLColor4
95 F32 normVec(); // Normalizes and returns the magnitude of LLColor4 95 F32 normVec(); // Normalizes and returns the magnitude of LLColor4
96 const BOOL isOpaque() { return mV[VALPHA] == 1.f; } 96 BOOL isOpaque() { return mV[VALPHA] == 1.f; }
97 97
98 F32 operator[](int idx) const { return mV[idx]; } 98 F32 operator[](int idx) const { return mV[idx]; }
99 F32 &operator[](int idx) { return mV[idx]; } 99 F32 &operator[](int idx) { return mV[idx]; }
diff --git a/linden/indra/llmessage/llteleportflags.h b/linden/indra/llmessage/llteleportflags.h
index 25aac14..60916bd 100644
--- a/linden/indra/llmessage/llteleportflags.h
+++ b/linden/indra/llmessage/llteleportflags.h
@@ -44,6 +44,7 @@ const U32 TELEPORT_FLAGS_911 = 1 << 10;
44const U32 TELEPORT_FLAGS_DISABLE_CANCEL = 1 << 11; // Used for llTeleportAgentHome() 44const U32 TELEPORT_FLAGS_DISABLE_CANCEL = 1 << 11; // Used for llTeleportAgentHome()
45const U32 TELEPORT_FLAGS_VIA_REGION_ID = 1 << 12; 45const U32 TELEPORT_FLAGS_VIA_REGION_ID = 1 << 12;
46const U32 TELEPORT_FLAGS_IS_FLYING = 1 << 13; 46const U32 TELEPORT_FLAGS_IS_FLYING = 1 << 13;
47const U32 TELEPORT_FLAGS_SHOW_RESET_HOME = 1 << 14;
47 48
48const U32 TELEPORT_FLAGS_MASK_VIA = TELEPORT_FLAGS_VIA_LURE 49const U32 TELEPORT_FLAGS_MASK_VIA = TELEPORT_FLAGS_VIA_LURE
49 | TELEPORT_FLAGS_VIA_LANDMARK 50 | TELEPORT_FLAGS_VIA_LANDMARK
diff --git a/linden/indra/llmessage/machine.h b/linden/indra/llmessage/machine.h
index 490ddc5..b28e621 100644
--- a/linden/indra/llmessage/machine.h
+++ b/linden/indra/llmessage/machine.h
@@ -62,8 +62,8 @@ public:
62 62
63 // get functions 63 // get functions
64 EMachineType getMachineType() const { return mMachineType; } 64 EMachineType getMachineType() const { return mMachineType; }
65 const U32 getMachineIP() const { return mHost.getAddress(); } 65 U32 getMachineIP() const { return mHost.getAddress(); }
66 const S32 getMachinePort() const { return mHost.getPort(); } 66 S32 getMachinePort() const { return mHost.getPort(); }
67 const LLHost &getMachineHost() const { return mHost; } 67 const LLHost &getMachineHost() const { return mHost; }
68 // The control port is the listen port of the parent process that 68 // The control port is the listen port of the parent process that
69 // launched this machine. 0 means none or not known. 69 // launched this machine. 0 means none or not known.
diff --git a/linden/indra/llmessage/net.cpp b/linden/indra/llmessage/net.cpp
index 1395093..92efd15 100644
--- a/linden/indra/llmessage/net.cpp
+++ b/linden/indra/llmessage/net.cpp
@@ -291,8 +291,9 @@ S32 start_net(S32& socket_out, int& nPort)
291 291
292void end_net(S32& socket_out) 292void end_net(S32& socket_out)
293{ 293{
294 if (socket_out < 0) 294 if (socket_out >= 0)
295 { 295 {
296 shutdown(socket_out, SD_BOTH);
296 closesocket(socket_out); 297 closesocket(socket_out);
297 } 298 }
298 WSACleanup(); 299 WSACleanup();
@@ -463,7 +464,7 @@ S32 start_net(S32& socket_out, int& nPort)
463 464
464void end_net(S32& socket_out) 465void end_net(S32& socket_out)
465{ 466{
466 if (socket_out < 0) 467 if (socket_out >= 0)
467 { 468 {
468 close(socket_out); 469 close(socket_out);
469 } 470 }
diff --git a/linden/indra/llprimitive/llprimitive.h b/linden/indra/llprimitive/llprimitive.h
index 29cd09f..1a568d1 100644
--- a/linden/indra/llprimitive/llprimitive.h
+++ b/linden/indra/llprimitive/llprimitive.h
@@ -340,14 +340,14 @@ public:
340 void setAcceleration(const F32 x, const F32 y, const F32 z) { mAcceleration.setVec(x,y,z); } 340 void setAcceleration(const F32 x, const F32 y, const F32 z) { mAcceleration.setVec(x,y,z); }
341#endif 341#endif
342 342
343 const LLPCode getPCode() const { return mPrimitiveCode; } 343 LLPCode getPCode() const { return mPrimitiveCode; }
344 const char * getPCodeString() const { return pCodeToString(mPrimitiveCode); } 344 const char * getPCodeString() const { return pCodeToString(mPrimitiveCode); }
345 const LLVector3& getAngularVelocity() const { return mAngularVelocity; } 345 const LLVector3& getAngularVelocity() const { return mAngularVelocity; }
346 const LLVector3& getVelocity() const { return mVelocity; } 346 const LLVector3& getVelocity() const { return mVelocity; }
347 const LLVector3& getAcceleration() const { return mAcceleration; } 347 const LLVector3& getAcceleration() const { return mAcceleration; }
348 const U8 getNumTEs() const { return mNumTEs; } 348 U8 getNumTEs() const { return mNumTEs; }
349 349
350 const U8 getMaterial() const { return mMaterial; } 350 U8 getMaterial() const { return mMaterial; }
351 351
352 void setVolumeType(const U8 code); 352 void setVolumeType(const U8 code);
353 U8 getVolumeType(); 353 U8 getVolumeType();
diff --git a/linden/indra/llprimitive/lltreeparams.h b/linden/indra/llprimitive/lltreeparams.h
index 29bbc9a..2754eb4 100644
--- a/linden/indra/llprimitive/lltreeparams.h
+++ b/linden/indra/llprimitive/lltreeparams.h
@@ -32,7 +32,7 @@
32/* for information about formulas associated with each type 32/* for information about formulas associated with each type
33 * check the Weber + Penn paper 33 * check the Weber + Penn paper
34 */ 34 */
35typedef enum EShapeRatio { SR_CONICAL, SR_SPHERICAL, SR_HEMISPHERICAL, 35enum EShapeRatio { SR_CONICAL, SR_SPHERICAL, SR_HEMISPHERICAL,
36 SR_CYLINDRICAL, SR_TAPERED_CYLINDRICAL, SR_FLAME, 36 SR_CYLINDRICAL, SR_TAPERED_CYLINDRICAL, SR_FLAME,
37 SR_INVERSE_CONICAL, SR_TEND_FLAME, SR_ENVELOPE}; 37 SR_INVERSE_CONICAL, SR_TEND_FLAME, SR_ENVELOPE};
38 38
diff --git a/linden/indra/llui/llscrolllistctrl.h b/linden/indra/llui/llscrolllistctrl.h
index 9829832..f1bd9bb 100644
--- a/linden/indra/llui/llscrolllistctrl.h
+++ b/linden/indra/llui/llscrolllistctrl.h
@@ -59,7 +59,7 @@ public:
59 virtual S32 getHeight() const = 0; 59 virtual S32 getHeight() const = 0;
60 virtual const LLString& getText() const { return LLString::null; } 60 virtual const LLString& getText() const { return LLString::null; }
61 virtual const LLString& getTextLower() const { return LLString::null; } 61 virtual const LLString& getTextLower() const { return LLString::null; }
62 virtual const BOOL getVisible() const { return TRUE; } 62 virtual BOOL getVisible() const { return TRUE; }
63 virtual void setWidth(S32 width) = 0; 63 virtual void setWidth(S32 width) = 0;
64 virtual void highlightText(S32 offset, S32 num_chars) {} 64 virtual void highlightText(S32 offset, S32 num_chars) {}
65 virtual BOOL isText() = 0; 65 virtual BOOL isText() = 0;
@@ -96,7 +96,7 @@ public:
96 virtual void setWidth(S32 width) { mWidth = width; } 96 virtual void setWidth(S32 width) { mWidth = width; }
97 virtual S32 getHeight() const { return llround(mFont->getLineHeight()); } 97 virtual S32 getHeight() const { return llround(mFont->getLineHeight()); }
98 virtual const LLString& getText() const { return mText.getString(); } 98 virtual const LLString& getText() const { return mText.getString(); }
99 virtual const BOOL getVisible() const { return mVisible; } 99 virtual BOOL getVisible() const { return mVisible; }
100 virtual void highlightText(S32 offset, S32 num_chars) {mHighlightOffset = offset; mHighlightCount = num_chars;} 100 virtual void highlightText(S32 offset, S32 num_chars) {mHighlightOffset = offset; mHighlightCount = num_chars;}
101 void setText(const LLString& text); 101 void setText(const LLString& text);
102 virtual void setColor(const LLColor4&); 102 virtual void setColor(const LLColor4&);
diff --git a/linden/indra/llui/lltextbox.cpp b/linden/indra/llui/lltextbox.cpp
index c4f2cea..ba0747f 100644
--- a/linden/indra/llui/lltextbox.cpp
+++ b/linden/indra/llui/lltextbox.cpp
@@ -439,6 +439,7 @@ LLView* LLTextBox::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *f
439 text, 439 text,
440 font, 440 font,
441 FALSE); 441 FALSE);
442
442 443
443 LLFontGL::HAlign halign = LLView::selectFontHAlign(node); 444 LLFontGL::HAlign halign = LLView::selectFontHAlign(node);
444 text_box->setHAlign(halign); 445 text_box->setHAlign(halign);
@@ -450,6 +451,12 @@ LLView* LLTextBox::fromXML(LLXMLNodePtr node, LLView *parent, LLUICtrlFactory *f
450 { 451 {
451 text_box->mFontStyle = LLFontGL::getStyleFromString(font_style); 452 text_box->mFontStyle = LLFontGL::getStyleFromString(font_style);
452 } 453 }
454
455 BOOL mouse_opaque;
456 if (node->getAttributeBOOL("mouse_opaque", mouse_opaque))
457 {
458 text_box->setMouseOpaque(mouse_opaque);
459 }
453 460
454 if(node->hasAttribute("text_color")) 461 if(node->hasAttribute("text_color"))
455 { 462 {
diff --git a/linden/indra/llui/lluictrl.h b/linden/indra/llui/lluictrl.h
index 3093437..5056319 100644
--- a/linden/indra/llui/lluictrl.h
+++ b/linden/indra/llui/lluictrl.h
@@ -136,7 +136,7 @@ public:
136 { 136 {
137 /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const 137 /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const
138 { 138 {
139 return filterResult_t(view->isCtrl() && static_cast<const LLUICtrl * const>(view)->hasTabStop() && children.size() == 0, TRUE); 139 return filterResult_t(view->isCtrl() && static_cast<const LLUICtrl *>(view)->hasTabStop() && children.size() == 0, TRUE);
140 } 140 }
141 }; 141 };
142 142
@@ -144,7 +144,7 @@ public:
144 { 144 {
145 /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const 145 /*virtual*/ filterResult_t operator() (const LLView* const view, const viewList_t & children) const
146 { 146 {
147 return filterResult_t(view->isCtrl() && static_cast<const LLUICtrl * const>(view)->acceptsTextInput(), TRUE); 147 return filterResult_t(view->isCtrl() && static_cast<const LLUICtrl *>(view)->acceptsTextInput(), TRUE);
148 } 148 }
149 }; 149 };
150 150
diff --git a/linden/indra/llui/llview.cpp b/linden/indra/llui/llview.cpp
index 22d426a..0b04213 100644
--- a/linden/indra/llui/llview.cpp
+++ b/linden/indra/llui/llview.cpp
@@ -455,8 +455,8 @@ bool LLCompareByTabOrder::operator() (const LLView* const a, const LLView* const
455 if(b && b->isCtrl()) b_score--; 455 if(b && b->isCtrl()) b_score--;
456 if(a_score == -2 && b_score == -2) 456 if(a_score == -2 && b_score == -2)
457 { 457 {
458 const LLUICtrl * const a_ctrl = static_cast<const LLUICtrl* const>(a); 458 const LLUICtrl * const a_ctrl = static_cast<const LLUICtrl*>(a);
459 const LLUICtrl * const b_ctrl = static_cast<const LLUICtrl* const>(b); 459 const LLUICtrl * const b_ctrl = static_cast<const LLUICtrl*>(b);
460 LLView::child_tab_order_const_iter_t a_found = mTabOrder.find(a_ctrl), b_found = mTabOrder.find(b_ctrl); 460 LLView::child_tab_order_const_iter_t a_found = mTabOrder.find(a_ctrl), b_found = mTabOrder.find(b_ctrl);
461 if(a_found != mTabOrder.end()) a_score--; 461 if(a_found != mTabOrder.end()) a_score--;
462 if(b_found != mTabOrder.end()) b_score--; 462 if(b_found != mTabOrder.end()) b_score--;
diff --git a/linden/indra/llui/llviewquery.cpp b/linden/indra/llui/llviewquery.cpp
index 65f191b..314a483 100644
--- a/linden/indra/llui/llviewquery.cpp
+++ b/linden/indra/llui/llviewquery.cpp
@@ -49,7 +49,7 @@ filterResult_t LLEnabledFilter::operator() (const LLView* const view, const view
49} 49}
50filterResult_t LLTabStopFilter::operator() (const LLView* const view, const viewList_t & children) const 50filterResult_t LLTabStopFilter::operator() (const LLView* const view, const viewList_t & children) const
51{ 51{
52 return filterResult_t(view->isCtrl() && static_cast<const LLUICtrl* const>(view)->hasTabStop(), 52 return filterResult_t(view->isCtrl() && static_cast<const LLUICtrl*>(view)->hasTabStop(),
53 view->canFocusChildren()); 53 view->canFocusChildren());
54} 54}
55 55
diff --git a/linden/indra/llxml/llxmlnode.h b/linden/indra/llxml/llxmlnode.h
index f95a53b..3c338e2 100644
--- a/linden/indra/llxml/llxmlnode.h
+++ b/linden/indra/llxml/llxmlnode.h
@@ -171,12 +171,12 @@ public:
171 BOOL getAttributeString(const LLString& name, LLString& value ); 171 BOOL getAttributeString(const LLString& name, LLString& value );
172 172
173 const ValueType& getType() const { return mType; } 173 const ValueType& getType() const { return mType; }
174 const U32 getLength() const { return mLength; } 174 U32 getLength() const { return mLength; }
175 const U32 getPrecision() const { return mPrecision; } 175 U32 getPrecision() const { return mPrecision; }
176 const LLString& getValue() const { return mValue; } 176 const LLString& getValue() const { return mValue; }
177 LLString getTextContents() const; 177 LLString getTextContents() const;
178 const LLStringTableEntry* getName() const { return mName; } 178 const LLStringTableEntry* getName() const { return mName; }
179 const BOOL hasName(LLString name) const { return mName == gStringTable.checkStringEntry(name); } 179 BOOL hasName(LLString name) const { return mName == gStringTable.checkStringEntry(name); }
180 const LLString& getID() const { return mID; } 180 const LLString& getID() const { return mID; }
181 181
182 U32 getChildCount() const; 182 U32 getChildCount() const;
diff --git a/linden/indra/lscript/lscript_library.h b/linden/indra/lscript/lscript_library.h
index 8c4a3d0..353ff69 100644
--- a/linden/indra/lscript/lscript_library.h
+++ b/linden/indra/lscript/lscript_library.h
@@ -84,7 +84,7 @@ public:
84 LLQuaternion mQuat; 84 LLQuaternion mQuat;
85 LLScriptLibData *mListp; 85 LLScriptLibData *mListp;
86 86
87 friend const bool operator<=(const LLScriptLibData &a, const LLScriptLibData &b) 87 friend bool operator<=(const LLScriptLibData &a, const LLScriptLibData &b)
88 { 88 {
89 if (a.mType == b.mType) 89 if (a.mType == b.mType)
90 { 90 {
@@ -112,7 +112,7 @@ public:
112 return TRUE; 112 return TRUE;
113 } 113 }
114 114
115 friend const bool operator==(const LLScriptLibData &a, const LLScriptLibData &b) 115 friend bool operator==(const LLScriptLibData &a, const LLScriptLibData &b)
116 { 116 {
117 if (a.mType == b.mType) 117 if (a.mType == b.mType)
118 { 118 {
diff --git a/linden/indra/newview/English.lproj/InfoPlist.strings b/linden/indra/newview/English.lproj/InfoPlist.strings
index 6044498..794f869 100644
--- a/linden/indra/newview/English.lproj/InfoPlist.strings
+++ b/linden/indra/newview/English.lproj/InfoPlist.strings
@@ -1,5 +1,5 @@
1/* Localized versions of Info.plist keys */ 1/* Localized versions of Info.plist keys */
2 2
3CFBundleName = "Second Life"; 3CFBundleName = "Second Life";
4CFBundleShortVersionString = "Second Life version 1.17.2.0"; 4CFBundleShortVersionString = "Second Life version 1.17.3.0";
5CFBundleGetInfoString = "Second Life version 1.17.2.0, Copyright 2004-2007 Linden Research, Inc."; 5CFBundleGetInfoString = "Second Life version 1.17.3.0, Copyright 2004-2007 Linden Research, Inc.";
diff --git a/linden/indra/newview/Info-SecondLife.plist b/linden/indra/newview/Info-SecondLife.plist
index 3fbf135..5d351bb 100644
--- a/linden/indra/newview/Info-SecondLife.plist
+++ b/linden/indra/newview/Info-SecondLife.plist
@@ -32,7 +32,7 @@
32 </dict> 32 </dict>
33 </array> 33 </array>
34 <key>CFBundleVersion</key> 34 <key>CFBundleVersion</key>
35 <string>1.17.2.0</string> 35 <string>1.17.3.0</string>
36 <key>CSResourcesFileMapped</key> 36 <key>CSResourcesFileMapped</key>
37 <true/> 37 <true/>
38</dict> 38</dict>
diff --git a/linden/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl b/linden/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl
index 12c99a6..6942132 100644
--- a/linden/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl
+++ b/linden/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl
@@ -1,13 +1,13 @@
1void applyScatter(inout vec3 col); 1void applyScatter(inout vec3 col);
2 2
3uniform samplerCube environmentMap; 3uniform samplerCube environmentMap;
4 4
5void main() 5void main()
6{ 6{
7 vec3 ref = textureCube(environmentMap, gl_TexCoord[0].xyz).rgb; 7 vec3 ref = textureCube(environmentMap, gl_TexCoord[0].xyz).rgb;
8 8
9 applyScatter(ref); 9 applyScatter(ref);
10 10
11 gl_FragColor.rgb = ref; 11 gl_FragColor.rgb = ref;
12 gl_FragColor.a = gl_Color.a; 12 gl_FragColor.a = gl_Color.a;
13} 13}
diff --git a/linden/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl b/linden/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl
index 621ff6b..16fba01 100644
--- a/linden/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl
+++ b/linden/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl
@@ -1,27 +1,27 @@
1void default_scatter(vec3 viewVec, vec3 lightDir); 1void default_scatter(vec3 viewVec, vec3 lightDir);
2 2
3uniform vec4 origin; 3uniform vec4 origin;
4 4
5void main() 5void main()
6{ 6{
7 //transform vertex 7 //transform vertex
8 gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; 8 gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
9 9
10 vec3 pos = (gl_ModelViewMatrix * gl_Vertex).xyz; 10 vec3 pos = (gl_ModelViewMatrix * gl_Vertex).xyz;
11 vec3 norm = normalize(gl_NormalMatrix * gl_Normal); 11 vec3 norm = normalize(gl_NormalMatrix * gl_Normal);
12 12
13 gl_FrontColor = gl_Color; 13 gl_FrontColor = gl_Color;
14 14
15 vec3 ref = reflect(pos, norm); 15 vec3 ref = reflect(pos, norm);
16 16
17 vec3 d = pos - origin.xyz; 17 vec3 d = pos - origin.xyz;
18 float dist = dot(normalize(d), ref); 18 float dist = dot(normalize(d), ref);
19 vec3 e = d + (ref * max(origin.w-dist, 0.0)); 19 vec3 e = d + (ref * max(origin.w-dist, 0.0));
20 20
21 ref = e - origin.xyz; 21 ref = e - origin.xyz;
22 22
23 gl_TexCoord[0] = gl_TextureMatrix[0]*vec4(ref,1.0); 23 gl_TexCoord[0] = gl_TextureMatrix[0]*vec4(ref,1.0);
24 24
25 default_scatter(pos.xyz, gl_LightSource[0].position.xyz); 25 default_scatter(pos.xyz, gl_LightSource[0].position.xyz);
26} 26}
27 27
diff --git a/linden/indra/newview/app_settings/shaders/class3/environment/waterF.glsl b/linden/indra/newview/app_settings/shaders/class3/environment/waterF.glsl
index 3a117c5..ac8b07c 100644
--- a/linden/indra/newview/app_settings/shaders/class3/environment/waterF.glsl
+++ b/linden/indra/newview/app_settings/shaders/class3/environment/waterF.glsl
@@ -1,145 +1,145 @@
1void applyScatter(inout vec3 color); 1void applyScatter(inout vec3 color);
2 2
3uniform sampler2D diffuseMap; 3uniform sampler2D diffuseMap;
4uniform sampler2D bumpMap; 4uniform sampler2D bumpMap;
5uniform samplerCube environmentMap; //: TEXUNIT4, // Environment map texture 5uniform samplerCube environmentMap; //: TEXUNIT4, // Environment map texture
6uniform sampler2D screenTex; // : TEXUNIT5 6uniform sampler2D screenTex; // : TEXUNIT5
7 7
8uniform vec3 lightDir; 8uniform vec3 lightDir;
9uniform vec3 specular; 9uniform vec3 specular;
10uniform float lightExp; 10uniform float lightExp;
11uniform vec2 fbScale; 11uniform vec2 fbScale;
12uniform float refScale; 12uniform float refScale;
13 13
14float msin(float x) { 14float msin(float x) {
15 float k = sin(x)+1.0; 15 float k = sin(x)+1.0;
16 k *= 0.5; 16 k *= 0.5;
17 k *= k; 17 k *= k;
18 return 2.0 * k; 18 return 2.0 * k;
19} 19}
20 20
21float mcos(float x) { 21float mcos(float x) {
22 float k = cos(x)+1.0; 22 float k = cos(x)+1.0;
23 k *= 0.5; 23 k *= 0.5;
24 k *= k; 24 k *= k;
25 return 2.0 * k; 25 return 2.0 * k;
26} 26}
27 27
28float waveS(vec2 v, float t, float a, float f, vec2 d, float s, sampler1D sinMap) 28float waveS(vec2 v, float t, float a, float f, vec2 d, float s, sampler1D sinMap)
29{ 29{
30 return texture1D(sinMap, (dot(d, v)*f + t*s)*f).r*a; 30 return texture1D(sinMap, (dot(d, v)*f + t*s)*f).r*a;
31} 31}
32 32
33float waveC(vec2 v, float t, float a, float f, vec2 d, float s, sampler1D sinMap) 33float waveC(vec2 v, float t, float a, float f, vec2 d, float s, sampler1D sinMap)
34{ 34{
35 return texture1D(sinMap, (dot(d, v)*f + t*s)*f).g*a*2.0-1.0; 35 return texture1D(sinMap, (dot(d, v)*f + t*s)*f).g*a*2.0-1.0;
36} 36}
37 37
38float magnitude(vec3 vec) { 38float magnitude(vec3 vec) {
39 return sqrt(dot(vec,vec)); 39 return sqrt(dot(vec,vec));
40} 40}
41 41
42vec3 mreflect(vec3 i, vec3 n) { 42vec3 mreflect(vec3 i, vec3 n) {
43 return i + n * 2.0 * abs(dot(n,i))+vec3(0.0,0.0,0.5); 43 return i + n * 2.0 * abs(dot(n,i))+vec3(0.0,0.0,0.5);
44} 44}
45 45
46void main() 46void main()
47{ 47{
48 vec2 texCoord = gl_TexCoord[0].xy; // Texture coordinates 48 vec2 texCoord = gl_TexCoord[0].xy; // Texture coordinates
49 vec2 littleWave1 = gl_TexCoord[0].zw; 49 vec2 littleWave1 = gl_TexCoord[0].zw;
50 vec2 littleWave2 = gl_TexCoord[1].xy; 50 vec2 littleWave2 = gl_TexCoord[1].xy;
51 vec2 bigWave = gl_TexCoord[1].zw; 51 vec2 bigWave = gl_TexCoord[1].zw;
52 vec3 viewVec = gl_TexCoord[2].xyz; 52 vec3 viewVec = gl_TexCoord[2].xyz;
53 vec4 refCoord = gl_TexCoord[3]; 53 vec4 refCoord = gl_TexCoord[3];
54 vec4 col = gl_Color; 54 vec4 col = gl_Color;
55 vec4 color; 55 vec4 color;
56 56
57 //get color from alpha map (alpha denotes water depth), rgb denotes water color 57 //get color from alpha map (alpha denotes water depth), rgb denotes water color
58 vec4 wcol = texture2D(diffuseMap, texCoord.xy); 58 vec4 wcol = texture2D(diffuseMap, texCoord.xy);
59 59
60 float dist = length(viewVec); 60 float dist = length(viewVec);
61 61
62 //store texture alpha 62 //store texture alpha
63 float da = wcol.a; 63 float da = wcol.a;
64 64
65 //modulate by incoming water color 65 //modulate by incoming water color
66 //wcol.a *= refCoord.w; 66 //wcol.a *= refCoord.w;
67 67
68 //scale wcol.a (water depth) for steep transition 68 //scale wcol.a (water depth) for steep transition
69 wcol.a *= wcol.a; 69 wcol.a *= wcol.a;
70 70
71 //normalize view vector 71 //normalize view vector
72 viewVec = normalize(viewVec); 72 viewVec = normalize(viewVec);
73 73
74 //get bigwave normal 74 //get bigwave normal
75 vec3 wavef = texture2D(bumpMap, bigWave).xyz*2.0; 75 vec3 wavef = texture2D(bumpMap, bigWave).xyz*2.0;
76 76
77 vec3 view = vec3(viewVec.x, viewVec.y, viewVec.z); 77 vec3 view = vec3(viewVec.x, viewVec.y, viewVec.z);
78 78
79 float dx = 1.0-(dot(wavef*2.0-vec3(1.0), view))*da; 79 float dx = 1.0-(dot(wavef*2.0-vec3(1.0), view))*da;
80 dx *= 0.274; 80 dx *= 0.274;
81 81
82 //get detail normals 82 //get detail normals
83 vec3 dcol = texture2D(bumpMap, littleWave1+dx*view.xy).rgb*0.75; 83 vec3 dcol = texture2D(bumpMap, littleWave1+dx*view.xy).rgb*0.75;
84 dcol += texture2D(bumpMap, littleWave2+view.xy*dx*0.1).rgb*1.25; 84 dcol += texture2D(bumpMap, littleWave2+view.xy*dx*0.1).rgb*1.25;
85 85
86 //interpolate between big waves and little waves (big waves in deep water) 86 //interpolate between big waves and little waves (big waves in deep water)
87 wavef = wavef*wcol.a + dcol*(1.0-wcol.a); 87 wavef = wavef*wcol.a + dcol*(1.0-wcol.a);
88 88
89 //crunch normal to range [-1,1] 89 //crunch normal to range [-1,1]
90 wavef -= vec3(1,1,1); 90 wavef -= vec3(1,1,1);
91 wavef = normalize(wavef); 91 wavef = normalize(wavef);
92 //wavef = vec3(0.0, 0.0, 1.0); 92 //wavef = vec3(0.0, 0.0, 1.0);
93 93
94 //get base fresnel component 94 //get base fresnel component
95 float df = dot(viewVec,wavef); 95 float df = dot(viewVec,wavef);
96 //translate and flip fresnel 96 //translate and flip fresnel
97 df = 1.0-clamp(-df,0.0,1.0); 97 df = 1.0-clamp(-df,0.0,1.0);
98 98
99 //set output alpha based on fresnel 99 //set output alpha based on fresnel
100 color.a = clamp((1.0-df+da)*0.5,0.0,1.0); 100 color.a = clamp((1.0-df+da)*0.5,0.0,1.0);
101 101
102 //calculate reflection vector 102 //calculate reflection vector
103 vec3 refnorm = vec3(wavef.x*0.5, wavef.y*0.5, wavef.z*2.0); 103 vec3 refnorm = vec3(wavef.x*0.5, wavef.y*0.5, wavef.z*2.0);
104 104
105 //ramp normal towards eye for far view stuff 105 //ramp normal towards eye for far view stuff
106 float ramp = dist/256.0; 106 float ramp = dist/256.0;
107 refnorm -= viewVec * ramp; 107 refnorm -= viewVec * ramp;
108 vec3 ref = reflect(viewVec.xyz, normalize(refnorm)); 108 vec3 ref = reflect(viewVec.xyz, normalize(refnorm));
109 ref.z /= sqrt(dist); 109 ref.z /= sqrt(dist);
110 110
111 //get diffuse component 111 //get diffuse component
112 float diff = clamp(dot(ref, wavef),0.0,1.0)*0.9; 112 float diff = clamp(dot(ref, wavef),0.0,1.0)*0.9;
113 113
114 //fudge diffuse for extra contrast and ambience 114 //fudge diffuse for extra contrast and ambience
115 diff *= diff; 115 diff *= diff;
116 diff += 0.4; 116 diff += 0.4;
117 117
118 vec3 fog = gl_TexCoord[5].rgb*0.5; 118 vec3 fog = gl_TexCoord[5].rgb*0.5;
119 119
120 //read from reflection map 120 //read from reflection map
121 vec3 refcol = textureCube(environmentMap, ref).rgb; 121 vec3 refcol = textureCube(environmentMap, ref).rgb;
122 //tint reflection by fresnal, bias by z component of view vec 122 //tint reflection by fresnal, bias by z component of view vec
123 color.rgb = refcol*(df*df*dcol.x*dcol.y); 123 color.rgb = refcol*(df*df*dcol.x*dcol.y);
124 124
125 //add diffuse contribution (fake blue water, yay!) 125 //add diffuse contribution (fake blue water, yay!)
126 vec3 blue = vec3(0.1, 0.3, 0.6); 126 vec3 blue = vec3(0.1, 0.3, 0.6);
127 color.rgb += (diff/(max(ramp, 1.0)))*vec3(fog.r*blue.r, fog.g*blue.g, fog.b*blue.b); 127 color.rgb += (diff/(max(ramp, 1.0)))*vec3(fog.r*blue.r, fog.g*blue.g, fog.b*blue.b);
128 128
129 //figure out distortion vector (ripply) 129 //figure out distortion vector (ripply)
130 vec2 distort = clamp(((refCoord.xy/refCoord.z) * 0.5 + 0.5 + wavef.xy*refScale),0.0,0.99); 130 vec2 distort = clamp(((refCoord.xy/refCoord.z) * 0.5 + 0.5 + wavef.xy*refScale),0.0,0.99);
131 131
132 //read from framebuffer (offset) 132 //read from framebuffer (offset)
133 vec4 fb = texture2D(screenTex, distort*fbScale); 133 vec4 fb = texture2D(screenTex, distort*fbScale);
134 134
135 //tint by framebuffer 135 //tint by framebuffer
136 color.rgb = da*color.rgb + (1.0-da)*fb.rgb; 136 color.rgb = da*color.rgb + (1.0-da)*fb.rgb;
137 137
138 //render as solid (previous pixel color already present) 138 //render as solid (previous pixel color already present)
139 color.a = 1.0; 139 color.a = 1.0;
140 140
141 //apply fog 141 //apply fog
142 applyScatter(color.rgb); 142 applyScatter(color.rgb);
143 143
144 gl_FragColor = color; 144 gl_FragColor = color;
145} 145}
diff --git a/linden/indra/newview/files.lst b/linden/indra/newview/files.lst
index d6794d7..a4ff014 100644
--- a/linden/indra/newview/files.lst
+++ b/linden/indra/newview/files.lst
@@ -25,7 +25,6 @@ newview/llconfirmationmanager.cpp
25newview/llconsole.cpp 25newview/llconsole.cpp
26newview/llcontainerview.cpp 26newview/llcontainerview.cpp
27newview/llcontroldef.cpp 27newview/llcontroldef.cpp
28newview/llcountdown.cpp
29newview/llcubemap.cpp 28newview/llcubemap.cpp
30newview/llcurrencyuimanager.cpp 29newview/llcurrencyuimanager.cpp
31newview/llcylinder.cpp 30newview/llcylinder.cpp
@@ -53,7 +52,6 @@ newview/lleventpoll.cpp
53newview/llface.cpp 52newview/llface.cpp
54newview/llfasttimerview.cpp 53newview/llfasttimerview.cpp
55newview/llfeaturemanager.cpp 54newview/llfeaturemanager.cpp
56newview/llfft.cpp
57newview/llfilepicker.cpp 55newview/llfilepicker.cpp
58newview/llfirstuse.cpp 56newview/llfirstuse.cpp
59newview/llflexibleobject.cpp 57newview/llflexibleobject.cpp
@@ -237,7 +235,6 @@ newview/lltexlayer.cpp
237newview/lltexturecache.cpp 235newview/lltexturecache.cpp
238newview/lltexturefetch.cpp 236newview/lltexturefetch.cpp
239newview/lltexturectrl.cpp 237newview/lltexturectrl.cpp
240newview/lltexturetable.cpp
241newview/lltextureview.cpp 238newview/lltextureview.cpp
242newview/lltoolbar.cpp 239newview/lltoolbar.cpp
243newview/lltoolbrush.cpp 240newview/lltoolbrush.cpp
@@ -278,6 +275,9 @@ newview/llviewerinventory.cpp
278newview/llviewerjointattachment.cpp 275newview/llviewerjointattachment.cpp
279newview/llviewerjoint.cpp 276newview/llviewerjoint.cpp
280newview/llviewerjointmesh.cpp 277newview/llviewerjointmesh.cpp
278newview/llviewerjointmesh_sse.cpp
279newview/llviewerjointmesh_sse2.cpp
280newview/llviewerjointmesh_vec.cpp
281newview/llviewerjointshape.cpp 281newview/llviewerjointshape.cpp
282newview/llviewerjoystick.cpp 282newview/llviewerjoystick.cpp
283newview/llviewerkeyboard.cpp 283newview/llviewerkeyboard.cpp
@@ -318,7 +318,6 @@ newview/llvotextbubble.cpp
318newview/llvotree.cpp 318newview/llvotree.cpp
319newview/llvovolume.cpp 319newview/llvovolume.cpp
320newview/llvowater.cpp 320newview/llvowater.cpp
321newview/llwaterpatch.cpp
322newview/llwearable.cpp 321newview/llwearable.cpp
323newview/llwearablelist.cpp 322newview/llwearablelist.cpp
324newview/llweb.cpp 323newview/llweb.cpp
diff --git a/linden/indra/newview/gpu_table.txt b/linden/indra/newview/gpu_table.txt
index a6d1dee..74fbe2c 100644
--- a/linden/indra/newview/gpu_table.txt
+++ b/linden/indra/newview/gpu_table.txt
@@ -66,6 +66,9 @@ Intel 915GM .*Intel.*915GM 0
66Intel 945G .*Intel.*945G 0 66Intel 945G .*Intel.*945G 0
67Intel 945GM .*Intel.*945GM 0 67Intel 945GM .*Intel.*945GM 0
68Intel 950 .*Intel.*950.*950 0 68Intel 950 .*Intel.*950.*950 0
69Intel G965 .*Intel.*G965.* 0
70Intel GM965 .*Intel.*GM965.* 0
71Intel G33 .*Intel.*G33.* 0
69Intel Brookdale .*Intel.*Brookdale.* 0 72Intel Brookdale .*Intel.*Brookdale.* 0
70Intel Montara .*Intel.*Montara.* 0 73Intel Montara .*Intel.*Montara.* 0
71Intel Springdale .*Intel.*Springdale.* 0 74Intel Springdale .*Intel.*Springdale.* 0
diff --git a/linden/indra/newview/llagent.cpp b/linden/indra/newview/llagent.cpp
index 150e35f..553c968 100644
--- a/linden/indra/newview/llagent.cpp
+++ b/linden/indra/newview/llagent.cpp
@@ -1025,7 +1025,7 @@ const LLVector3 &LLAgent::getPositionAgent()
1025//----------------------------------------------------------------------------- 1025//-----------------------------------------------------------------------------
1026// getRegionsVisited() 1026// getRegionsVisited()
1027//----------------------------------------------------------------------------- 1027//-----------------------------------------------------------------------------
1028const S32 LLAgent::getRegionsVisited() const 1028S32 LLAgent::getRegionsVisited() const
1029{ 1029{
1030 return mRegionsVisited.size(); 1030 return mRegionsVisited.size();
1031} 1031}
@@ -1033,7 +1033,7 @@ const S32 LLAgent::getRegionsVisited() const
1033//----------------------------------------------------------------------------- 1033//-----------------------------------------------------------------------------
1034// getDistanceTraveled() 1034// getDistanceTraveled()
1035//----------------------------------------------------------------------------- 1035//-----------------------------------------------------------------------------
1036const F64 LLAgent::getDistanceTraveled() const 1036F64 LLAgent::getDistanceTraveled() const
1037{ 1037{
1038 return mDistanceTraveled; 1038 return mDistanceTraveled;
1039} 1039}
diff --git a/linden/indra/newview/llagent.h b/linden/indra/newview/llagent.h
index 0ca9f22..e4d207c 100644
--- a/linden/indra/newview/llagent.h
+++ b/linden/indra/newview/llagent.h
@@ -300,8 +300,8 @@ public:
300 300
301 const LLVector3d &getPositionGlobal(); 301 const LLVector3d &getPositionGlobal();
302 const LLVector3 &getPositionAgent(); 302 const LLVector3 &getPositionAgent();
303 const S32 getRegionsVisited() const; 303 S32 getRegionsVisited() const;
304 const F64 getDistanceTraveled() const; 304 F64 getDistanceTraveled() const;
305 305
306 const LLVector3d &getFocusGlobal() const { return mFocusGlobal; } 306 const LLVector3d &getFocusGlobal() const { return mFocusGlobal; }
307 const LLVector3d &getFocusTargetGlobal() const { return mFocusTargetGlobal; } 307 const LLVector3d &getFocusTargetGlobal() const { return mFocusTargetGlobal; }
diff --git a/linden/indra/newview/llcape.h b/linden/indra/newview/llcape.h
index 1ccdc9c..f491a61 100644
--- a/linden/indra/newview/llcape.h
+++ b/linden/indra/newview/llcape.h
@@ -211,7 +211,8 @@ class LLVOCloth : public LLViewerObject
211 //-------------------------------------- 211 //--------------------------------------
212 LLClothAttributes mAttributes; // these determine the characteristics of the cloth 212 LLClothAttributes mAttributes; // these determine the characteristics of the cloth
213 LLVector3 mAvatarCollisionSpherePosition; // derived from the avatar 213 LLVector3 mAvatarCollisionSpherePosition; // derived from the avatar
214 LLPointer<LLViewerObject> mDummyVO [ CLOTH_MAX_STRANDS ]; 214 // Backlink only; don't make this an LLPointer.
215 LLViewerObject* mDummyVO [ CLOTH_MAX_STRANDS ];
215 LLVolumeImplFlexible* mStrand [ CLOTH_MAX_STRANDS ]; // the array of strands that make up the cloth 216 LLVolumeImplFlexible* mStrand [ CLOTH_MAX_STRANDS ]; // the array of strands that make up the cloth
216 217
217 218
diff --git a/linden/indra/newview/llcontroldef.cpp b/linden/indra/newview/llcontroldef.cpp
index 7481d99..e0153d7 100644
--- a/linden/indra/newview/llcontroldef.cpp
+++ b/linden/indra/newview/llcontroldef.cpp
@@ -1317,6 +1317,12 @@ void declare_settings()
1317 gSavedSettings.declareBOOL("FlycamAbsolute", FALSE, "Treat Flycam values as absolute positions (not deltas)."); 1317 gSavedSettings.declareBOOL("FlycamAbsolute", FALSE, "Treat Flycam values as absolute positions (not deltas).");
1318 gSavedSettings.declareBOOL("FlycamZoomDirect", FALSE, "Map flycam zoom axis directly to camera zoom."); 1318 gSavedSettings.declareBOOL("FlycamZoomDirect", FALSE, "Map flycam zoom axis directly to camera zoom.");
1319 1319
1320 // Vector Processor & Math
1321 gSavedSettings.declareBOOL("VectorizePerfTest", TRUE, "Test SSE/vectorization performance and choose fastest version.");
1322 gSavedSettings.declareBOOL("VectorizeEnable", FALSE, "Enable general vector operations and data alignment.");
1323 gSavedSettings.declareBOOL("VectorizeSkin", TRUE, "Enable vector operations for avatar skinning.");
1324 gSavedSettings.declareU32( "VectorizeProcessor", 0, "0=Compiler Default, 1=SSE, 2=SSE2, autodetected", NO_PERSIST);
1325
1320 // 1326 //
1321 // crash_settings.xml 1327 // crash_settings.xml
1322 // 1328 //
diff --git a/linden/indra/newview/llcountdown.cpp b/linden/indra/newview/llcountdown.cpp
deleted file mode 100644
index 42dc440..0000000
--- a/linden/indra/newview/llcountdown.cpp
+++ /dev/null
@@ -1,106 +0,0 @@
1/**
2 * @file llcountdown.cpp
3 * @brief Implementation of the countdown box.
4 *
5 * Copyright (c) 2002-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29#include "llviewerprecompiledheaders.h"
30
31#include "llcountdown.h"
32
33///----------------------------------------------------------------------------
34/// Local function declarations, constants, enums, and typedefs
35///----------------------------------------------------------------------------
36
37const LLString DEFAULT_BASE_PREFIX("This dialag will close in ");
38const LLString DEFAULT_BASE_SUFFIX(" seconds");
39
40///----------------------------------------------------------------------------
41/// Class llcountdown
42///----------------------------------------------------------------------------
43
44// Default constructor
45LLCountdown::LLCountdown(const std::string& name, const LLRect& rect, F32 seconds,
46 const char* base_prefix, const char* base_suffix) :
47 LLTextBox(name, rect),
48 mSeconds(seconds),
49 mHalfway(seconds/2-0.99f)
50{
51 mExpired.reset();
52 if(base_prefix)
53 {
54 mBasePrefix.assign(base_prefix);
55 }
56 else
57 {
58 mBasePrefix = DEFAULT_BASE_PREFIX;
59 }
60 if(base_suffix)
61 {
62 mBaseSuffix.assign(base_suffix);
63 }
64 else
65 {
66 mBaseSuffix = DEFAULT_BASE_SUFFIX;
67 }
68 S32 s = llfloor(mSeconds);
69 LLString buffer = mBasePrefix + llformat("%d",s) + mBaseSuffix;
70 setText(buffer);
71}
72
73// Destroys the object
74LLCountdown::~LLCountdown()
75{
76}
77
78BOOL LLCountdown::isExpired()
79{
80 if(mExpired.getElapsedTimeF32() > mSeconds)
81 {
82 return TRUE;
83 }
84 return FALSE;
85}
86
87void LLCountdown::draw()
88{
89 F32 elapsed = mExpired.getElapsedTimeF32();
90 if(elapsed > mSeconds)
91 {
92 LLString buffer = mBasePrefix + "0" + mBaseSuffix;
93 setText(buffer);
94 }
95 else if(elapsed > mHalfway)
96 {
97 S32 seconds = llfloor(llmax((mSeconds - elapsed), 0.0f));
98 LLString buffer = mBasePrefix + llformat("%d",seconds) + mBaseSuffix;
99 setText(buffer);
100 }
101 LLTextBox::draw();
102}
103
104///----------------------------------------------------------------------------
105/// Local function definitions
106///----------------------------------------------------------------------------
diff --git a/linden/indra/newview/llcountdown.h b/linden/indra/newview/llcountdown.h
deleted file mode 100644
index 06f6167..0000000
--- a/linden/indra/newview/llcountdown.h
+++ /dev/null
@@ -1,67 +0,0 @@
1/**
2 * @file llcountdown.h
3 * @brief LLCountdown class header file
4 *
5 * Copyright (c) 2002-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29#ifndef LL_LLCOUNTDOWN_H
30#define LL_LLCOUNTDOWN_H
31
32#include "lltimer.h"
33#include "lltextbox.h"
34
35//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
36// Class LLCountdown
37//
38// This class draws a text box that counts down from seconds to zero,
39// with a little bit of slop.
40//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
41
42class LLCountdown : public LLTextBox
43{
44protected:
45 LLString mBasePrefix;
46 LLString mBaseSuffix;
47 LLTimer mExpired;
48 F32 mSeconds;
49 F32 mHalfway;
50
51 void buildLabel();
52
53public:
54 LLCountdown(const std::string& name, const LLRect& rect, F32 seconds,
55 const char* base_prefix = NULL,
56 const char* base_suffix = NULL);
57 virtual ~LLCountdown();
58
59 // cannot be const because our timers are not const. Damn
60 // const-incorrectness.
61 BOOL isExpired();
62
63 virtual void draw();
64};
65
66
67#endif // LL_LLCOUNTDOWN_H
diff --git a/linden/indra/newview/lldrawable.h b/linden/indra/newview/lldrawable.h
index 97e512f..e550142 100644
--- a/linden/indra/newview/lldrawable.h
+++ b/linden/indra/newview/lldrawable.h
@@ -46,6 +46,7 @@
46#include "llviewerobject.h" 46#include "llviewerobject.h"
47#include "llrect.h" 47#include "llrect.h"
48 48
49class LLCamera;
49class LLDrawPool; 50class LLDrawPool;
50class LLDrawable; 51class LLDrawable;
51class LLFace; 52class LLFace;
@@ -88,7 +89,7 @@ public:
88 89
89 const LLMatrix4& getWorldMatrix() const { return mXform.getWorldMatrix(); } 90 const LLMatrix4& getWorldMatrix() const { return mXform.getWorldMatrix(); }
90 const LLMatrix4& getRenderMatrix() const { return isRoot() ? getWorldMatrix() : getParent()->getWorldMatrix(); } 91 const LLMatrix4& getRenderMatrix() const { return isRoot() ? getWorldMatrix() : getParent()->getWorldMatrix(); }
91 const void setPosition(LLVector3 v) const { } 92 void setPosition(LLVector3 v) const { }
92 const LLVector3& getPosition() const { return mXform.getPosition(); } 93 const LLVector3& getPosition() const { return mXform.getPosition(); }
93 const LLVector3& getWorldPosition() const { return mXform.getPositionW(); } 94 const LLVector3& getWorldPosition() const { return mXform.getPositionW(); }
94 const LLVector3 getPositionAgent() const; 95 const LLVector3 getPositionAgent() const;
@@ -96,14 +97,14 @@ public:
96 const LLVector3& getScale() const { return mCurrentScale; } 97 const LLVector3& getScale() const { return mCurrentScale; }
97 const LLQuaternion& getWorldRotation() const { return mXform.getWorldRotation(); } 98 const LLQuaternion& getWorldRotation() const { return mXform.getWorldRotation(); }
98 const LLQuaternion& getRotation() const { return mXform.getRotation(); } 99 const LLQuaternion& getRotation() const { return mXform.getRotation(); }
99 const F32 getIntensity() const { return llmin(mXform.getScale().mV[0], 4.f); } 100 F32 getIntensity() const { return llmin(mXform.getScale().mV[0], 4.f); }
100 const S32 getLOD() const { return mVObjp ? mVObjp->getLOD() : 1; } 101 S32 getLOD() const { return mVObjp ? mVObjp->getLOD() : 1; }
101 const F64 getBinRadius() const { return mBinRadius; } 102 F64 getBinRadius() const { return mBinRadius; }
102 void getMinMax(LLVector3& min,LLVector3& max) const { mXform.getMinMax(min,max); } 103 void getMinMax(LLVector3& min,LLVector3& max) const { mXform.getMinMax(min,max); }
103 LLXformMatrix* getXform() { return &mXform; } 104 LLXformMatrix* getXform() { return &mXform; }
104 105
105 const U32 getState() const { return mState; } 106 U32 getState() const { return mState; }
106 const BOOL isState (U32 bits) const { return ((mState & bits) != 0); } 107 BOOL isState (U32 bits) const { return ((mState & bits) != 0); }
107 void setState (U32 bits) { mState |= bits; } 108 void setState (U32 bits) { mState |= bits; }
108 void clearState(U32 bits) { mState &= ~bits; } 109 void clearState(U32 bits) { mState &= ~bits; }
109 110
diff --git a/linden/indra/newview/lldriverparam.h b/linden/indra/newview/lldriverparam.h
index f7b0819..fb13e50 100644
--- a/linden/indra/newview/lldriverparam.h
+++ b/linden/indra/newview/lldriverparam.h
@@ -104,7 +104,8 @@ protected:
104 typedef std::vector<LLDrivenEntry> entry_list_t; 104 typedef std::vector<LLDrivenEntry> entry_list_t;
105 entry_list_t mDriven; 105 entry_list_t mDriven;
106 LLViewerVisualParam* mCurrentDistortionParam; 106 LLViewerVisualParam* mCurrentDistortionParam;
107 LLPointer<LLVOAvatar> mAvatarp; 107 // Backlink only; don't make this an LLPointer.
108 LLVOAvatar* mAvatarp;
108}; 109};
109 110
110#endif // LL_LLDRIVERPARAM_H 111#endif // LL_LLDRIVERPARAM_H
diff --git a/linden/indra/newview/llface.cpp b/linden/indra/newview/llface.cpp
index 782048c..cfda05a 100644
--- a/linden/indra/newview/llface.cpp
+++ b/linden/indra/newview/llface.cpp
@@ -936,7 +936,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
936 BOOL is_static = mDrawablep->isStatic(); 936 BOOL is_static = mDrawablep->isStatic();
937 BOOL is_global = is_static; 937 BOOL is_global = is_static;
938 938
939 if (-1 == index_offset) 939 if (index_offset == (U32) -1)
940 { 940 {
941 return TRUE; 941 return TRUE;
942 } 942 }
diff --git a/linden/indra/newview/llface.h b/linden/indra/newview/llface.h
index 6870789..711cd8e 100644
--- a/linden/indra/newview/llface.h
+++ b/linden/indra/newview/llface.h
@@ -75,11 +75,11 @@ public:
75 75
76 const LLMatrix4& getWorldMatrix() const { return mVObjp->getWorldMatrix(mXform); } 76 const LLMatrix4& getWorldMatrix() const { return mVObjp->getWorldMatrix(mXform); }
77 const LLMatrix4& getRenderMatrix() const; 77 const LLMatrix4& getRenderMatrix() const;
78 const U32 getIndicesCount() const { return mIndicesCount; }; 78 U32 getIndicesCount() const { return mIndicesCount; };
79 const S32 getIndicesStart() const { return mIndicesIndex; }; 79 S32 getIndicesStart() const { return mIndicesIndex; };
80 const S32 getGeomCount() const { return mGeomCount; } // vertex count for this face 80 S32 getGeomCount() const { return mGeomCount; } // vertex count for this face
81 const S32 getGeomIndex() const { return mGeomIndex; } // index into draw pool 81 S32 getGeomIndex() const { return mGeomIndex; } // index into draw pool
82 const U32 getGeomStart() const { return mGeomIndex; } // index into draw pool 82 U32 getGeomStart() const { return mGeomIndex; } // index into draw pool
83 LLViewerImage* getTexture() const { return mTexture; } 83 LLViewerImage* getTexture() const { return mTexture; }
84 void setTexture(LLViewerImage* tex) { mTexture = tex; } 84 void setTexture(LLViewerImage* tex) { mTexture = tex; }
85 LLXformMatrix* getXform() const { return mXform; } 85 LLXformMatrix* getXform() const { return mXform; }
diff --git a/linden/indra/newview/llfft.cpp b/linden/indra/newview/llfft.cpp
deleted file mode 100644
index 2b80ad9..0000000
--- a/linden/indra/newview/llfft.cpp
+++ /dev/null
@@ -1,577 +0,0 @@
1/**
2 * @file llfft.cpp
3 * @brief FFT function implementations
4 *
5 * Copyright (c) 2003-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29/*
30 * Fast Fourier Transform
31 *
32 */
33#include "llviewerprecompiledheaders.h"
34
35#include "llfft.h"
36#include "llerror.h"
37
38/*
39**
40*********************************************************************
41** Forward and inverse discrete Fourier transforms on complex data **
42*********************************************************************
43**
44**
45** forward_fft(array, rows, cols)
46** COMPLEX *array;
47** S32 rows, cols;
48**
49** inverse_fft(array, rows, cols)
50** COMPLEX *array;
51** S32 rows, cols;
52**
53** These entry points compute the forward and inverse DFT's, respectively,
54** of a single-precision COMPLEX array.
55**
56** The result is a COMPLEX array of the same size, returned in
57** the same space as the input array. That is, the original array is
58** overwritten and destroyed.
59**
60** Rows and columns must each be an integral power of 2.
61**
62** These routines return integer value -1 if an error was detected,
63** 0 otherwise
64**
65** This implementation of the DFT uses the transform pair defined as follows.
66**
67** Let there be two COMPLEX arrays each with n rows and m columns
68** Index them as
69** f(x,y): 0 <= x <= m - 1, 0 <= y <= n - 1
70** F(u,v): -m/2 <= u <= m/2 - 1, -n/2 <= v <= n/2 - 1
71**
72** Then the forward and inverse transforms are related as
73**
74** Forward:
75**
76** F(u,v) = \sum_{x=0}^{m-1} \sum_{y=0}^{n-1}
77** f(x,y) \exp{-2\pi i (ux/m + vy/n)}
78**
79**
80** Inverse:
81**
82** f(x,y) = 1/(mn) \sum_{u=-m/2}^{m/2-1} \sum_{v=-n/2}^{n/2-1}
83** F(u,v) \exp{2\pi i (ux/m + vy/n)}
84**
85** Therefore, the transforms have these properties:
86** 1. \sum_x \sum_y f(x,y) = F(0,0)
87** 2. m n \sum_x \sum_y |f(x,y)|^2 = \sum_u \sum_v |F(u,v)|^2
88**
89*/
90
91
92//DPCOMPLEX *stageBuff; /* buffer to hold a row or column at a time */
93//COMPLEX *bigBuff; /* a pointer to the input array */
94
95
96/*
97 * These macros move complex data between bigBuff and
98 * stageBuff
99 */
100
101inline void LoadRow(DPCOMPLEX* stageBuff, COMPLEX* bigBuff, U32 row, U32 cols)
102{
103 for (U32 j = row*cols, k = 0 ; k < cols ; j++, k++)
104 {
105 stageBuff[k].re = bigBuff[j].re;
106 stageBuff[k].im = bigBuff[j].im;
107 }
108}
109
110inline void StoreRow(DPCOMPLEX* stageBuff, COMPLEX* bigBuff, U32 row, U32 cols)
111{
112 for (U32 j = row*cols, k = 0 ; k < cols ; j++, k++)
113 {
114 bigBuff[j].re = (F32)stageBuff[k].re;
115 bigBuff[j].im = (F32)stageBuff[k].im;
116 }
117}
118
119inline void LoadCol(DPCOMPLEX* stageBuff, COMPLEX* bigBuff, U32 col, U32 rows, U32 cols)
120{
121 for (U32 j = col,k = 0 ; k < rows ; j+=cols, k++)
122 {
123 stageBuff[k].re = bigBuff[j].re;
124 stageBuff[k].im = bigBuff[j].im;
125 }
126}
127
128inline void StoreCol(DPCOMPLEX* stageBuff, COMPLEX* bigBuff, U32 col, U32 rows, U32 cols)
129{
130 for (U32 j = col,k = 0 ; k < rows ; j+=cols, k++)
131 {
132 bigBuff[j].re = (F32)stageBuff[k].re;
133 bigBuff[j].im = (F32)stageBuff[k].im;
134 }
135}
136
137
138/* do something with an error message */
139inline void handle_error(S8* msg)
140{
141 llerrs << msg << llendl;
142}
143
144
145/*
146** compute DFT: forward if direction==0, inverse if direction==1
147** array must be COMPLEX
148*/
149BOOL fft(const LLFFTPlan& plan, COMPLEX *array, S32 rows, S32 cols, S32 direction)
150{
151 S32 i;
152
153 if (!plan.valid() || plan.rows() != rows || plan.cols() != cols)
154 return FALSE;
155
156 /* compute transform row by row */
157
158 if(cols>1)
159 {
160 for(i=0;i<rows;i++)
161 {
162 LoadRow(plan.buffer(), array, i, cols);
163 FFT842(direction, cols, plan.buffer());
164 StoreRow(plan.buffer(), array, i, cols);
165 }
166 }
167
168 if(rows<2) /* done */
169 {
170 //freeBuffer();
171 return TRUE;
172 }
173
174
175 /* compute transform column by column */
176
177 for(i=0;i<cols;i++)
178 {
179 LoadCol(plan.buffer(), array, i, rows, cols);
180 FFT842(direction, rows, plan.buffer());
181 StoreCol(plan.buffer(), array, i, rows, cols);
182 }
183
184 //freeBuffer();
185
186 return TRUE;
187}
188
189
190
191/*
192** FFT842
193** This routine replaces the input DPCOMPLEX vector by its
194** finite discrete complex fourier transform if in==0.
195** It replaces the input DPCOMPLEX vector by its
196** finite discrete complex inverse fourier transform if in==1.
197**
198** in - FORWARD or INVERSE
199** n - length of vector
200** b - input vector
201**
202** It performs as many base 8 iterations as possible and
203** then finishes with a base 4 iteration or a base 2
204** iteration if needed.
205**
206** Ported from the FORTRAN code in Programming for Digital Signal Processing,
207** IEEE Press 1979, Section 1, by G. D. Bergland and M. T. Dolan
208**
209*/
210void FFT842(S32 in, S32 n, DPCOMPLEX *b)
211{
212 F64 fn, r, fi;
213
214 S32 L[16],L1,L2,L3,L4,L5,L6,L7,L8,L9,L10,L11,L12,L13,L14,L15;
215 S32 j1,j2,j3,j4,j5,j6,j7,j8,j9,j10,j11,j12,j13,j14;
216 S32 i, j, ij, ji, ij1, ji1;
217 S32 n2pow, n8pow, nthpo, ipass, nxtlt, lengt;
218
219 n2pow = fastlog2(n);
220 nthpo = n;
221 fn = 1.0 / (F64)nthpo;
222
223
224 if(in==FORWARD)
225 {
226 /* take conjugate */
227 for(i=0;i<n;i++)
228 {
229 b[i].im *= -1.0;
230 }
231 }
232
233 if(in==INVERSE)
234 {
235 /* scramble inputs */
236 for(i=0,j=n/2;j<n;i++,j++)
237 {
238 r = b[j].re;
239 fi = b[j].im;
240 b[j].re = b[i].re;
241 b[j].im = b[i].im;
242 b[i].re = r;
243 b[i].im = fi;
244 }
245 }
246
247 n8pow = n2pow/3;
248
249 if(n8pow)
250 {
251 /* radix 8 iterations */
252 for(ipass=1;ipass<=n8pow;ipass++)
253 {
254 nxtlt = 0x1 << (n2pow - 3*ipass);
255 lengt = 8*nxtlt;
256 R8TX(nxtlt,nthpo,lengt,
257 b,b+nxtlt,b+2*nxtlt,
258 b+3*nxtlt,b+4*nxtlt,b+5*nxtlt,
259 b+6*nxtlt,b+7*nxtlt);
260 }
261 }
262
263 if(n2pow%3 == 1)
264 {
265 /* radix 2 iteration needed */
266 R2TX(nthpo,b,b+1);
267 }
268
269
270 if(n2pow%3 == 2)
271 {
272 /* radix 4 iteration needed */
273 R4TX(nthpo,b,b+1,b+2,b+3);
274 }
275
276
277
278 for(j=1;j<=15;j++)
279 {
280 L[j] = 1;
281 if(j-n2pow <= 0) L[j] = 0x1 << (n2pow + 1 - j);
282 }
283 L15=L[1];L14=L[2];L13=L[3];L12=L[4];L11=L[5];L10=L[6];L9=L[7];
284 L8=L[8];L7=L[9];L6=L[10];L5=L[11];L4=L[12];L3=L[13];L2=L[14];L1=L[15];
285
286 ij = 1;
287
288 for(j1=1;j1<=L1;j1++)
289 for(j2=j1;j2<=L2;j2+=L1)
290 for(j3=j2;j3<=L3;j3+=L2)
291 for(j4=j3;j4<=L4;j4+=L3)
292 for(j5=j4;j5<=L5;j5+=L4)
293 for(j6=j5;j6<=L6;j6+=L5)
294 for(j7=j6;j7<=L7;j7+=L6)
295 for(j8=j7;j8<=L8;j8+=L7)
296 for(j9=j8;j9<=L9;j9+=L8)
297 for(j10=j9;j10<=L10;j10+=L9)
298 for(j11=j10;j11<=L11;j11+=L10)
299 for(j12=j11;j12<=L12;j12+=L11)
300 for(j13=j12;j13<=L13;j13+=L12)
301 for(j14=j13;j14<=L14;j14+=L13)
302 for(ji=j14;ji<=L15;ji+=L14)
303 {
304 ij1 = ij-1;
305 ji1 = ji-1;
306
307 if(ij-ji<0)
308 {
309 r = b[ij1].re;
310 b[ij1].re = b[ji1].re;
311 b[ji1].re = r;
312 fi = b[ij1].im;
313 b[ij1].im = b[ji1].im;
314 b[ji1].im = fi;
315 }
316 ij++;
317 }
318
319 if(in==FORWARD) // take conjugates & unscramble outputs
320 {
321 for(i=0,j=n/2;j<n;i++,j++)
322 {
323 r = b[j].re;
324 fi = b[j].im;
325 b[j].re = b[i].re;
326 b[j].im = -b[i].im;
327 b[i].re = r;
328 b[i].im = -fi;
329 }
330 }
331
332 if(in==INVERSE) // scale outputs
333 {
334 for(i=0;i<nthpo;i++)
335 {
336 b[i].re *= fn;
337 b[i].im *= fn;
338 }
339 }
340}
341
342
343/*
344** radix 2 iteration subroutine
345*/
346void R2TX(S32 nthpo, DPCOMPLEX *c0, DPCOMPLEX *c1)
347{
348 S32 k,kk;
349 F64 *cr0, *ci0, *cr1, *ci1, r1, fi1;
350
351 cr0 = &(c0[0].re);
352 ci0 = &(c0[0].im);
353 cr1 = &(c1[0].re);
354 ci1 = &(c1[0].im);
355
356 for(k = 0; k < nthpo; k += 2)
357 {
358 kk = k*2;
359
360 r1 = cr0[kk] + cr1[kk];
361 cr1[kk] = cr0[kk] - cr1[kk];
362 cr0[kk] = r1;
363 fi1 = ci0[kk] + ci1[kk];
364 ci1[kk] = ci0[kk] - ci1[kk];
365 ci0[kk] = fi1;
366 }
367}
368
369
370/*
371** radix 4 iteration subroutine
372*/
373void R4TX(S32 nthpo, DPCOMPLEX *c0, DPCOMPLEX *c1, DPCOMPLEX *c2, DPCOMPLEX *c3)
374{
375 S32 k,kk;
376 F64 *cr0, *ci0, *cr1, *ci1, *cr2, *ci2, *cr3, *ci3;
377 F64 r1,r2,r3,r4,i1,i2,i3,i4;
378
379 cr0 = &(c0[0].re);
380 cr1 = &(c1[0].re);
381 cr2 = &(c2[0].re);
382 cr3 = &(c3[0].re);
383 ci0 = &(c0[0].im);
384 ci1 = &(c1[0].im);
385 ci2 = &(c2[0].im);
386 ci3 = &(c3[0].im);
387
388 for(k = 1; k <= nthpo; k += 4)
389 {
390 kk = (k-1)*2; /* real and imag parts alternate */
391
392 r1 = cr0[kk] + cr2[kk];
393 r2 = cr0[kk] - cr2[kk];
394 r3 = cr1[kk] + cr3[kk];
395 r4 = cr1[kk] - cr3[kk];
396 i1 = ci0[kk] + ci2[kk];
397 i2 = ci0[kk] - ci2[kk];
398 i3 = ci1[kk] + ci3[kk];
399 i4 = ci1[kk] - ci3[kk];
400 cr0[kk] = r1 + r3;
401 ci0[kk] = i1 + i3;
402 cr1[kk] = r1 - r3;
403 ci1[kk] = i1 - i3;
404 cr2[kk] = r2 - i4;
405 ci2[kk] = i2 + r4;
406 cr3[kk] = r2 + i4;
407 ci3[kk] = i2 - r4;
408 }
409}
410
411
412
413/*
414** radix 8 iteration subroutine
415*/
416void R8TX(S32 nxtlt, S32 nthpo, S32 lengt, DPCOMPLEX *cc0, DPCOMPLEX *cc1, DPCOMPLEX *cc2,
417 DPCOMPLEX *cc3, DPCOMPLEX *cc4, DPCOMPLEX *cc5, DPCOMPLEX *cc6, DPCOMPLEX *cc7)
418{
419 S32 j,k,kk;
420 F64 scale, arg, tr, ti;
421 F64 c1,c2,c3,c4,c5,c6,c7;
422 F64 s1,s2,s3,s4,s5,s6,s7;
423 F64 ar0,ar1,ar2,ar3,ar4,ar5,ar6,ar7;
424 F64 ai0,ai1,ai2,ai3,ai4,ai5,ai6,ai7;
425 F64 br0,br1,br2,br3,br4,br5,br6,br7;
426 F64 bi0,bi1,bi2,bi3,bi4,bi5,bi6,bi7;
427
428 F64 *cr0,*cr1,*cr2,*cr3,*cr4,*cr5,*cr6,*cr7;
429 F64 *ci0,*ci1,*ci2,*ci3,*ci4,*ci5,*ci6,*ci7;
430
431 cr0 = &(cc0[0].re);
432 cr1 = &(cc1[0].re);
433 cr2 = &(cc2[0].re);
434 cr3 = &(cc3[0].re);
435 cr4 = &(cc4[0].re);
436 cr5 = &(cc5[0].re);
437 cr6 = &(cc6[0].re);
438 cr7 = &(cc7[0].re);
439
440 ci0 = &(cc0[0].im);
441 ci1 = &(cc1[0].im);
442 ci2 = &(cc2[0].im);
443 ci3 = &(cc3[0].im);
444 ci4 = &(cc4[0].im);
445 ci5 = &(cc5[0].im);
446 ci6 = &(cc6[0].im);
447 ci7 = &(cc7[0].im);
448
449
450 scale = F_TWO_PI/lengt;
451
452 for(j = 1; j <= nxtlt; j++)
453 {
454 arg = (j-1)*scale;
455 c1 = cos(arg);
456 s1 = sin(arg);
457 c2 = c1*c1 - s1*s1;
458 s2 = c1*s1 + c1*s1;
459 c3 = c1*c2 - s1*s2;
460 s3 = c2*s1 + s2*c1;
461 c4 = c2*c2 - s2*s2;
462 s4 = c2*s2 + c2*s2;
463 c5 = c2*c3 - s2*s3;
464 s5 = c3*s2 + s3*c2;
465 c6 = c3*c3 - s3*s3;
466 s6 = c3*s3 + c3*s3;
467 c7 = c3*c4 - s3*s4;
468 s7 = c4*s3 + s4*c3;
469
470 for(k = j; k <= nthpo; k += lengt)
471 {
472 kk = (k-1)*2; /* index by twos; re & im alternate */
473
474 ar0 = cr0[kk] + cr4[kk];
475 ar1 = cr1[kk] + cr5[kk];
476 ar2 = cr2[kk] + cr6[kk];
477 ar3 = cr3[kk] + cr7[kk];
478 ar4 = cr0[kk] - cr4[kk];
479 ar5 = cr1[kk] - cr5[kk];
480 ar6 = cr2[kk] - cr6[kk];
481 ar7 = cr3[kk] - cr7[kk];
482 ai0 = ci0[kk] + ci4[kk];
483 ai1 = ci1[kk] + ci5[kk];
484 ai2 = ci2[kk] + ci6[kk];
485 ai3 = ci3[kk] + ci7[kk];
486 ai4 = ci0[kk] - ci4[kk];
487 ai5 = ci1[kk] - ci5[kk];
488 ai6 = ci2[kk] - ci6[kk];
489 ai7 = ci3[kk] - ci7[kk];
490 br0 = ar0 + ar2;
491 br1 = ar1 + ar3;
492 br2 = ar0 - ar2;
493 br3 = ar1 - ar3;
494 br4 = ar4 - ai6;
495 br5 = ar5 - ai7;
496 br6 = ar4 + ai6;
497 br7 = ar5 + ai7;
498 bi0 = ai0 + ai2;
499 bi1 = ai1 + ai3;
500 bi2 = ai0 - ai2;
501 bi3 = ai1 - ai3;
502 bi4 = ai4 + ar6;
503 bi5 = ai5 + ar7;
504 bi6 = ai4 - ar6;
505 bi7 = ai5 - ar7;
506 cr0[kk] = br0 + br1;
507 ci0[kk] = bi0 + bi1;
508 if(j > 1)
509 {
510 cr1[kk] = c4*(br0-br1) - s4*(bi0-bi1);
511 cr2[kk] = c2*(br2-bi3) - s2*(bi2+br3);
512 cr3[kk] = c6*(br2+bi3) - s6*(bi2-br3);
513 ci1[kk] = c4*(bi0-bi1) + s4*(br0-br1);
514 ci2[kk] = c2*(bi2+br3) + s2*(br2-bi3);
515 ci3[kk] = c6*(bi2-br3) + s6*(br2+bi3);
516 tr = OO_SQRT2*(br5-bi5);
517 ti = OO_SQRT2*(br5+bi5);
518 cr4[kk] = c1*(br4+tr) - s1*(bi4+ti);
519 ci4[kk] = c1*(bi4+ti) + s1*(br4+tr);
520 cr5[kk] = c5*(br4-tr) - s5*(bi4-ti);
521 ci5[kk] = c5*(bi4-ti) + s5*(br4-tr);
522 tr = -OO_SQRT2*(br7+bi7);
523 ti = OO_SQRT2*(br7-bi7);
524 cr6[kk] = c3*(br6+tr) - s3*(bi6+ti);
525 ci6[kk] = c3*(bi6+ti) + s3*(br6+tr);
526 cr7[kk] = c7*(br6-tr) - s7*(bi6-ti);
527 ci7[kk] = c7*(bi6-ti) + s7*(br6-tr);
528 }
529 else
530 {
531 cr1[kk] = br0 - br1;
532 cr2[kk] = br2 - bi3;
533 cr3[kk] = br2 + bi3;
534 ci1[kk] = bi0 - bi1;
535 ci2[kk] = bi2 + br3;
536 ci3[kk] = bi2 - br3;
537 tr = OO_SQRT2*(br5-bi5);
538 ti = OO_SQRT2*(br5+bi5);
539 cr4[kk] = br4 + tr;
540 ci4[kk] = bi4 + ti;
541 cr5[kk] = br4 - tr;
542 ci5[kk] = bi4 - ti;
543 tr = -OO_SQRT2*(br7+bi7);
544 ti = OO_SQRT2*(br7-bi7);
545 cr6[kk] = br6 + tr;
546 ci6[kk] = bi6 + ti;
547 cr7[kk] = br6 - tr;
548 ci7[kk] = bi6 - ti;
549 }
550 }
551 }
552}
553
554
555/* see if exactly one bit is set in integer argument */
556S32 power_of_2(S32 n)
557{
558 S32 bits=0;
559 while(n)
560 {
561 bits += n & 1;
562 n >>= 1;
563 }
564 return(bits==1);
565}
566
567/* get binary log of integer argument; exact if n a power of 2 */
568S32 fastlog2(S32 n)
569{
570 S32 log = -1;
571 while(n)
572 {
573 log++;
574 n >>= 1;
575 }
576 return(log);
577}
diff --git a/linden/indra/newview/llfft.h b/linden/indra/newview/llfft.h
deleted file mode 100644
index 07e868b..0000000
--- a/linden/indra/newview/llfft.h
+++ /dev/null
@@ -1,105 +0,0 @@
1/**
2 * @file llfft.h
3 * @brief FFT function definitions
4 *
5 * Copyright (c) 2003-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29#ifndef LL_LLFFT_H
30#define LL_LLFFT_H
31
32/*
33 * Fast Fourier Transform
34 *
35 */
36
37//#include <stdio.h>
38//#include <math.h>
39
40#include "llmath.h"
41
42#define FORWARD 0
43#define INVERSE 1
44
45typedef struct {F32 re; F32 im;} COMPLEX;
46typedef struct {F64 re; F64 im;} DPCOMPLEX;
47
48
49void FFT842(S32 in, S32 n, DPCOMPLEX *b);
50void R2TX(S32 nthpo, DPCOMPLEX *c0, DPCOMPLEX *c1);
51void R4TX(S32 nthpo, DPCOMPLEX *c0, DPCOMPLEX *c1, DPCOMPLEX *c2, DPCOMPLEX *c3);
52void R8TX(S32 nxtlt, S32 nthpo, S32 lengt, DPCOMPLEX *cc0, DPCOMPLEX *cc1, DPCOMPLEX *cc2,
53 DPCOMPLEX *cc3, DPCOMPLEX *cc4, DPCOMPLEX *cc5, DPCOMPLEX *cc6, DPCOMPLEX *cc7);
54S32 power_of_2(S32 n);
55S32 fastlog2(S32 n);
56
57class LLFFTPlan
58{
59private:
60 S32 mRows;
61 S32 mCols;
62 S32 mSize;
63 DPCOMPLEX* mBuff;
64public:
65 LLFFTPlan() : mRows(0), mCols(0), mSize(0), mBuff(0) {}
66 LLFFTPlan(S32 rows, S32 cols) { init(rows, cols); }
67 ~LLFFTPlan() { destroy(); }
68
69 void init(S32 rows, S32 cols)
70 {
71 if(power_of_2(rows) && power_of_2(cols))
72 {
73 mRows = rows;
74 mCols = cols;
75 mSize = mRows > mCols ? mRows : mCols;
76 mBuff = new DPCOMPLEX[mSize];
77 }
78 }
79 void destroy()
80 {
81 delete [] mBuff;
82 mSize = 0;
83 }
84
85 BOOL valid() const { return mBuff != NULL; }
86 DPCOMPLEX* buffer() const { return mBuff; }
87 S32 rows() const { return mRows; }
88 S32 cols() const { return mCols; }
89};
90
91S32 fft(const LLFFTPlan& plan, COMPLEX *array, S32 rows, S32 cols, S32 direction);
92
93/* do forward transform. array must be COMPLEX */
94inline S32 forward_fft(const LLFFTPlan& plan, COMPLEX *array, S32 rows, S32 cols)
95{
96 return fft(plan, array, rows, cols, FORWARD);
97}
98
99/* do inverse transform. array must be COMPLEX */
100inline S32 inverse_fft(const LLFFTPlan& plan, COMPLEX *array, S32 rows, S32 cols)
101{
102 return fft(plan, array, rows, cols, INVERSE);
103}
104
105#endif
diff --git a/linden/indra/newview/llflexibleobject.cpp b/linden/indra/newview/llflexibleobject.cpp
index 8e4fe91..836cfdc 100644
--- a/linden/indra/newview/llflexibleobject.cpp
+++ b/linden/indra/newview/llflexibleobject.cpp
@@ -626,7 +626,7 @@ void LLVolumeImplFlexible::onSetScale(const LLVector3& scale, BOOL damped)
626 626
627BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable) 627BOOL LLVolumeImplFlexible::doUpdateGeometry(LLDrawable *drawable)
628{ 628{
629 LLVOVolume *volume = (LLVOVolume*)mVO.get(); 629 LLVOVolume *volume = (LLVOVolume*)mVO;
630 630
631 if (volume->mDrawable.isNull()) // Not sure why this is happening, but it is... 631 if (volume->mDrawable.isNull()) // Not sure why this is happening, but it is...
632 { 632 {
@@ -742,7 +742,7 @@ void LLVolumeImplFlexible::updateRelativeXform()
742{ 742{
743 LLQuaternion delta_rot; 743 LLQuaternion delta_rot;
744 LLVector3 delta_pos, delta_scale; 744 LLVector3 delta_pos, delta_scale;
745 LLVOVolume* vo = (LLVOVolume*) mVO.get(); 745 LLVOVolume* vo = (LLVOVolume*) mVO;
746 746
747 //matrix from local space to parent relative/global space 747 //matrix from local space to parent relative/global space
748 delta_rot = vo->mDrawable->isSpatialRoot() ? LLQuaternion() : vo->mDrawable->getRotation(); 748 delta_rot = vo->mDrawable->isSpatialRoot() ? LLQuaternion() : vo->mDrawable->getRotation();
diff --git a/linden/indra/newview/llflexibleobject.h b/linden/indra/newview/llflexibleobject.h
index 507073b..f3da5bb 100644
--- a/linden/indra/newview/llflexibleobject.h
+++ b/linden/indra/newview/llflexibleobject.h
@@ -111,7 +111,8 @@ class LLVolumeImplFlexible : public LLVolumeInterface
111 //-------------------------------------- 111 //--------------------------------------
112 // private members 112 // private members
113 //-------------------------------------- 113 //--------------------------------------
114 LLPointer<LLViewerObject> mVO; 114 // Backlink only; don't make this an LLPointer.
115 LLViewerObject* mVO;
115 LLTimer mTimer; 116 LLTimer mTimer;
116 LLVector3 mAnchorPosition; 117 LLVector3 mAnchorPosition;
117 LLVector3 mParentPosition; 118 LLVector3 mParentPosition;
diff --git a/linden/indra/newview/llfloaterabout.cpp b/linden/indra/newview/llfloaterabout.cpp
index 372d7e0..cc3bb08 100644
--- a/linden/indra/newview/llfloaterabout.cpp
+++ b/linden/indra/newview/llfloaterabout.cpp
@@ -82,9 +82,10 @@ LLFloaterAbout::LLFloaterAbout()
82 82
83 // Version string 83 // Version string
84 LLString version = gSecondLife 84 LLString version = gSecondLife
85 + llformat(" %d.%d.%d (%d) %s %s", 85 + llformat(" %d.%d.%d (%d) %s %s (%s)",
86 LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD, 86 LL_VERSION_MAJOR, LL_VERSION_MINOR, LL_VERSION_PATCH, LL_VIEWER_BUILD,
87 __DATE__, __TIME__); 87 __DATE__, __TIME__,
88 gChannelName.c_str());
88 support.append(version); 89 support.append(version);
89 support.append("\n\n"); 90 support.append("\n\n");
90 91
diff --git a/linden/indra/newview/llfloaterchat.cpp b/linden/indra/newview/llfloaterchat.cpp
index 5e416d4..dd79afd 100644
--- a/linden/indra/newview/llfloaterchat.cpp
+++ b/linden/indra/newview/llfloaterchat.cpp
@@ -187,22 +187,22 @@ void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file)
187 // could flash the chat button in the status bar here. JC 187 // could flash the chat button in the status bar here. JC
188 if (!gFloaterChat) return; 188 if (!gFloaterChat) return;
189 189
190 LLViewerTextEditor* HistoryEditor = (LLViewerTextEditor*)gFloaterChat->getChildByName("Chat History Editor"); 190 LLViewerTextEditor* history_editor = (LLViewerTextEditor*)gFloaterChat->getChildByName("Chat History Editor");
191 LLViewerTextEditor* HistoryEditorWithMute = (LLViewerTextEditor*)gFloaterChat->getChildByName("Chat History Editor with mute"); 191 LLViewerTextEditor* history_editor_with_mute = (LLViewerTextEditor*)gFloaterChat->getChildByName("Chat History Editor with mute");
192 192
193 HistoryEditor->setParseHTML(TRUE); 193 history_editor->setParseHTML(TRUE);
194 HistoryEditorWithMute->setParseHTML(TRUE); 194 history_editor_with_mute->setParseHTML(TRUE);
195 195
196 if (!chat.mMuted) 196 if (!chat.mMuted)
197 { 197 {
198 add_timestamped_line(HistoryEditor, chat.mText, color); 198 add_timestamped_line(history_editor, chat.mText, color);
199 add_timestamped_line(HistoryEditorWithMute, chat.mText, color); 199 add_timestamped_line(history_editor_with_mute, chat.mText, color);
200 } 200 }
201 else 201 else
202 { 202 {
203 // desaturate muted chat 203 // desaturate muted chat
204 LLColor4 muted_color = lerp(color, LLColor4::grey, 0.5f); 204 LLColor4 muted_color = lerp(color, LLColor4::grey, 0.5f);
205 add_timestamped_line(HistoryEditorWithMute, chat.mText, color); 205 add_timestamped_line(history_editor_with_mute, chat.mText, color);
206 } 206 }
207 207
208 if (!chat.mMuted 208 if (!chat.mMuted
@@ -211,17 +211,19 @@ void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file)
211 && chat.mFromID != gAgent.getID()) 211 && chat.mFromID != gAgent.getID())
212 { 212 {
213 213
214 LLComboBox* ChatterCombo = LLUICtrlFactory::getComboBoxByName(gFloaterChat,"chatter combobox"); 214 LLComboBox* chatter_combo = LLUICtrlFactory::getComboBoxByName(gFloaterChat,"chatter combobox");
215 215
216 if(!ChatterCombo) 216 if(!chatter_combo)
217 return; 217 {
218 return;
219 }
218 220
219 if (!ChatterCombo->setCurrentByID(chat.mFromID)) 221 if (!chatter_combo->setCurrentByID(chat.mFromID))
220 { 222 {
221 // if we have too many items... 223 // if we have too many items...
222 if (ChatterCombo->getItemCount() >= MAX_CHATTER_COUNT) 224 if (chatter_combo->getItemCount() >= MAX_CHATTER_COUNT)
223 { 225 {
224 ChatterCombo->remove(0); 226 chatter_combo->remove(0);
225 } 227 }
226 228
227 LLMute mute(chat.mFromID, chat.mFromName); 229 LLMute mute(chat.mFromID, chat.mFromName);
@@ -234,8 +236,8 @@ void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file)
234 mute.mType = LLMute::AGENT; 236 mute.mType = LLMute::AGENT;
235 } 237 }
236 LLString item = mute.getDisplayName(); 238 LLString item = mute.getDisplayName();
237 ChatterCombo->add(item, chat.mFromID); 239 chatter_combo->add(item, chat.mFromID);
238 ChatterCombo->setCurrentByIndex(ChatterCombo->getItemCount() - 1); 240 chatter_combo->setCurrentByIndex(chatter_combo->getItemCount() - 1);
239 gFloaterChat->childSetEnabled("Mute resident",TRUE); 241 gFloaterChat->childSetEnabled("Mute resident",TRUE);
240 } 242 }
241 } 243 }
@@ -246,11 +248,11 @@ void LLFloaterChat::setHistoryCursorAndScrollToEnd()
246{ 248{
247 if (gFloaterChat) 249 if (gFloaterChat)
248 { 250 {
249 LLViewerTextEditor* HistoryEditor = (LLViewerTextEditor*)gFloaterChat->getChildByName("Chat History Editor"); 251 LLViewerTextEditor* history_editor = (LLViewerTextEditor*)gFloaterChat->getChildByName("Chat History Editor");
250 LLViewerTextEditor* HistoryEditorWithMute = (LLViewerTextEditor*)gFloaterChat->getChildByName("Chat History Editor with mute"); 252 LLViewerTextEditor* history_editor_with_mute = (LLViewerTextEditor*)gFloaterChat->getChildByName("Chat History Editor with mute");
251 253
252 HistoryEditor->setCursorAndScrollToEnd(); 254 history_editor->setCursorAndScrollToEnd();
253 HistoryEditorWithMute->setCursorAndScrollToEnd(); 255 history_editor_with_mute->setCursorAndScrollToEnd();
254 } 256 }
255} 257}
256 258
@@ -279,10 +281,10 @@ void LLFloaterChat::onClickMute(void *data)
279{ 281{
280 LLFloaterChat* self = (LLFloaterChat*)data; 282 LLFloaterChat* self = (LLFloaterChat*)data;
281 283
282 LLComboBox* ChatterCombo = LLUICtrlFactory::getComboBoxByName(self,"chatter combobox"); 284 LLComboBox* chatter_combo = LLUICtrlFactory::getComboBoxByName(self,"chatter combobox");
283 285
284 const LLString& name = ChatterCombo->getSimple(); 286 const LLString& name = chatter_combo->getSimple();
285 LLUUID id = ChatterCombo->getCurrentID(); 287 LLUUID id = chatter_combo->getCurrentID();
286 288
287 if (name.empty()) return; 289 if (name.empty()) return;
288 290
@@ -328,24 +330,24 @@ void LLFloaterChat::onClickToggleShowMute(LLUICtrl* caller, void *data)
328 330
329 //LLCheckBoxCtrl* 331 //LLCheckBoxCtrl*
330 BOOL show_mute = LLUICtrlFactory::getCheckBoxByName(floater,"show mutes")->get(); 332 BOOL show_mute = LLUICtrlFactory::getCheckBoxByName(floater,"show mutes")->get();
331 LLViewerTextEditor* HistoryEditor = (LLViewerTextEditor*)floater->getChildByName("Chat History Editor"); 333 LLViewerTextEditor* history_editor = (LLViewerTextEditor*)floater->getChildByName("Chat History Editor");
332 LLViewerTextEditor* HistoryEditorWithMute = (LLViewerTextEditor*)floater->getChildByName("Chat History Editor with mute"); 334 LLViewerTextEditor* history_editor_with_mute = (LLViewerTextEditor*)floater->getChildByName("Chat History Editor with mute");
333 335
334 if (!HistoryEditor || !HistoryEditorWithMute) 336 if (!history_editor || !history_editor_with_mute)
335 return; 337 return;
336 338
337 //BOOL show_mute = floater->mShowMuteCheckBox->get(); 339 //BOOL show_mute = floater->mShowMuteCheckBox->get();
338 if (show_mute) 340 if (show_mute)
339 { 341 {
340 HistoryEditor->setVisible(FALSE); 342 history_editor->setVisible(FALSE);
341 HistoryEditorWithMute->setVisible(TRUE); 343 history_editor_with_mute->setVisible(TRUE);
342 HistoryEditorWithMute->setCursorAndScrollToEnd(); 344 history_editor_with_mute->setCursorAndScrollToEnd();
343 } 345 }
344 else 346 else
345 { 347 {
346 HistoryEditor->setVisible(TRUE); 348 history_editor->setVisible(TRUE);
347 HistoryEditorWithMute->setVisible(FALSE); 349 history_editor_with_mute->setVisible(FALSE);
348 HistoryEditor->setCursorAndScrollToEnd(); 350 history_editor->setCursorAndScrollToEnd();
349 } 351 }
350} 352}
351 353
diff --git a/linden/indra/newview/llfloatereditui.cpp b/linden/indra/newview/llfloatereditui.cpp
index 81c93ce..47cf97d 100644
--- a/linden/indra/newview/llfloatereditui.cpp
+++ b/linden/indra/newview/llfloatereditui.cpp
@@ -68,7 +68,7 @@ void LLFloaterEditUI::navigateHierarchyButtonPressed(void* data)
68 idx = parentChildren->size()-1; 68 idx = parentChildren->size()-1;
69 else 69 else
70 idx--; 70 idx--;
71 if( idx < 0 || idx >= parentChildren->size())break; 71 if( (long) idx < 0 || idx >= parentChildren->size())break;
72 for(sidx = 0,itor = parentChildren->begin();itor!=parentChildren->end();itor++,sidx++){ 72 for(sidx = 0,itor = parentChildren->begin();itor!=parentChildren->end();itor++,sidx++){
73 if(sidx == idx) 73 if(sidx == idx)
74 { 74 {
@@ -84,7 +84,7 @@ void LLFloaterEditUI::navigateHierarchyButtonPressed(void* data)
84 idx = 0; 84 idx = 0;
85 else 85 else
86 idx++; 86 idx++;
87 if( idx < 0 || idx >= parentChildren->size())break; 87 if( (long) idx < 0 || idx >= parentChildren->size())break;
88 for(sidx = 0,itor = parentChildren->begin();itor!=parentChildren->end();itor++,sidx++){ 88 for(sidx = 0,itor = parentChildren->begin();itor!=parentChildren->end();itor++,sidx++){
89 if(sidx == idx) 89 if(sidx == idx)
90 { 90 {
diff --git a/linden/indra/newview/llfloaterland.cpp b/linden/indra/newview/llfloaterland.cpp
index ee89975..78e5e70 100644
--- a/linden/indra/newview/llfloaterland.cpp
+++ b/linden/indra/newview/llfloaterland.cpp
@@ -192,13 +192,11 @@ void LLFloaterLand::show()
192 // (and hence we have the local id). 192 // (and hence we have the local id).
193 // gParcelMgr->sendParcelAccessListRequest(AL_ACCESS | AL_BAN | AL_RENTER); 193 // gParcelMgr->sendParcelAccessListRequest(AL_ACCESS | AL_BAN | AL_RENTER);
194 194
195 // If we've already got the parcel data, fill the
196 // floater with it.
197 sInstance->mParcel = gParcelMgr->getFloatingParcelSelection(); 195 sInstance->mParcel = gParcelMgr->getFloatingParcelSelection();
198 if (sInstance->mParcel->getParcel()) 196
199 { 197 // Refresh even if not over a region so we don't get an
200 sInstance->refresh(); 198 // uninitialized dialog. The dialog is 0-region aware.
201 } 199 sInstance->refresh();
202} 200}
203 201
204//static 202//static
diff --git a/linden/indra/newview/llfloaterregioninfo.cpp b/linden/indra/newview/llfloaterregioninfo.cpp
index 85fbfe1..70e975e 100644
--- a/linden/indra/newview/llfloaterregioninfo.cpp
+++ b/linden/indra/newview/llfloaterregioninfo.cpp
@@ -50,6 +50,7 @@
50#include "llcombobox.h" 50#include "llcombobox.h"
51#include "llfilepicker.h" 51#include "llfilepicker.h"
52#include "llfloatergodtools.h" // for send_sim_wide_deletes() 52#include "llfloatergodtools.h" // for send_sim_wide_deletes()
53#include "llfloatertopobjects.h" // added to fix SL-32336
53#include "llfloatergroups.h" 54#include "llfloatergroups.h"
54#include "llfloatertelehub.h" 55#include "llfloatertelehub.h"
55#include "lllineeditor.h" 56#include "lllineeditor.h"
@@ -885,6 +886,8 @@ void LLPanelRegionDebugInfo::onClickTopColliders(void* data)
885 strings_t strings; 886 strings_t strings;
886 strings.push_back("1"); // one physics step 887 strings.push_back("1"); // one physics step
887 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 888 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
889 LLFloaterTopObjects::show();
890 LLFloaterTopObjects::clearList();
888 self->sendEstateOwnerMessage(gMessageSystem, "colliders", invoice, strings); 891 self->sendEstateOwnerMessage(gMessageSystem, "colliders", invoice, strings);
889} 892}
890 893
@@ -895,6 +898,8 @@ void LLPanelRegionDebugInfo::onClickTopScripts(void* data)
895 strings_t strings; 898 strings_t strings;
896 strings.push_back("6"); // top 5 scripts 899 strings.push_back("6"); // top 5 scripts
897 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice()); 900 LLUUID invoice(LLFloaterRegionInfo::getLastInvoice());
901 LLFloaterTopObjects::show();
902 LLFloaterTopObjects::clearList();
898 self->sendEstateOwnerMessage(gMessageSystem, "scripts", invoice, strings); 903 self->sendEstateOwnerMessage(gMessageSystem, "scripts", invoice, strings);
899} 904}
900 905
diff --git a/linden/indra/newview/llfloatertopobjects.cpp b/linden/indra/newview/llfloatertopobjects.cpp
index 6212ce9..53d00fc 100644
--- a/linden/indra/newview/llfloatertopobjects.cpp
+++ b/linden/indra/newview/llfloatertopobjects.cpp
@@ -370,19 +370,22 @@ void LLFloaterTopObjects::onDisableSelected(void* data)
370 sInstance->doToObjects(ACTION_DISABLE, false); 370 sInstance->doToObjects(ACTION_DISABLE, false);
371} 371}
372 372
373//static
373void LLFloaterTopObjects::clearList() 374void LLFloaterTopObjects::clearList()
374{ 375{
375 LLCtrlListInterface *list = childGetListInterface("objects_list"); 376 LLCtrlListInterface *list = sInstance->childGetListInterface("objects_list");
376 377
377 if (list) 378 if (list)
378 { 379 {
379 list->operateOnAll(LLCtrlListInterface::OP_DELETE); 380 list->operateOnAll(LLCtrlListInterface::OP_DELETE);
380 } 381 }
381 382
382 mObjectListData.clear(); 383 sInstance->mObjectListData.clear();
383 mObjectListIDs.clear(); 384 sInstance->mObjectListIDs.clear();
385 sInstance->mtotalScore = 0.f;
384} 386}
385 387
388//static
386void LLFloaterTopObjects::onRefresh(void* data) 389void LLFloaterTopObjects::onRefresh(void* data)
387{ 390{
388 U32 mode = STAT_REPORT_TOP_SCRIPTS; 391 U32 mode = STAT_REPORT_TOP_SCRIPTS;
@@ -397,8 +400,6 @@ void LLFloaterTopObjects::onRefresh(void* data)
397 sInstance->clearList(); 400 sInstance->clearList();
398 } 401 }
399 402
400 sInstance->mtotalScore = 0.f;
401
402 LLMessageSystem *msg = gMessageSystem; 403 LLMessageSystem *msg = gMessageSystem;
403 msg->newMessageFast(_PREHASH_LandStatRequest); 404 msg->newMessageFast(_PREHASH_LandStatRequest);
404 msg->nextBlockFast(_PREHASH_AgentData); 405 msg->nextBlockFast(_PREHASH_AgentData);
diff --git a/linden/indra/newview/llfloatertopobjects.h b/linden/indra/newview/llfloatertopobjects.h
index 3d8a1e6..b539ebc 100644
--- a/linden/indra/newview/llfloatertopobjects.h
+++ b/linden/indra/newview/llfloatertopobjects.h
@@ -44,7 +44,7 @@ public:
44 static void handle_land_reply(LLMessageSystem* msg, void** data); 44 static void handle_land_reply(LLMessageSystem* msg, void** data);
45 void handleReply(LLMessageSystem* msg, void** data); 45 void handleReply(LLMessageSystem* msg, void** data);
46 46
47 void clearList(); 47 static void clearList();
48 void updateSelectionInfo(); 48 void updateSelectionInfo();
49 virtual BOOL postBuild(); 49 virtual BOOL postBuild();
50 50
diff --git a/linden/indra/newview/llimpanel.h b/linden/indra/newview/llimpanel.h
index 00b7033..10d387e 100644
--- a/linden/indra/newview/llimpanel.h
+++ b/linden/indra/newview/llimpanel.h
@@ -98,7 +98,7 @@ public:
98 98
99 const LLUUID& getSessionID() const { return mSessionUUID; } 99 const LLUUID& getSessionID() const { return mSessionUUID; }
100 const LLUUID& getOtherParticipantID() const { return mOtherParticipantUUID; } 100 const LLUUID& getOtherParticipantID() const { return mOtherParticipantUUID; }
101 const EInstantMessage getDialogType() const { return mDialog; } 101 EInstantMessage getDialogType() const { return mDialog; }
102 102
103 void sessionInitReplyReceived(const LLUUID& im_session_id); 103 void sessionInitReplyReceived(const LLUUID& im_session_id);
104 104
diff --git a/linden/indra/newview/llpanelcontents.cpp b/linden/indra/newview/llpanelcontents.cpp
index 4d138d4..73c1cac 100644
--- a/linden/indra/newview/llpanelcontents.cpp
+++ b/linden/indra/newview/llpanelcontents.cpp
@@ -56,7 +56,6 @@
56#include "llviewerobject.h" 56#include "llviewerobject.h"
57#include "llviewerregion.h" 57#include "llviewerregion.h"
58#include "llresmgr.h" 58#include "llresmgr.h"
59#include "lltexturetable.h"
60#include "llselectmgr.h" 59#include "llselectmgr.h"
61#include "llpreviewscript.h" 60#include "llpreviewscript.h"
62#include "lltool.h" 61#include "lltool.h"
diff --git a/linden/indra/newview/llpaneldisplay.cpp b/linden/indra/newview/llpaneldisplay.cpp
index d79dcb4..c4fa1dc 100644
--- a/linden/indra/newview/llpaneldisplay.cpp
+++ b/linden/indra/newview/llpaneldisplay.cpp
@@ -520,6 +520,7 @@ void LLPanelDisplay2::refreshEnabledState()
520 520
521void LLPanelDisplay2::apply() 521void LLPanelDisplay2::apply()
522{ 522{
523
523 // Anisotropic rendering 524 // Anisotropic rendering
524 BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic; 525 BOOL old_anisotropic = LLImageGL::sGlobalUseAnisotropic;
525 LLImageGL::sGlobalUseAnisotropic = childGetValue("ani"); 526 LLImageGL::sGlobalUseAnisotropic = childGetValue("ani");
diff --git a/linden/indra/newview/llpanelface.cpp b/linden/indra/newview/llpanelface.cpp
index 9cbfdc2..b48d8c7 100644
--- a/linden/indra/newview/llpanelface.cpp
+++ b/linden/indra/newview/llpanelface.cpp
@@ -51,7 +51,6 @@
51#include "lltextbox.h" 51#include "lltextbox.h"
52#include "lltexturectrl.h" 52#include "lltexturectrl.h"
53#include "lltextureentry.h" 53#include "lltextureentry.h"
54#include "lltexturetable.h"
55#include "lltooldraganddrop.h" 54#include "lltooldraganddrop.h"
56#include "llui.h" 55#include "llui.h"
57#include "llviewercontrol.h" 56#include "llviewercontrol.h"
diff --git a/linden/indra/newview/llpanellogin.cpp b/linden/indra/newview/llpanellogin.cpp
index 5f31216..fdc431c 100644
--- a/linden/indra/newview/llpanellogin.cpp
+++ b/linden/indra/newview/llpanellogin.cpp
@@ -220,7 +220,8 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
220 text->setClickedCallback(onClickVersion); 220 text->setClickedCallback(onClickVersion);
221 text->setCallbackUserData(this); 221 text->setCallbackUserData(this);
222 222
223 // HACK 223 // HACK to move to the lower-right of the window
224 // replace/remove this logic when we have dynamic layouts
224 S32 right = getRect().mRight; 225 S32 right = getRect().mRight;
225 LLRect r = text->getRect(); 226 LLRect r = text->getRect();
226 const S32 PAD = 2; 227 const S32 PAD = 2;
@@ -229,6 +230,31 @@ LLPanelLogin::LLPanelLogin(const LLRect &rect,
229 text->setRect(r); 230 text->setRect(r);
230 } 231 }
231 232
233 LLTextBox* channel_text = LLUICtrlFactory::getTextBoxByName(this, "channel_text");
234 if (channel_text)
235 {
236 channel_text->setText(gChannelName);
237 channel_text->setClickedCallback(onClickVersion);
238 channel_text->setCallbackUserData(this);
239
240 // HACK to move to the right of the window, above the version string,
241 // replace/remove this logic when we have dynamic layouts
242 S32 right = getRect().mRight;
243 LLRect r = channel_text->getRect();
244 const S32 PAD = 2;
245 S32 version_string_top = r.mTop;
246 if(text)
247 {
248 version_string_top = text->getRect().mTop;
249 }
250 r.setOriginAndSize(
251 right - r.getWidth() - PAD,
252 version_string_top,
253 r.getWidth(),
254 r.getHeight());
255 channel_text->setRect(r);
256 }
257
232 // get the web browser control 258 // get the web browser control
233 #if LL_LIBXUL_ENABLED 259 #if LL_LIBXUL_ENABLED
234 LLWebBrowserCtrl* web_browser = LLUICtrlFactory::getWebBrowserCtrlByName(this, "login_html"); 260 LLWebBrowserCtrl* web_browser = LLUICtrlFactory::getWebBrowserCtrlByName(this, "login_html");
diff --git a/linden/indra/newview/llpolymesh.h b/linden/indra/newview/llpolymesh.h
index 9634dbf..a421e05 100644
--- a/linden/indra/newview/llpolymesh.h
+++ b/linden/indra/newview/llpolymesh.h
@@ -360,7 +360,8 @@ protected:
360 typedef LLAssocList<std::string, LLPolyMeshSharedData*> LLPolyMeshSharedDataTable; 360 typedef LLAssocList<std::string, LLPolyMeshSharedData*> LLPolyMeshSharedDataTable;
361 static LLPolyMeshSharedDataTable sGlobalSharedMeshList; 361 static LLPolyMeshSharedDataTable sGlobalSharedMeshList;
362 362
363 LLPointer<LLVOAvatar> mAvatarp; 363 // Backlink only; don't make this an LLPointer.
364 LLVOAvatar* mAvatarp;
364}; 365};
365 366
366//----------------------------------------------------------------------------- 367//-----------------------------------------------------------------------------
@@ -426,7 +427,8 @@ protected:
426 joint_vec_map_t mJointScales; 427 joint_vec_map_t mJointScales;
427 joint_vec_map_t mJointOffsets; 428 joint_vec_map_t mJointOffsets;
428 LLVector3 mDefaultVec; 429 LLVector3 mDefaultVec;
429 LLPointer<LLVOAvatar> mAvatar; 430 // Backlink only; don't make this an LLPointer.
431 LLVOAvatar *mAvatar;
430}; 432};
431 433
432#endif // LL_LLPOLYMESH_H 434#endif // LL_LLPOLYMESH_H
diff --git a/linden/indra/newview/llprogressview.cpp b/linden/indra/newview/llprogressview.cpp
index 71a1d66..2ec8dcd 100644
--- a/linden/indra/newview/llprogressview.cpp
+++ b/linden/indra/newview/llprogressview.cpp
@@ -124,7 +124,7 @@ BOOL LLProgressView::handleKeyHere(KEY key, MASK mask, BOOL called_from_parent)
124 // Suck up all keystokes except CTRL-Q. 124 // Suck up all keystokes except CTRL-Q.
125 if( ('Q' == key) && (MASK_CONTROL == mask) ) 125 if( ('Q' == key) && (MASK_CONTROL == mask) )
126 { 126 {
127 app_request_quit(); 127 app_user_quit();
128 } 128 }
129 return TRUE; 129 return TRUE;
130 } 130 }
diff --git a/linden/indra/newview/llsrv.cpp b/linden/indra/newview/llsrv.cpp
index 4dec48d..5a623bc 100644
--- a/linden/indra/newview/llsrv.cpp
+++ b/linden/indra/newview/llsrv.cpp
@@ -73,49 +73,37 @@ vector<LLSRVRecord> LLSRV::query(const string& name)
73 73
74#include <netdb.h> 74#include <netdb.h>
75 75
76vector<LLSRVRecord> LLSRV::query(const string& queryName) 76#ifdef HOMEGROWN_RESPONSE_PARSER
77
78// We ought to be using libresolv's ns_initparse and ns_parserr to
79// parse the result of our query. However, libresolv isn't packaged
80// correctly on Linux (as of BIND 9), so neither of these functions is
81// available without statically linking against libresolv. Ugh! This
82// fallback function is available if we need to parse the response
83// ourselves without relying too much on libresolv. It is NOT THE
84// DEFAULT.
85
86vector<LLSRVRecord> LLSRV::parseResponse(const unsigned char *response,
87 int resp_len)
77{ 88{
78 unsigned char response[16384];
79 vector<LLSRVRecord> recs; 89 vector<LLSRVRecord> recs;
80 char name[1024];
81 int len;
82
83 len = res_query(queryName.c_str(), ns_c_in, ns_t_srv, response,
84 sizeof(response));
85
86 if (len == -1)
87 {
88 llinfos << "Query failed for " << queryName << llendl;
89 return recs;
90 }
91 else if (len > (int) sizeof(response))
92 {
93 llinfos << "Response too big for " << queryName
94 << " (capacity " << sizeof(response)
95 << ", response " << len << ")" << llendl;
96 return recs;
97 }
98
99 // We "should" be using libresolv's ns_initparse and ns_parserr to
100 // parse the result of our query. However, libresolv isn't
101 // packaged correctly on Linux (as of BIND 9), so neither of these
102 // functions is available without statically linking against
103 // libresolv. Ugh! So we parse the response ourselves.
104 90
105 const unsigned char *pos = response + sizeof(HEADER); 91 const unsigned char *pos = response + sizeof(HEADER);
106 const unsigned char *end = response + len; 92 const unsigned char *end = response + resp_len;
107 const HEADER *hdr = (const HEADER *) response; 93 const HEADER *hdr = (const HEADER *) response;
94 char name[1024];
108 95
109 // Skip over the query embedded in the response. 96 // Skip over the query embedded in the response.
110 97
111 for (int q = ntohs(hdr->qdcount); q > 0; --q) 98 for (int q = ntohs(hdr->qdcount); q > 0; --q)
112 { 99 {
113 len = dn_expand(response, end, pos, name, sizeof(name)); 100 int len = dn_expand(response, end, pos, name, sizeof(name));
114 101
115 if (len == -1) 102 if (len == -1)
116 { 103 {
117 llinfos << "Could not expand queried name in RR response" << llendl; 104 llinfos << "Could not expand queried name in RR response"
118 return recs; 105 << llendl;
106 goto bail;
119 } 107 }
120 108
121 pos += len + NS_QFIXEDSZ; 109 pos += len + NS_QFIXEDSZ;
@@ -125,11 +113,12 @@ vector<LLSRVRecord> LLSRV::query(const string& queryName)
125 { 113 {
126 static const ns_rr *rr; 114 static const ns_rr *rr;
127 115
128 len = dn_expand(response, end, pos, name, sizeof(name) - 1); 116 int len = dn_expand(response, end, pos, name, sizeof(name) - 1);
129 if (len == -1) 117 if (len == -1)
130 { 118 {
131 llinfos << "Could not expand response name in RR response" << llendl; 119 llinfos << "Could not expand response name in RR response"
132 return recs; 120 << llendl;
121 goto bail;
133 } 122 }
134 123
135 // Skip over the resource name and headers we don't care about. 124 // Skip over the resource name and headers we don't care about.
@@ -150,7 +139,7 @@ vector<LLSRVRecord> LLSRV::query(const string& queryName)
150 if (len == -1) 139 if (len == -1)
151 { 140 {
152 llinfos << "Could not expand name in RR response" << llendl; 141 llinfos << "Could not expand name in RR response" << llendl;
153 return recs; 142 goto bail;
154 } 143 }
155 144
156 recs.push_back(LLSRVRecord(prio, weight, name, port)); 145 recs.push_back(LLSRVRecord(prio, weight, name, port));
@@ -158,12 +147,177 @@ vector<LLSRVRecord> LLSRV::query(const string& queryName)
158 147
159 // There are likely to be more records in the response, but we 148 // There are likely to be more records in the response, but we
160 // don't care about those, at least for now. 149 // don't care about those, at least for now.
150bail:
151 return reorder(recs);
152}
161 153
162 return recs; 154#else // HOMEGROWN_RESPONSE_PARSER
155
156// This version of the response parser is the one to use if libresolv
157// is available and behaving itself.
158
159vector<LLSRVRecord> LLSRV::parseResponse(const unsigned char *response,
160 int resp_len)
161{
162 vector<LLSRVRecord> recs;
163 ns_msg hdr;
164
165 if (ns_initparse(response, resp_len, &hdr))
166 {
167 llinfos << "Could not parse response" << llendl;
168 goto bail;
169 }
170
171 for (int i = 0; i < ns_msg_count(hdr, ns_s_an); i++)
172 {
173 ns_rr rr;
174
175 if (ns_parserr(&hdr, ns_s_an, i, &rr))
176 {
177 llinfos << "Could not parse RR" << llendl;
178 goto bail;
179 }
180
181 if (ns_rr_type(rr) != ns_t_srv)
182 {
183 continue;
184 }
185
186 const unsigned char *pos = ns_rr_rdata(rr);
187 U16 prio, weight, port;
188 char name[1024];
189 int ret;
190
191 NS_GET16(prio, pos);
192 NS_GET16(weight, pos);
193 NS_GET16(port, pos);
194
195 ret = dn_expand(ns_msg_base(hdr), ns_msg_end(hdr), pos,
196 name, sizeof(name));
197
198 if (ret == -1)
199 {
200 llinfos << "Could not decompress name" << llendl;
201 goto bail;
202 }
203
204 recs.push_back(LLSRVRecord(prio, weight, name, port));
205 }
206
207bail:
208 return reorder(recs);
209}
210
211#endif // HOMEGROWN_RESPONSE_PARSER
212
213vector<LLSRVRecord> LLSRV::query(const string& queryName)
214{
215 unsigned char response[16384];
216 vector<LLSRVRecord> recs;
217 int len;
218
219 len = res_query(queryName.c_str(), ns_c_in, ns_t_srv, response,
220 sizeof(response));
221
222 if (len == -1)
223 {
224 llinfos << "Query failed for " << queryName << llendl;
225 goto bail;
226 }
227 else if (len > (int) sizeof(response))
228 {
229 llinfos << "Response too big for " << queryName
230 << " (capacity " << sizeof(response)
231 << ", response " << len << ")" << llendl;
232 goto bail;
233 }
234
235 recs = parseResponse(response, len);
236bail:
237 return reorder(recs);
163} 238}
164 239
165#endif // LL_WINDOWS 240#endif // LL_WINDOWS
166 241
242// Implement the algorithm specified in RFC 2782 for dealing with RRs
243// of differing priorities and weights.
244vector<LLSRVRecord> LLSRV::reorder(vector<LLSRVRecord>& recs)
245{
246 typedef list<const LLSRVRecord *> reclist_t;
247 typedef map<U16, reclist_t> bucket_t;
248 vector<LLSRVRecord> newRecs;
249 bucket_t buckets;
250
251 // Don't rely on the DNS server to shuffle responses.
252
253 random_shuffle(recs.begin(), recs.end());
254
255 for (vector<LLSRVRecord>::const_iterator iter = recs.begin();
256 iter != recs.end(); ++iter)
257 {
258 buckets[iter->priority()].push_back(&*iter);
259 }
260
261 // Priorities take precedence over weights.
262
263 for (bucket_t::iterator iter = buckets.begin();
264 iter != buckets.end(); ++iter)
265 {
266 reclist_t& myPrio = iter->second;
267 reclist_t r;
268
269 // RRs with weight zero go to the front of the intermediate
270 // list, so they'll have little chance of being chosen.
271 // Larger weights have a higher likelihood of selection.
272
273 for (reclist_t::iterator i = myPrio.begin(); i != myPrio.end(); )
274 {
275 if ((*i)->weight() == 0)
276 {
277 r.push_back(*i);
278 i = myPrio.erase(i);
279 } else {
280 ++i;
281 }
282 }
283
284 r.insert(r.end(), myPrio.begin(), myPrio.end());
285
286 while (!r.empty())
287 {
288 U32 total = 0;
289
290 for (reclist_t::const_iterator i = r.begin(); i != r.end(); ++i)
291 {
292 total += (*i)->weight();
293 }
294
295 U32 target = total > 1 ? (rand() % total) : 0;
296 U32 partial = 0;
297
298 for (reclist_t::iterator i = r.begin(); i != r.end(); )
299 {
300 partial += (*i)->weight();
301 if (partial >= target)
302 {
303 newRecs.push_back(**i);
304 i = r.erase(i);
305 } else {
306 ++i;
307 }
308 }
309 }
310 }
311
312 // Order RRs by lowest numeric priority. The stable sort
313 // preserves the weight choices we made above.
314
315 stable_sort(newRecs.begin(), newRecs.end(),
316 LLSRVRecord::ComparePriorityLowest());
317
318 return newRecs;
319}
320
167vector<string> LLSRV::rewriteURI(const string& uriStr) 321vector<string> LLSRV::rewriteURI(const string& uriStr)
168{ 322{
169 LLURI uri(uriStr); 323 LLURI uri(uriStr);
@@ -186,6 +340,14 @@ vector<string> LLSRV::rewriteURI(const string& uriStr)
186 size_t i; 340 size_t i;
187 341
188 llinfos << "Got " << srvs.size() << " results" << llendl; 342 llinfos << "Got " << srvs.size() << " results" << llendl;
343 for (iter = srvs.begin(); iter != srvs.end(); ++iter)
344 {
345 lldebugs << "host " << iter->target() << ':' << iter->port()
346 << " prio " << iter->priority()
347 << " weight " << iter->weight()
348 << llendl;
349 }
350
189 if (srvs.size() > maxSrvs) 351 if (srvs.size() > maxSrvs)
190 { 352 {
191 llinfos << "Clamping to " << maxSrvs << llendl; 353 llinfos << "Clamping to " << maxSrvs << llendl;
diff --git a/linden/indra/newview/llsrv.h b/linden/indra/newview/llsrv.h
index fca646d..9417664 100644
--- a/linden/indra/newview/llsrv.h
+++ b/linden/indra/newview/llsrv.h
@@ -41,6 +41,7 @@ protected:
41 std::string mTarget; 41 std::string mTarget;
42 U16 mPort; 42 U16 mPort;
43 43
44public:
44 LLSRVRecord(U16 priority, U16 weight, const std::string& target, 45 LLSRVRecord(U16 priority, U16 weight, const std::string& target,
45 U16 port) : 46 U16 port) :
46 mPriority(priority), 47 mPriority(priority),
@@ -48,16 +49,30 @@ protected:
48 mTarget(target), 49 mTarget(target),
49 mPort(port) { 50 mPort(port) {
50 } 51 }
51 52
52public:
53 U16 priority() const { return mPriority; } 53 U16 priority() const { return mPriority; }
54 U16 weight() const { return mWeight; } 54 U16 weight() const { return mWeight; }
55 const std::string& target() const { return mTarget; } 55 const std::string& target() const { return mTarget; }
56 U16 port() const { return mPort; } 56 U16 port() const { return mPort; }
57
58 struct ComparePriorityLowest
59 {
60 bool operator()(const LLSRVRecord& lhs, const LLSRVRecord& rhs)
61 {
62 return lhs.mPriority < rhs.mPriority;
63 }
64 };
57}; 65};
58 66
59class LLSRV 67class LLSRV
60{ 68{
69protected:
70#ifndef LL_WINDOWS
71 static std::vector<LLSRVRecord> parseResponse(const unsigned char *response,
72 int resp_len);
73#endif
74 static std::vector<LLSRVRecord> reorder(std::vector<LLSRVRecord>& recs);
75
61public: 76public:
62 static std::vector<LLSRVRecord> query(const std::string& name); 77 static std::vector<LLSRVRecord> query(const std::string& name);
63 static std::vector<std::string> rewriteURI(const std::string& uri); 78 static std::vector<std::string> rewriteURI(const std::string& uri);
diff --git a/linden/indra/newview/llstatusbar.cpp b/linden/indra/newview/llstatusbar.cpp
index 784765b..f0c6ea5 100644
--- a/linden/indra/newview/llstatusbar.cpp
+++ b/linden/indra/newview/llstatusbar.cpp
@@ -82,6 +82,7 @@ LLStatusBar *gStatusBar = NULL;
82S32 STATUS_BAR_HEIGHT = 0; 82S32 STATUS_BAR_HEIGHT = 0;
83extern S32 MENU_BAR_HEIGHT; 83extern S32 MENU_BAR_HEIGHT;
84 84
85
85// TODO: these values ought to be in the XML too 86// TODO: these values ought to be in the XML too
86const S32 MENU_PARCEL_SPACING = 1; // Distance from right of menu item to parcel information 87const S32 MENU_PARCEL_SPACING = 1; // Distance from right of menu item to parcel information
87const S32 SIM_STAT_WIDTH = 8; 88const S32 SIM_STAT_WIDTH = 8;
@@ -95,6 +96,10 @@ const F32 ICON_FLASH_FREQUENCY = 2.f;
95const S32 GRAPHIC_FUDGE = 4; 96const S32 GRAPHIC_FUDGE = 4;
96const S32 TEXT_HEIGHT = 18; 97const S32 TEXT_HEIGHT = 18;
97 98
99std::vector<std::string> LLStatusBar::sDays;
100std::vector<std::string> LLStatusBar::sMonths;
101const U32 LLStatusBar::MAX_DATE_STRING_LENGTH = 2000;
102
98LLStatusBar::LLStatusBar(const std::string& name, const LLRect& rect) 103LLStatusBar::LLStatusBar(const std::string& name, const LLRect& rect)
99: LLPanel(name, LLRect(), FALSE), // not mouse opaque 104: LLPanel(name, LLRect(), FALSE), // not mouse opaque
100 mBalance(0), 105 mBalance(0),
@@ -106,6 +111,10 @@ LLStatusBar::LLStatusBar(const std::string& name, const LLRect& rect)
106 mMouseOpaque = FALSE; 111 mMouseOpaque = FALSE;
107 setIsChrome(TRUE); 112 setIsChrome(TRUE);
108 113
114 // size of day of the weeks and year
115 sDays.reserve(7);
116 sMonths.reserve(12);
117
109 mBalanceTimer = new LLFrameTimer(); 118 mBalanceTimer = new LLFrameTimer();
110 mHealthTimer = new LLFrameTimer(); 119 mHealthTimer = new LLFrameTimer();
111 120
@@ -114,6 +123,9 @@ LLStatusBar::LLStatusBar(const std::string& name, const LLRect& rect)
114 // status bar can never get a tab 123 // status bar can never get a tab
115 setFocusRoot(FALSE); 124 setFocusRoot(FALSE);
116 125
126 // build date necessary data (must do after panel built)
127 setupDate();
128
117 mBtnScriptOut = LLUICtrlFactory::getButtonByName( this, "scriptout" ); 129 mBtnScriptOut = LLUICtrlFactory::getButtonByName( this, "scriptout" );
118 mBtnHealth = LLUICtrlFactory::getButtonByName( this, "health" ); 130 mBtnHealth = LLUICtrlFactory::getButtonByName( this, "health" );
119 mBtnFly = LLUICtrlFactory::getButtonByName( this, "fly" ); 131 mBtnFly = LLUICtrlFactory::getButtonByName( this, "fly" );
@@ -128,7 +140,7 @@ LLStatusBar::LLStatusBar(const std::string& name, const LLRect& rect)
128 140
129 mTextHealth = LLUICtrlFactory::getTextBoxByName( this, "HealthText" ); 141 mTextHealth = LLUICtrlFactory::getTextBoxByName( this, "HealthText" );
130 mTextTime = LLUICtrlFactory::getTextBoxByName( this, "TimeText" ); 142 mTextTime = LLUICtrlFactory::getTextBoxByName( this, "TimeText" );
131 143
132 S32 x = mRect.getWidth() - 2; 144 S32 x = mRect.getWidth() - 2;
133 S32 y = 0; 145 S32 y = 0;
134 LLRect r; 146 LLRect r;
@@ -265,6 +277,14 @@ void LLStatusBar::refresh()
265 << " " << am_pm << " " << tz; 277 << " " << am_pm << " " << tz;
266 mTextTime->setText(t.str().c_str()); 278 mTextTime->setText(t.str().c_str());
267 279
280 // Year starts at 1900, set the tooltip to have the date
281 std::ostringstream date;
282 date << sDays[internal_time->tm_wday] << ", "
283 << std::setfill('0') << std::setw(2) << internal_time->tm_mday << " "
284 << sMonths[internal_time->tm_mon] << " "
285 << internal_time->tm_year + 1900;
286 mTextTime->setToolTip(date.str().c_str());
287
268 LLRect r; 288 LLRect r;
269 const S32 MENU_RIGHT = gMenuBarView->getRightmostMenuEdge(); 289 const S32 MENU_RIGHT = gMenuBarView->getRightmostMenuEdge();
270 S32 x = MENU_RIGHT + MENU_PARCEL_SPACING; 290 S32 x = MENU_RIGHT + MENU_PARCEL_SPACING;
@@ -644,6 +664,69 @@ void LLStatusBar::onClickBuyLand(void*)
644 gParcelMgr->startBuyLand(); 664 gParcelMgr->startBuyLand();
645} 665}
646 666
667// sets the static variables necessary for the date
668void LLStatusBar::setupDate()
669{
670 // fill the day array with what's in the xui
671 LLString day_list = childGetText("StatBarDaysOfWeek");
672 size_t length = day_list.size();
673
674 // quick input check
675 if(length < MAX_DATE_STRING_LENGTH)
676 {
677 // tokenize it and put it in the array
678 LLString cur_word;
679 for(size_t i = 0; i < length; ++i)
680 {
681 if(day_list[i] == ':')
682 {
683 sDays.push_back(cur_word);
684 cur_word.clear();
685 }
686 else
687 {
688 cur_word.append(1, day_list.c_str()[i]);
689 }
690 }
691 sDays.push_back(cur_word);
692 }
693
694 // fill the day array with what's in the xui
695 LLString month_list = childGetText( "StatBarMonthsOfYear" );
696 length = month_list.size();
697
698 // quick input check
699 if(length < MAX_DATE_STRING_LENGTH)
700 {
701 // tokenize it and put it in the array
702 LLString cur_word;
703 for(size_t i = 0; i < length; ++i)
704 {
705 if(month_list[i] == ':')
706 {
707 sMonths.push_back(cur_word);
708 cur_word.clear();
709 }
710 else
711 {
712 cur_word.append(1, month_list.c_str()[i]);
713 }
714 }
715 sMonths.push_back(cur_word);
716 }
717
718 // make sure we have at least 7 days and 12 months
719 if(sDays.size() < 7)
720 {
721 sDays.resize(7);
722 }
723
724 if(sMonths.size() < 12)
725 {
726 sMonths.resize(12);
727 }
728}
729
647BOOL can_afford_transaction(S32 cost) 730BOOL can_afford_transaction(S32 cost)
648{ 731{
649 return((cost <= 0)||((gStatusBar) && (gStatusBar->getBalance() >=cost))); 732 return((cost <= 0)||((gStatusBar) && (gStatusBar->getBalance() >=cost)));
diff --git a/linden/indra/newview/llstatusbar.h b/linden/indra/newview/llstatusbar.h
index a072cd9..e08066b 100644
--- a/linden/indra/newview/llstatusbar.h
+++ b/linden/indra/newview/llstatusbar.h
@@ -93,6 +93,9 @@ protected:
93 static void onClickScripts(void*); 93 static void onClickScripts(void*);
94 static void onClickBuyLand(void*); 94 static void onClickBuyLand(void*);
95 static void onClickScriptDebug(void*); 95 static void onClickScriptDebug(void*);
96
97 // simple method to setup the part that holds the date
98 void setupDate();
96 99
97protected: 100protected:
98 LLTextBox *mTextBalance; 101 LLTextBox *mTextBalance;
@@ -121,6 +124,10 @@ protected:
121 S32 mSquareMetersCommitted; 124 S32 mSquareMetersCommitted;
122 LLFrameTimer* mBalanceTimer; 125 LLFrameTimer* mBalanceTimer;
123 LLFrameTimer* mHealthTimer; 126 LLFrameTimer* mHealthTimer;
127
128 static std::vector<std::string> sDays;
129 static std::vector<std::string> sMonths;
130 static const U32 LLStatusBar::MAX_DATE_STRING_LENGTH;
124}; 131};
125 132
126// *HACK: Status bar owns your cached money balance. JC 133// *HACK: Status bar owns your cached money balance. JC
diff --git a/linden/indra/newview/lltexlayer.cpp b/linden/indra/newview/lltexlayer.cpp
index 26ee098..2005e39 100644
--- a/linden/indra/newview/lltexlayer.cpp
+++ b/linden/indra/newview/lltexlayer.cpp
@@ -2314,7 +2314,7 @@ LLColor4 LLTexParamColor::getNetColor()
2314{ 2314{
2315 llassert( getInfo()->mNumColors >= 1 ); 2315 llassert( getInfo()->mNumColors >= 1 );
2316 2316
2317 F32 effective_weight = ( mAvatar.notNull() && (mAvatar->getSex() & getSex()) ) ? mCurWeight : getDefaultWeight(); 2317 F32 effective_weight = ( mAvatar && (mAvatar->getSex() & getSex()) ) ? mCurWeight : getDefaultWeight();
2318 2318
2319 S32 index_last = getInfo()->mNumColors - 1; 2319 S32 index_last = getInfo()->mNumColors - 1;
2320 F32 scaled_weight = effective_weight * index_last; 2320 F32 scaled_weight = effective_weight * index_last;
diff --git a/linden/indra/newview/lltexlayer.h b/linden/indra/newview/lltexlayer.h
index 920ae4a..7d517ee 100644
--- a/linden/indra/newview/lltexlayer.h
+++ b/linden/indra/newview/lltexlayer.h
@@ -286,7 +286,8 @@ protected:
286 typedef std::vector<LLTexLayer *> layer_list_t; 286 typedef std::vector<LLTexLayer *> layer_list_t;
287 layer_list_t mLayerList; 287 layer_list_t mLayerList;
288 LLTexLayerSetBuffer* mComposite; 288 LLTexLayerSetBuffer* mComposite;
289 LLPointer<LLVOAvatar> mAvatar; 289 // Backlink only; don't make this an LLPointer.
290 LLVOAvatar* mAvatar;
290 BOOL mUpdatesEnabled; 291 BOOL mUpdatesEnabled;
291 BOOL mHasBump; 292 BOOL mHasBump;
292 293
@@ -443,7 +444,7 @@ public:
443protected: 444protected:
444 typedef std::vector<LLTexParamColor *> param_list_t; 445 typedef std::vector<LLTexParamColor *> param_list_t;
445 param_list_t mParamList; 446 param_list_t mParamList;
446 LLPointer<LLVOAvatar> mAvatar; 447 LLVOAvatar* mAvatar; // just backlink, don't LLPointer
447 448
448 LLTexGlobalColorInfo *mInfo; 449 LLTexGlobalColorInfo *mInfo;
449}; 450};
@@ -489,7 +490,7 @@ protected:
489 LLVector3 mAvgDistortionVec; 490 LLVector3 mAvgDistortionVec;
490 LLTexGlobalColor* mTexGlobalColor; // either has mTexGlobalColor or mTexLayer as its parent 491 LLTexGlobalColor* mTexGlobalColor; // either has mTexGlobalColor or mTexLayer as its parent
491 LLTexLayer* mTexLayer; 492 LLTexLayer* mTexLayer;
492 LLPointer<LLVOAvatar> mAvatar; // redundant, but simplifies the code 493 LLVOAvatar* mAvatar; // redundant, but simplifies the code (don't LLPointer)
493}; 494};
494 495
495//----------------------------------------------------------------------------- 496//-----------------------------------------------------------------------------
@@ -569,7 +570,7 @@ public:
569 ~LLBakedUploadData() {} 570 ~LLBakedUploadData() {}
570 571
571 LLUUID mID; 572 LLUUID mID;
572 LLPointer<LLVOAvatar> mAvatar; 573 LLVOAvatar* mAvatar; // just backlink, don't LLPointer
573 LLTexLayerSetBuffer* mLayerSetBuffer; 574 LLTexLayerSetBuffer* mLayerSetBuffer;
574 LLUUID mWearableAssets[WT_COUNT]; 575 LLUUID mWearableAssets[WT_COUNT];
575}; 576};
diff --git a/linden/indra/newview/lltexturetable.cpp b/linden/indra/newview/lltexturetable.cpp
deleted file mode 100644
index 52e4a46..0000000
--- a/linden/indra/newview/lltexturetable.cpp
+++ /dev/null
@@ -1,157 +0,0 @@
1/**
2 * @file lltexturetable.cpp
3 * @brief Table of texture names and IDs for viewer
4 *
5 * Copyright (c) 2001-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29#include "llviewerprecompiledheaders.h"
30
31#include <string.h>
32
33#include "lltexturetable.h"
34#include "llstring.h"
35
36LLTextureTable gTextureTable;
37
38
39LLTextureInfo::LLTextureInfo(const std::string& name, const LLUUID &uuid, const std::string& description)
40{
41 S32 length = name.size();
42 if (length > 0)
43 {
44 mName = name;
45 }
46 else
47 {
48 char *temp = new char[UUID_STR_LENGTH];
49 uuid.toString(temp);
50 mName = temp;
51 }
52 LLString::toLower(mName);
53
54 mUUID = uuid;
55 mDescription = description;
56}
57
58LLTextureInfo::~LLTextureInfo()
59{
60}
61
62LLTextureTable::LLTextureTable()
63{
64 mTextureInfoList.setInsertBefore(&LLTextureTable::insertBefore);
65}
66
67LLTextureTable::~LLTextureTable()
68{
69 mTextureInfoList.deleteAllData();
70}
71
72// Comparison function for sorting the list.
73// static
74BOOL LLTextureTable::insertBefore(LLTextureInfo* a, LLTextureInfo* b)
75{
76 return (a->mName.compare(b->mName) < 0);
77}
78
79
80//void LLTextureTable::bubbleSort()
81//{
82// mTextureInfoList.bubbleSortList();
83//}
84
85BOOL LLTextureTable::add(const std::string& name, const LLUUID &uuid, const std::string& description)
86{
87 LLTextureInfo *infop;
88
89 infop = new LLTextureInfo(name, uuid, description);
90 if (!infop) return FALSE;
91
92 mTextureInfoList.addDataSorted(infop);
93
94 return TRUE;
95}
96
97
98// *FIX: Since the table is sorted based on name, this could be vastly
99// sped up by doing a binary search.
100LLUUID LLTextureTable::getUUID(const std::string& name)
101{
102 LLTextureInfo *infop;
103
104 for (infop = mTextureInfoList.getFirstData(); infop != NULL; infop = mTextureInfoList.getNextData() )
105 {
106 LLString name_lc = name;
107 LLString::toLower(name_lc);
108 if (name_lc == infop->mName)
109 {
110 return infop->mUUID;
111 }
112 }
113
114 return LLUUID::null;
115}
116
117
118std::string LLTextureTable::getDesc(const std::string& name)
119{
120 LLTextureInfo *infop;
121
122 for (infop = mTextureInfoList.getFirstData(); infop != NULL; infop = mTextureInfoList.getNextData() )
123 {
124 LLString name_lc = name;
125 LLString::toLower(name_lc);
126 if (name_lc == infop->mName)
127 {
128 return infop->mDescription;
129 }
130 }
131
132 return LLString::null;
133}
134
135
136std::string LLTextureTable::getName(const LLUUID &id)
137{
138 LLTextureInfo *infop;
139
140 for (infop = mTextureInfoList.getFirstData(); infop != NULL; infop = mTextureInfoList.getNextData() )
141 {
142 if (id == infop->mUUID)
143 {
144 return infop->mName;
145 }
146 }
147
148 return LLString::null;
149}
150
151
152void LLTextureTable::deleteAll()
153{
154 // Clear out the list
155
156 mTextureInfoList.deleteAllData();
157}
diff --git a/linden/indra/newview/lltexturetable.h b/linden/indra/newview/lltexturetable.h
deleted file mode 100644
index 85510b5..0000000
--- a/linden/indra/newview/lltexturetable.h
+++ /dev/null
@@ -1,70 +0,0 @@
1/**
2 * @file lltexturetable.h
3 * @brief Table of texture names and IDs for viewer
4 *
5 * Copyright (c) 2001-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29// Table of texture information for the viewer UI. The Table is
30// maintained in a sorted order at all times.
31
32#ifndef LL_LLTEXTURETABLE_H
33#define LL_LLTEXTURETABLE_H
34
35#include "lluuid.h"
36#include "linked_lists.h"
37
38class LLTextureInfo
39{
40public:
41 LLTextureInfo(const std::string& name, const LLUUID &uuid, const std::string& description);
42 ~LLTextureInfo();
43 std::string mName;
44 LLUUID mUUID;
45 std::string mDescription;
46};
47
48class LLTextureTable
49{
50public:
51 LLTextureTable();
52 ~LLTextureTable();
53
54 BOOL add(const std::string& name, const LLUUID &uuid,
55 const std::string& description); // copies memory, false if fails
56 LLUUID getUUID(const std::string& name); // LLUUID::null if not found
57 std::string getDesc(const std::string& name);
58 std::string getName(const LLUUID &id);
59 void deleteAll();
60 //void bubbleSort();
61
62 static BOOL insertBefore(LLTextureInfo* a, LLTextureInfo* b);
63
64public:
65 LLLinkedList<LLTextureInfo> mTextureInfoList;
66};
67
68extern LLTextureTable gTextureTable;
69
70#endif
diff --git a/linden/indra/newview/lltextureview.cpp b/linden/indra/newview/lltextureview.cpp
index bd9b273..6a24a57 100644
--- a/linden/indra/newview/lltextureview.cpp
+++ b/linden/indra/newview/lltextureview.cpp
@@ -43,7 +43,6 @@
43#include "lltexlayer.h" 43#include "lltexlayer.h"
44#include "lltexturecache.h" 44#include "lltexturecache.h"
45#include "lltexturefetch.h" 45#include "lltexturefetch.h"
46#include "lltexturetable.h"
47#include "llviewerobject.h" 46#include "llviewerobject.h"
48#include "llviewerimage.h" 47#include "llviewerimage.h"
49#include "llviewerimagelist.h" 48#include "llviewerimagelist.h"
@@ -183,9 +182,6 @@ void LLTextureBar::draw()
183 182
184 LLGLSUIDefault gls_ui; 183 LLGLSUIDefault gls_ui;
185 184
186 // Get the name or UUID of the image.
187 gTextureTable.getName(mImagep->mID);
188
189 // Name, pixel_area, requested pixel area, decode priority 185 // Name, pixel_area, requested pixel area, decode priority
190 char uuid_str[255]; 186 char uuid_str[255];
191 mImagep->mID.toString(uuid_str); 187 mImagep->mID.toString(uuid_str);
diff --git a/linden/indra/newview/llviewerimage.cpp b/linden/indra/newview/llviewerimage.cpp
index b129a9a..e40fb80 100644
--- a/linden/indra/newview/llviewerimage.cpp
+++ b/linden/indra/newview/llviewerimage.cpp
@@ -43,7 +43,6 @@
43#include "llimagetga.h" 43#include "llimagetga.h"
44#include "llmemtype.h" 44#include "llmemtype.h"
45#include "llstl.h" 45#include "llstl.h"
46#include "lltexturetable.h"
47#include "llvfile.h" 46#include "llvfile.h"
48#include "llvfs.h" 47#include "llvfs.h"
49#include "message.h" 48#include "message.h"
diff --git a/linden/indra/newview/llviewerimagelist.cpp b/linden/indra/newview/llviewerimagelist.cpp
index fce719f..6616bc6 100644
--- a/linden/indra/newview/llviewerimagelist.cpp
+++ b/linden/indra/newview/llviewerimagelist.cpp
@@ -51,7 +51,6 @@
51#include "llagent.h" 51#include "llagent.h"
52#include "lltexturecache.h" 52#include "lltexturecache.h"
53#include "lltexturefetch.h" 53#include "lltexturefetch.h"
54#include "lltexturetable.h" // For looking up names from uuid's.
55#include "llviewercontrol.h" 54#include "llviewercontrol.h"
56#include "llviewerimage.h" 55#include "llviewerimage.h"
57#include "llviewerregion.h" 56#include "llviewerregion.h"
diff --git a/linden/indra/newview/llviewerjointattachment.h b/linden/indra/newview/llviewerjointattachment.h
index a8c2c71..ce2f8b9 100644
--- a/linden/indra/newview/llviewerjointattachment.h
+++ b/linden/indra/newview/llviewerjointattachment.h
@@ -79,7 +79,7 @@ public:
79 79
80 S32 getGroup() { return mGroup; } 80 S32 getGroup() { return mGroup; }
81 S32 getPieSlice() { return mPieSlice; } 81 S32 getPieSlice() { return mPieSlice; }
82 BOOL getAttachmentDirty() { return mAttachmentDirty && mAttachedObject.notNull(); } 82 BOOL getAttachmentDirty() { return mAttachmentDirty && mAttachedObject; }
83 LLViewerObject *getObject() { return mAttachedObject; } 83 LLViewerObject *getObject() { return mAttachedObject; }
84 S32 getNumObjects() { return (mAttachedObject ? 1 : 0); } 84 S32 getNumObjects() { return (mAttachedObject ? 1 : 0); }
85 const LLUUID& getItemID() { return mItemID; } 85 const LLUUID& getItemID() { return mItemID; }
@@ -99,7 +99,8 @@ protected:
99 99
100protected: 100protected:
101 LLJoint* mJoint; 101 LLJoint* mJoint;
102 LLPointer<LLViewerObject> mAttachedObject; 102 // Backlink only; don't make this an LLPointer.
103 LLViewerObject* mAttachedObject;
103 BOOL mAttachmentDirty; // does attachment drawable need to be fixed up? 104 BOOL mAttachmentDirty; // does attachment drawable need to be fixed up?
104 BOOL mVisibleInFirst; 105 BOOL mVisibleInFirst;
105 LLVector3 mOriginalPos; 106 LLVector3 mOriginalPos;
diff --git a/linden/indra/newview/llviewerjointmesh.cpp b/linden/indra/newview/llviewerjointmesh.cpp
index c76990c..642fa7b 100644
--- a/linden/indra/newview/llviewerjointmesh.cpp
+++ b/linden/indra/newview/llviewerjointmesh.cpp
@@ -31,14 +31,11 @@
31//----------------------------------------------------------------------------- 31//-----------------------------------------------------------------------------
32#include "llviewerprecompiledheaders.h" 32#include "llviewerprecompiledheaders.h"
33 33
34#if LL_WINDOWS // For Intel vector classes
35 #include "fvec.h"
36#endif
37
38#include "imageids.h" 34#include "imageids.h"
39#include "llfasttimer.h" 35#include "llfasttimer.h"
40 36
41#include "llagent.h" 37#include "llagent.h"
38#include "llapr.h"
42#include "llbox.h" 39#include "llbox.h"
43#include "lldrawable.h" 40#include "lldrawable.h"
44#include "lldrawpoolavatar.h" 41#include "lldrawpoolavatar.h"
@@ -49,12 +46,18 @@
49#include "llglheaders.h" 46#include "llglheaders.h"
50#include "lltexlayer.h" 47#include "lltexlayer.h"
51#include "llviewercamera.h" 48#include "llviewercamera.h"
49#include "llviewercontrol.h"
52#include "llviewerimagelist.h" 50#include "llviewerimagelist.h"
53#include "llviewerjointmesh.h" 51#include "llviewerjointmesh.h"
54#include "llvoavatar.h" 52#include "llvoavatar.h"
55#include "llsky.h" 53#include "llsky.h"
56#include "pipeline.h" 54#include "pipeline.h"
57#include "llglslshader.h" 55#include "llglslshader.h"
56#include "llmath.h"
57#include "v4math.h"
58#include "m3math.h"
59#include "m4math.h"
60
58 61
59#if !LL_DARWIN && !LL_LINUX 62#if !LL_DARWIN && !LL_LINUX
60extern PFNGLWEIGHTPOINTERARBPROC glWeightPointerARB; 63extern PFNGLWEIGHTPOINTERARBPROC glWeightPointerARB;
@@ -68,6 +71,7 @@ static const U32 sRenderMask = LLVertexBuffer::MAP_VERTEX |
68 LLVertexBuffer::MAP_NORMAL | 71 LLVertexBuffer::MAP_NORMAL |
69 LLVertexBuffer::MAP_TEXCOORD; 72 LLVertexBuffer::MAP_TEXCOORD;
70 73
74
71//----------------------------------------------------------------------------- 75//-----------------------------------------------------------------------------
72//----------------------------------------------------------------------------- 76//-----------------------------------------------------------------------------
73// LLViewerJointMesh::LLSkinJoint 77// LLViewerJointMesh::LLSkinJoint
@@ -120,6 +124,7 @@ BOOL LLSkinJoint::setupSkinJoint( LLViewerJoint *joint)
120 return TRUE; 124 return TRUE;
121} 125}
122 126
127
123//----------------------------------------------------------------------------- 128//-----------------------------------------------------------------------------
124//----------------------------------------------------------------------------- 129//-----------------------------------------------------------------------------
125// LLViewerJointMesh 130// LLViewerJointMesh
@@ -414,9 +419,9 @@ const S32 NUM_AXES = 3;
414// rotation Z 0-n 419// rotation Z 0-n
415// pivot parent 0-n -- child = n+1 420// pivot parent 0-n -- child = n+1
416 421
417static LLMatrix4 gJointMat[32]; 422static LLMatrix4 gJointMatUnaligned[32];
418static LLMatrix3 gJointRot[32]; 423static LLMatrix3 gJointRotUnaligned[32];
419static LLVector4 gJointPivot[32]; 424static LLVector4 gJointPivot[32];
420 425
421//----------------------------------------------------------------------------- 426//-----------------------------------------------------------------------------
422// uploadJointMatrices() 427// uploadJointMatrices()
@@ -437,8 +442,8 @@ void LLViewerJointMesh::uploadJointMatrices()
437 { 442 {
438 joint_mat *= LLDrawPoolAvatar::getModelView(); 443 joint_mat *= LLDrawPoolAvatar::getModelView();
439 } 444 }
440 gJointMat[joint_num] = joint_mat; 445 gJointMatUnaligned[joint_num] = joint_mat;
441 gJointRot[joint_num] = joint_mat.getMat3(); 446 gJointRotUnaligned[joint_num] = joint_mat.getMat3();
442 } 447 }
443 448
444 BOOL last_pivot_uploaded = FALSE; 449 BOOL last_pivot_uploaded = FALSE;
@@ -475,8 +480,8 @@ void LLViewerJointMesh::uploadJointMatrices()
475 { 480 {
476 LLVector3 pivot; 481 LLVector3 pivot;
477 pivot = LLVector3(gJointPivot[i]); 482 pivot = LLVector3(gJointPivot[i]);
478 pivot = pivot * gJointRot[i]; 483 pivot = pivot * gJointRotUnaligned[i];
479 gJointMat[i].translate(pivot); 484 gJointMatUnaligned[i].translate(pivot);
480 } 485 }
481 486
482 // upload matrices 487 // upload matrices
@@ -487,11 +492,11 @@ void LLViewerJointMesh::uploadJointMatrices()
487 492
488 for (joint_num = 0; joint_num < reference_mesh->mJointRenderData.count(); joint_num++) 493 for (joint_num = 0; joint_num < reference_mesh->mJointRenderData.count(); joint_num++)
489 { 494 {
490 gJointMat[joint_num].transpose(); 495 gJointMatUnaligned[joint_num].transpose();
491 496
492 for (S32 axis = 0; axis < NUM_AXES; axis++) 497 for (S32 axis = 0; axis < NUM_AXES; axis++)
493 { 498 {
494 F32* vector = gJointMat[joint_num].mMatrix[axis]; 499 F32* vector = gJointMatUnaligned[joint_num].mMatrix[axis];
495 //glProgramLocalParameter4fvARB(GL_VERTEX_PROGRAM_ARB, LL_CHARACTER_MAX_JOINTS_PER_MESH * axis + joint_num+5, (GLfloat*)vector); 500 //glProgramLocalParameter4fvARB(GL_VERTEX_PROGRAM_ARB, LL_CHARACTER_MAX_JOINTS_PER_MESH * axis + joint_num+5, (GLfloat*)vector);
496 U32 offset = LL_CHARACTER_MAX_JOINTS_PER_MESH*axis+joint_num; 501 U32 offset = LL_CHARACTER_MAX_JOINTS_PER_MESH*axis+joint_num;
497 memcpy(mat+offset*4, vector, sizeof(GLfloat)*4); 502 memcpy(mat+offset*4, vector, sizeof(GLfloat)*4);
@@ -903,21 +908,9 @@ BOOL LLViewerJointMesh::updateLOD(F32 pixel_area, BOOL activate)
903 return (valid != activate); 908 return (valid != activate);
904} 909}
905 910
906 911// static
907void LLViewerJointMesh::updateGeometry() 912void LLViewerJointMesh::updateGeometryOriginal(LLFace *mFace, LLPolyMesh *mMesh)
908{ 913{
909 if (!(mValid
910 && mMesh
911 && mFace
912 && mMesh->hasWeights()
913 && mFace->mVertexBuffer.notNull()
914 && LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR) == 0))
915 {
916 return;
917 }
918
919 uploadJointMatrices();
920
921 LLStrider<LLVector3> o_vertices; 914 LLStrider<LLVector3> o_vertices;
922 LLStrider<LLVector3> o_normals; 915 LLStrider<LLVector3> o_normals;
923 916
@@ -958,9 +951,9 @@ void LLViewerJointMesh::updateGeometry()
958 // No lerp required in this case. 951 // No lerp required in this case.
959 if (w == 1.0f) 952 if (w == 1.0f)
960 { 953 {
961 gBlendMat = gJointMat[joint+1]; 954 gBlendMat = gJointMatUnaligned[joint+1];
962 o_vertices[bidx] = coords[index] * gBlendMat; 955 o_vertices[bidx] = coords[index] * gBlendMat;
963 gBlendRotMat = gJointRot[joint+1]; 956 gBlendRotMat = gJointRotUnaligned[joint+1];
964 o_normals[bidx] = normals[index] * gBlendRotMat; 957 o_normals[bidx] = normals[index] * gBlendRotMat;
965 continue; 958 continue;
966 } 959 }
@@ -968,8 +961,8 @@ void LLViewerJointMesh::updateGeometry()
968 // Try to keep all the accesses to the matrix data as close 961 // Try to keep all the accesses to the matrix data as close
969 // together as possible. This function is a hot spot on the 962 // together as possible. This function is a hot spot on the
970 // Mac. JC 963 // Mac. JC
971 LLMatrix4 &m0 = gJointMat[joint+1]; 964 LLMatrix4 &m0 = gJointMatUnaligned[joint+1];
972 LLMatrix4 &m1 = gJointMat[joint+0]; 965 LLMatrix4 &m1 = gJointMatUnaligned[joint+0];
973 966
974 gBlendMat.mMatrix[VX][VX] = lerp(m1.mMatrix[VX][VX], m0.mMatrix[VX][VX], w); 967 gBlendMat.mMatrix[VX][VX] = lerp(m1.mMatrix[VX][VX], m0.mMatrix[VX][VX], w);
975 gBlendMat.mMatrix[VX][VY] = lerp(m1.mMatrix[VX][VY], m0.mMatrix[VX][VY], w); 968 gBlendMat.mMatrix[VX][VY] = lerp(m1.mMatrix[VX][VY], m0.mMatrix[VX][VY], w);
@@ -989,8 +982,8 @@ void LLViewerJointMesh::updateGeometry()
989 982
990 o_vertices[bidx] = coords[index] * gBlendMat; 983 o_vertices[bidx] = coords[index] * gBlendMat;
991 984
992 LLMatrix3 &n0 = gJointRot[joint+1]; 985 LLMatrix3 &n0 = gJointRotUnaligned[joint+1];
993 LLMatrix3 &n1 = gJointRot[joint+0]; 986 LLMatrix3 &n1 = gJointRotUnaligned[joint+0];
994 987
995 gBlendRotMat.mMatrix[VX][VX] = lerp(n1.mMatrix[VX][VX], n0.mMatrix[VX][VX], w); 988 gBlendRotMat.mMatrix[VX][VX] = lerp(n1.mMatrix[VX][VX], n0.mMatrix[VX][VX], w);
996 gBlendRotMat.mMatrix[VX][VY] = lerp(n1.mMatrix[VX][VY], n0.mMatrix[VX][VY], w); 989 gBlendRotMat.mMatrix[VX][VY] = lerp(n1.mMatrix[VX][VY], n0.mMatrix[VX][VY], w);
@@ -1008,6 +1001,161 @@ void LLViewerJointMesh::updateGeometry()
1008 } 1001 }
1009} 1002}
1010 1003
1004const U32 UPDATE_GEOMETRY_CALL_MASK = 0x1FFF; // 8K samples before overflow
1005const U32 UPDATE_GEOMETRY_CALL_OVERFLOW = ~UPDATE_GEOMETRY_CALL_MASK;
1006static bool sUpdateGeometryCallPointer = false;
1007static F64 sUpdateGeometryGlobalTime = 0.0 ;
1008static F64 sUpdateGeometryElapsedTime = 0.0 ;
1009static F64 sUpdateGeometryElapsedTimeOff = 0.0 ;
1010static F64 sUpdateGeometryElapsedTimeOn = 0.0 ;
1011static F64 sUpdateGeometryRunAvgOff[10];
1012static F64 sUpdateGeometryRunAvgOn[10];
1013static U32 sUpdateGeometryRunCount = 0 ;
1014static U32 sUpdateGeometryCalls = 0 ;
1015static U32 sUpdateGeometryLastProcessor = 0 ;
1016void (*LLViewerJointMesh::sUpdateGeometryFunc)(LLFace* face, LLPolyMesh* mesh);
1017
1018void LLViewerJointMesh::updateGeometry()
1019{
1020 extern BOOL gVectorizePerfTest;
1021 extern U32 gVectorizeProcessor;
1022
1023 if (!(mValid
1024 && mMesh
1025 && mFace
1026 && mMesh->hasWeights()
1027 && mFace->mVertexBuffer.notNull()
1028 && LLShaderMgr::getVertexShaderLevel(LLShaderMgr::SHADER_AVATAR) == 0))
1029 {
1030 return;
1031 }
1032
1033 if (!gVectorizePerfTest)
1034 {
1035 // Once we've measured performance, just run the specified
1036 // code version.
1037 if(sUpdateGeometryFunc == updateGeometryOriginal)
1038 uploadJointMatrices();
1039 sUpdateGeometryFunc(mFace, mMesh);
1040 }
1041 else
1042 {
1043 // At startup, measure the amount of time in skinning and choose
1044 // the fastest one.
1045 LLTimer ug_timer ;
1046
1047 if (sUpdateGeometryCallPointer)
1048 {
1049 if(sUpdateGeometryFunc == updateGeometryOriginal)
1050 uploadJointMatrices();
1051 // call accelerated version for this processor
1052 sUpdateGeometryFunc(mFace, mMesh);
1053 }
1054 else
1055 {
1056 uploadJointMatrices();
1057 updateGeometryOriginal(mFace, mMesh);
1058 }
1059
1060 sUpdateGeometryElapsedTime += ug_timer.getElapsedTimeF64();
1061 ++sUpdateGeometryCalls;
1062 if(0 != (sUpdateGeometryCalls & UPDATE_GEOMETRY_CALL_OVERFLOW))
1063 {
1064 F64 time_since_app_start = ug_timer.getElapsedSeconds();
1065 if(sUpdateGeometryGlobalTime == 0.0
1066 || sUpdateGeometryLastProcessor != gVectorizeProcessor)
1067 {
1068 sUpdateGeometryGlobalTime = time_since_app_start;
1069 sUpdateGeometryElapsedTime = 0;
1070 sUpdateGeometryCalls = 0;
1071 sUpdateGeometryRunCount = 0;
1072 sUpdateGeometryLastProcessor = gVectorizeProcessor;
1073 sUpdateGeometryCallPointer = false;
1074 return;
1075 }
1076 F64 percent_time_in_function =
1077 ( sUpdateGeometryElapsedTime * 100.0 ) / ( time_since_app_start - sUpdateGeometryGlobalTime ) ;
1078 sUpdateGeometryGlobalTime = time_since_app_start;
1079 if (!sUpdateGeometryCallPointer)
1080 {
1081 // First set of run data is with vectorization off.
1082 sUpdateGeometryCallPointer = true;
1083 llinfos << "profile (avg of " << sUpdateGeometryCalls << " samples) = "
1084 << "vectorize off " << percent_time_in_function
1085 << "% of time with "
1086 << (sUpdateGeometryElapsedTime / (F64)sUpdateGeometryCalls)
1087 << " seconds per call "
1088 << llendl;
1089 sUpdateGeometryRunAvgOff[sUpdateGeometryRunCount] = percent_time_in_function;
1090 sUpdateGeometryElapsedTimeOff += sUpdateGeometryElapsedTime;
1091 sUpdateGeometryCalls = 0;
1092 }
1093 else
1094 {
1095 // Second set of run data is with vectorization on.
1096 sUpdateGeometryCallPointer = false;
1097 llinfos << "profile (avg of " << sUpdateGeometryCalls << " samples) = "
1098 << "VEC on " << percent_time_in_function
1099 << "% of time with "
1100 << (sUpdateGeometryElapsedTime / (F64)sUpdateGeometryCalls)
1101 << " seconds per call "
1102 << llendl;
1103 sUpdateGeometryRunAvgOn[sUpdateGeometryRunCount] = percent_time_in_function ;
1104 sUpdateGeometryElapsedTimeOn += sUpdateGeometryElapsedTime;
1105
1106 sUpdateGeometryCalls = 0;
1107 sUpdateGeometryRunCount++;
1108 F64 a = 0.0, b = 0.0;
1109 for(U32 i = 0; i<sUpdateGeometryRunCount; i++)
1110 {
1111 a += sUpdateGeometryRunAvgOff[i];
1112 b += sUpdateGeometryRunAvgOn[i];
1113 }
1114 a /= sUpdateGeometryRunCount;
1115 b /= sUpdateGeometryRunCount;
1116 F64 perf_boost = ( sUpdateGeometryElapsedTimeOff - sUpdateGeometryElapsedTimeOn ) / sUpdateGeometryElapsedTimeOn;
1117 llinfos << "run averages (" << (F64)sUpdateGeometryRunCount
1118 << "/10) vectorize off " << a
1119 << "% : vectorize type " << gVectorizeProcessor
1120 << " " << b
1121 << "% : performance boost "
1122 << perf_boost * 100.0
1123 << "%"
1124 << llendl ;
1125 if(sUpdateGeometryRunCount == 10)
1126 {
1127 // In case user runs test again, force reset of data on
1128 // next run.
1129 sUpdateGeometryGlobalTime = 0.0;
1130
1131 // We have data now on which version is faster. Switch to that
1132 // code and save the data for next run.
1133 gVectorizePerfTest = FALSE;
1134 gSavedSettings.setBOOL("VectorizePerfTest", FALSE);
1135
1136 if (perf_boost > 0.0)
1137 {
1138 llinfos << "Vectorization improves avatar skinning performance, "
1139 << "keeping on for future runs."
1140 << llendl;
1141 gSavedSettings.setBOOL("VectorizeSkin", TRUE);
1142 }
1143 else
1144 {
1145 // SIMD decreases performance, fall back to original code
1146 llinfos << "Vectorization decreases avatar skinning performance, "
1147 << "switching back to original code."
1148 << llendl;
1149
1150 gSavedSettings.setBOOL("VectorizeSkin", FALSE);
1151 }
1152 }
1153 }
1154 sUpdateGeometryElapsedTime = 0.0f;
1155 }
1156 }
1157}
1158
1011void LLViewerJointMesh::dump() 1159void LLViewerJointMesh::dump()
1012{ 1160{
1013 if (mValid) 1161 if (mValid)
diff --git a/linden/indra/newview/llviewerjointmesh.h b/linden/indra/newview/llviewerjointmesh.h
index f016da6..b40daed 100644
--- a/linden/indra/newview/llviewerjointmesh.h
+++ b/linden/indra/newview/llviewerjointmesh.h
@@ -146,6 +146,22 @@ public:
146 146
147 /*virtual*/ BOOL isAnimatable() { return FALSE; } 147 /*virtual*/ BOOL isAnimatable() { return FALSE; }
148 void writeCAL3D(apr_file_t* fp, S32 material_num, LLCharacter* characterp); 148 void writeCAL3D(apr_file_t* fp, S32 material_num, LLCharacter* characterp);
149
150 // Avatar vertex skinning is a significant performance issue on computers
151 // with avatar vertex programs turned off (for example, most Macs). We
152 // therefore have custom versions that use SIMD instructions.
153 //
154 // These functions require compiler options for SSE2, SSE, or neither, and
155 // hence are contained in separate individual .cpp files. JC
156 static void updateGeometryOriginal(LLFace* face, LLPolyMesh* mesh);
157 // generic vector code, used for Altivec
158 static void updateGeometryVectorized(LLFace* face, LLPolyMesh* mesh);
159 static void updateGeometrySSE(LLFace* face, LLPolyMesh* mesh);
160 static void updateGeometrySSE2(LLFace* face, LLPolyMesh* mesh);
161
162 // Use a fuction pointer to indicate which version we are running.
163 static void (*sUpdateGeometryFunc)(LLFace* face, LLPolyMesh* mesh);
164
149private: 165private:
150 // Allocate skin data 166 // Allocate skin data
151 BOOL allocateSkinData( U32 numSkinJoints ); 167 BOOL allocateSkinData( U32 numSkinJoints );
diff --git a/linden/indra/newview/llviewerjointmesh_sse.cpp b/linden/indra/newview/llviewerjointmesh_sse.cpp
new file mode 100644
index 0000000..4e30ce1
--- /dev/null
+++ b/linden/indra/newview/llviewerjointmesh_sse.cpp
@@ -0,0 +1,114 @@
1/**
2 * @file llviewerjointmesh.cpp
3 * @brief LLV4 class implementation with LLViewerJointMesh class
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29//-----------------------------------------------------------------------------
30// Header Files
31//-----------------------------------------------------------------------------
32
33// Do not use precompiled headers, because we need to build this file with
34// SSE support, but not the precompiled header file. JC
35#include "linden_common.h"
36
37#include "llviewerjointmesh.h"
38
39// project includes
40#include "llface.h"
41#include "llpolymesh.h"
42
43// library includes
44#include "lldarray.h"
45#include "llv4math.h" // for LL_VECTORIZE
46#include "llv4matrix3.h"
47#include "llv4matrix4.h"
48#include "v3math.h"
49
50// *NOTE: SSE must be enabled for this module
51
52#if LL_VECTORIZE
53
54static LLV4Matrix4 sJointMat[32];
55
56inline void matrix_translate(LLV4Matrix4& m, const LLMatrix4* w, const LLVector3& j)
57{
58 m.mV[VX] = _mm_loadu_ps(w->mMatrix[VX]);
59 m.mV[VY] = _mm_loadu_ps(w->mMatrix[VY]);
60 m.mV[VZ] = _mm_loadu_ps(w->mMatrix[VZ]);
61 m.mV[VW] = _mm_loadu_ps(w->mMatrix[VW]);
62 m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VX]), m.mV[VX])); // ( ax * vx ) + vw
63 m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VY]), m.mV[VY]));
64 m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VZ]), m.mV[VZ]));
65}
66
67// static
68void LLViewerJointMesh::updateGeometrySSE(LLFace *face, LLPolyMesh *mesh)
69{
70 LLDynamicArray<LLJointRenderData*>& joint_data = mesh->getReferenceMesh()->mJointRenderData;
71
72 //upload joint pivots/matrices
73 for(S32 j = 0, jend = joint_data.count(); j < jend ; ++j )
74 {
75 matrix_translate(sJointMat[j], joint_data[j]->mWorldMatrix,
76 joint_data[j]->mSkinJoint ?
77 joint_data[j]->mSkinJoint->mRootToJointSkinOffset
78 : joint_data[j+1]->mSkinJoint->mRootToParentJointSkinOffset);
79 }
80
81 F32 weight = F32_MAX;
82 LLV4Matrix4 blend_mat;
83
84 LLStrider<LLVector3> o_vertices;
85 LLStrider<LLVector3> o_normals;
86
87 LLVertexBuffer *buffer = face->mVertexBuffer;
88 buffer->getVertexStrider(o_vertices, mesh->mFaceVertexOffset);
89 buffer->getNormalStrider(o_normals, mesh->mFaceVertexOffset);
90
91 const F32* weights = mesh->getWeights();
92 const LLVector3* coords = mesh->getCoords();
93 const LLVector3* normals = mesh->getNormals();
94 for (U32 index = 0, index_end = mesh->getNumVertices(); index < index_end; ++index)
95 {
96 if( weight != weights[index])
97 {
98 S32 joint = llfloor(weight = weights[index]);
99 blend_mat.lerp(sJointMat[joint], sJointMat[joint+1], weight - joint);
100 }
101 blend_mat.multiply(coords[index], o_vertices[index]);
102 ((LLV4Matrix3)blend_mat).multiply(normals[index], o_normals[index]);
103 }
104}
105
106#else
107
108void LLViewerJointMesh::updateGeometrySSE(LLFace *face, LLPolyMesh *mesh)
109{
110 LLViewerJointMesh::updateGeometryVectorized(face, mesh);
111 return;
112}
113
114#endif
diff --git a/linden/indra/newview/llviewerjointmesh_sse2.cpp b/linden/indra/newview/llviewerjointmesh_sse2.cpp
new file mode 100644
index 0000000..1c205ae
--- /dev/null
+++ b/linden/indra/newview/llviewerjointmesh_sse2.cpp
@@ -0,0 +1,116 @@
1/**
2 * @file llviewerjointmesh.cpp
3 * @brief LLV4 class implementation with LLViewerJointMesh class
4 *
5 * Copyright (c) 2007-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29//-----------------------------------------------------------------------------
30// Header Files
31//-----------------------------------------------------------------------------
32
33// Do not use precompiled headers, because we need to build this file with
34// SSE support, but not the precompiled header file. JC
35#include "linden_common.h"
36
37#include "llviewerjointmesh.h"
38
39// project includes
40#include "llface.h"
41#include "llpolymesh.h"
42
43// library includes
44#include "lldarray.h"
45#include "llstrider.h"
46#include "llv4math.h" // for LL_VECTORIZE
47#include "llv4matrix3.h"
48#include "llv4matrix4.h"
49#include "m4math.h"
50#include "v3math.h"
51
52// *NOTE: SSE2 must be enabled for this module
53
54#if LL_VECTORIZE
55
56static LLV4Matrix4 sJointMat[32];
57
58inline void matrix_translate(LLV4Matrix4& m, const LLMatrix4* w, const LLVector3& j)
59{
60 m.mV[VX] = _mm_loadu_ps(w->mMatrix[VX]);
61 m.mV[VY] = _mm_loadu_ps(w->mMatrix[VY]);
62 m.mV[VZ] = _mm_loadu_ps(w->mMatrix[VZ]);
63 m.mV[VW] = _mm_loadu_ps(w->mMatrix[VW]);
64 m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VX]), m.mV[VX])); // ( ax * vx ) + vw
65 m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VY]), m.mV[VY]));
66 m.mV[VW] = _mm_add_ps(m.mV[VW], _mm_mul_ps(_mm_set1_ps(j.mV[VZ]), m.mV[VZ]));
67}
68
69// static
70void LLViewerJointMesh::updateGeometrySSE2(LLFace *face, LLPolyMesh *mesh)
71{
72 LLDynamicArray<LLJointRenderData*>& joint_data = mesh->getReferenceMesh()->mJointRenderData;
73
74 //upload joint pivots/matrices
75 for(S32 j = 0, jend = joint_data.count(); j < jend ; ++j )
76 {
77 matrix_translate(sJointMat[j], joint_data[j]->mWorldMatrix,
78 joint_data[j]->mSkinJoint ?
79 joint_data[j]->mSkinJoint->mRootToJointSkinOffset
80 : joint_data[j+1]->mSkinJoint->mRootToParentJointSkinOffset);
81 }
82
83 F32 weight = F32_MAX;
84 LLV4Matrix4 blend_mat;
85
86 LLStrider<LLVector3> o_vertices;
87 LLStrider<LLVector3> o_normals;
88
89 LLVertexBuffer *buffer = face->mVertexBuffer;
90 buffer->getVertexStrider(o_vertices, mesh->mFaceVertexOffset);
91 buffer->getNormalStrider(o_normals, mesh->mFaceVertexOffset);
92
93 const F32* weights = mesh->getWeights();
94 const LLVector3* coords = mesh->getCoords();
95 const LLVector3* normals = mesh->getNormals();
96 for (U32 index = 0, index_end = mesh->getNumVertices(); index < index_end; ++index)
97 {
98 if( weight != weights[index])
99 {
100 S32 joint = llfloor(weight = weights[index]);
101 blend_mat.lerp(sJointMat[joint], sJointMat[joint+1], weight - joint);
102 }
103 blend_mat.multiply(coords[index], o_vertices[index]);
104 ((LLV4Matrix3)blend_mat).multiply(normals[index], o_normals[index]);
105 }
106}
107
108#else
109
110void LLViewerJointMesh::updateGeometrySSE2(LLFace *face, LLPolyMesh *mesh)
111{
112 LLViewerJointMesh::updateGeometryVectorized(face, mesh);
113 return;
114}
115
116#endif
diff --git a/linden/indra/newview/llviewerjointmesh_vec.cpp b/linden/indra/newview/llviewerjointmesh_vec.cpp
new file mode 100644
index 0000000..4d52361
--- /dev/null
+++ b/linden/indra/newview/llviewerjointmesh_vec.cpp
@@ -0,0 +1,97 @@
1/**
2 * @file llviewerjointmesh.cpp
3 * @brief LLV4 math class implementation with LLViewerJointMesh class
4 *
5 * Copyright (c) 2001-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29//-----------------------------------------------------------------------------
30// Header Files
31//-----------------------------------------------------------------------------
32#include "llviewerprecompiledheaders.h"
33
34#include "llviewerjointmesh.h"
35
36#include "llface.h"
37#include "llpolymesh.h"
38#include "llv4math.h"
39#include "llv4matrix3.h"
40#include "llv4matrix4.h"
41
42// *NOTE: This is the fallback code for vectorized joint mesh skinning.
43// For builds that must support non-SSE x86 code (Windows, perhaps Linux)
44// SSE code generation should be disabled for this file.
45//
46// For builds that run on processors that always have SSE (Mac),
47// SSE code generation can be enabled. JC
48
49static LLV4Matrix4 sJointMat[32];
50
51// static
52void LLViewerJointMesh::updateGeometryVectorized(LLFace *face, LLPolyMesh *mesh)
53{
54 LLDynamicArray<LLJointRenderData*>& joint_data = mesh->getReferenceMesh()->mJointRenderData;
55 S32 j, joint_num, joint_end = joint_data.count();
56 LLV4Vector3 pivot;
57
58 //upload joint pivots/matrices
59 for(j = joint_num = 0; joint_num < joint_end ; ++joint_num )
60 {
61 LLSkinJoint *sj;
62 const LLMatrix4 * wm = joint_data[joint_num]->mWorldMatrix;
63 if (NULL == (sj = joint_data[joint_num]->mSkinJoint))
64 {
65 sj = joint_data[++joint_num]->mSkinJoint;
66 ((LLV4Matrix3)(sJointMat[j] = *wm)).multiply(sj->mRootToParentJointSkinOffset, pivot);
67 sJointMat[j++].translate(pivot);
68 wm = joint_data[joint_num]->mWorldMatrix;
69 }
70 ((LLV4Matrix3)(sJointMat[j] = *wm)).multiply(sj->mRootToJointSkinOffset, pivot);
71 sJointMat[j++].translate(pivot);
72 }
73
74 F32 weight = F32_MAX;
75 LLV4Matrix4 blend_mat;
76
77 LLStrider<LLVector3> o_vertices;
78 LLStrider<LLVector3> o_normals;
79
80 LLVertexBuffer *buffer = face->mVertexBuffer;
81 buffer->getVertexStrider(o_vertices, mesh->mFaceVertexOffset);
82 buffer->getNormalStrider(o_normals, mesh->mFaceVertexOffset);
83
84 const F32* weights = mesh->getWeights();
85 const LLVector3* coords = mesh->getCoords();
86 const LLVector3* normals = mesh->getNormals();
87 for (U32 index = 0, index_end = mesh->getNumVertices(); index < index_end; ++index)
88 {
89 if( weight != weights[index])
90 {
91 S32 joint = llfloor(weight = weights[index]);
92 blend_mat.lerp(sJointMat[joint], sJointMat[joint+1], weight - joint);
93 }
94 blend_mat.multiply(coords[index], o_vertices[index]);
95 ((LLV4Matrix3)blend_mat).multiply(normals[index], o_normals[index]);
96 }
97}
diff --git a/linden/indra/newview/llviewermenu.cpp b/linden/indra/newview/llviewermenu.cpp
index b36b9a2..a142aff 100644
--- a/linden/indra/newview/llviewermenu.cpp
+++ b/linden/indra/newview/llviewermenu.cpp
@@ -980,6 +980,7 @@ extern BOOL gDebugClicks;
980extern BOOL gDebugWindowProc; 980extern BOOL gDebugWindowProc;
981extern BOOL gDebugTextEditorTips; 981extern BOOL gDebugTextEditorTips;
982extern BOOL gDebugSelectMgr; 982extern BOOL gDebugSelectMgr;
983extern BOOL gVectorizePerfTest;
983 984
984void init_debug_ui_menu(LLMenuGL* menu) 985void init_debug_ui_menu(LLMenuGL* menu)
985{ 986{
@@ -1189,6 +1190,8 @@ void init_debug_rendering_menu(LLMenuGL* menu)
1189 (void*)"ShowDepthBuffer")); 1190 (void*)"ShowDepthBuffer"));
1190 sub_menu->append(new LLMenuItemToggleGL("Show Select Buffer", &gDebugSelect)); 1191 sub_menu->append(new LLMenuItemToggleGL("Show Select Buffer", &gDebugSelect));
1191 1192
1193 sub_menu->append(new LLMenuItemToggleGL("Vectorize Perf Test", &gVectorizePerfTest));
1194
1192 sub_menu = new LLMenuGL("Render Tests"); 1195 sub_menu = new LLMenuGL("Render Tests");
1193 1196
1194 sub_menu->append(new LLMenuItemCheckGL("Camera Offset", 1197 sub_menu->append(new LLMenuItemCheckGL("Camera Offset",
diff --git a/linden/indra/newview/llviewermenufile.cpp b/linden/indra/newview/llviewermenufile.cpp
index 19dfebe..09b2baf 100644
--- a/linden/indra/newview/llviewermenufile.cpp
+++ b/linden/indra/newview/llviewermenufile.cpp
@@ -435,7 +435,7 @@ class LLFileQuit : public view_listener_t
435{ 435{
436 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata) 436 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
437 { 437 {
438 app_request_quit(); 438 app_user_quit();
439 return true; 439 return true;
440 } 440 }
441}; 441};
diff --git a/linden/indra/newview/llviewermessage.cpp b/linden/indra/newview/llviewermessage.cpp
index 8f2fc1a..d9e2927 100644
--- a/linden/indra/newview/llviewermessage.cpp
+++ b/linden/indra/newview/llviewermessage.cpp
@@ -2268,6 +2268,7 @@ void process_chat_from_simulator(LLMessageSystem *msg, void **user_data)
2268 } 2268 }
2269 break; 2269 break;
2270 case CHAT_TYPE_DEBUG_MSG: 2270 case CHAT_TYPE_DEBUG_MSG:
2271 case CHAT_TYPE_OWNER:
2271 case CHAT_TYPE_NORMAL: 2272 case CHAT_TYPE_NORMAL:
2272 verb = ": "; 2273 verb = ": ";
2273 break; 2274 break;
@@ -2573,7 +2574,7 @@ void process_teleport_finish(LLMessageSystem* msg, void**)
2573 msg->getStringFast(_PREHASH_Info, _PREHASH_SeedCapability, 2574 msg->getStringFast(_PREHASH_Info, _PREHASH_SeedCapability,
2574 STD_STRING_BUF_SIZE, seedCap); 2575 STD_STRING_BUF_SIZE, seedCap);
2575 2576
2576 // update home location if we are teleporting out of prelude 2577 // update home location if we are teleporting out of prelude - specific to teleporting to welcome area
2577 if((teleport_flags & TELEPORT_FLAGS_SET_HOME_TO_TARGET) 2578 if((teleport_flags & TELEPORT_FLAGS_SET_HOME_TO_TARGET)
2578 && (!gAgent.isGodlike())) 2579 && (!gAgent.isGodlike()))
2579 { 2580 {
@@ -4277,6 +4278,8 @@ void notify_cautioned_script_question(LLScriptQuestionCBData* cbdata, S32 orig_q
4277 // only continue if at least some permissions were requested 4278 // only continue if at least some permissions were requested
4278 if (orig_questions) 4279 if (orig_questions)
4279 { 4280 {
4281 // check to see if the person we are asking
4282
4280 // "'[OBJECTNAME]', an object owned by '[OWNERNAME]', 4283 // "'[OBJECTNAME]', an object owned by '[OWNERNAME]',
4281 // located in [REGIONNAME] at [REGIONPOS], 4284 // located in [REGIONNAME] at [REGIONPOS],
4282 // has been <granted|denied> permission to: [PERMISSIONS]." 4285 // has been <granted|denied> permission to: [PERMISSIONS]."
@@ -4440,6 +4443,9 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
4440 msg->getStringFast(_PREHASH_Data, _PREHASH_ObjectOwner, DB_FULL_NAME_BUF_SIZE, owner_name); 4443 msg->getStringFast(_PREHASH_Data, _PREHASH_ObjectOwner, DB_FULL_NAME_BUF_SIZE, owner_name);
4441 msg->getS32Fast(_PREHASH_Data, _PREHASH_Questions, questions ); 4444 msg->getS32Fast(_PREHASH_Data, _PREHASH_Questions, questions );
4442 4445
4446 // don't display permission requests if this object is muted - JS.
4447 if (gMuteListp->isMuted(taskid)) return;
4448
4443 LLString script_question; 4449 LLString script_question;
4444 if (questions) 4450 if (questions)
4445 { 4451 {
diff --git a/linden/indra/newview/llviewerwindow.cpp b/linden/indra/newview/llviewerwindow.cpp
index 116df89..d2190cc 100644
--- a/linden/indra/newview/llviewerwindow.cpp
+++ b/linden/indra/newview/llviewerwindow.cpp
@@ -1154,7 +1154,7 @@ BOOL LLViewerWindow::handleCloseRequest(LLWindow *window)
1154{ 1154{
1155 // User has indicated they want to close, but we may need to ask 1155 // User has indicated they want to close, but we may need to ask
1156 // about modified documents. 1156 // about modified documents.
1157 app_request_quit(); 1157 app_user_quit();
1158 // Don't quit immediately 1158 // Don't quit immediately
1159 return FALSE; 1159 return FALSE;
1160} 1160}
diff --git a/linden/indra/newview/llvosky.h b/linden/indra/newview/llvosky.h
index 81c9bf5..12980c9 100644
--- a/linden/indra/newview/llvosky.h
+++ b/linden/indra/newview/llvosky.h
@@ -277,7 +277,7 @@ public:
277 void setHorizonVisibility(const F32 c = 1) { mHorizonVisibility = c; } 277 void setHorizonVisibility(const F32 c = 1) { mHorizonVisibility = c; }
278 const F32& getVisibility() const { return mVisibility; } 278 const F32& getVisibility() const { return mVisibility; }
279 void setVisibility(const F32 c = 1) { mVisibility = c; } 279 void setVisibility(const F32 c = 1) { mVisibility = c; }
280 const F32 getHaloBrighness() const 280 F32 getHaloBrighness() const
281 { 281 {
282 return llmax(0.f, llmin(0.9f, mHorizonVisibility)) * mVisibility; 282 return llmax(0.f, llmin(0.9f, mHorizonVisibility)) * mVisibility;
283 } 283 }
diff --git a/linden/indra/newview/llvowater.h b/linden/indra/newview/llvowater.h
index 0bb0c46..53a0a02 100644
--- a/linden/indra/newview/llvowater.h
+++ b/linden/indra/newview/llvowater.h
@@ -32,9 +32,6 @@
32#include "llviewerobject.h" 32#include "llviewerobject.h"
33#include "llviewerimage.h" 33#include "llviewerimage.h"
34#include "v2math.h" 34#include "v2math.h"
35#include "llfft.h"
36
37#include "llwaterpatch.h"
38 35
39const U32 N_RES = 16; //32 // number of subdivisions of wave tile 36const U32 N_RES = 16; //32 // number of subdivisions of wave tile
40const U8 WAVE_STEP = 8; 37const U8 WAVE_STEP = 8;
diff --git a/linden/indra/newview/llwaterpatch.cpp b/linden/indra/newview/llwaterpatch.cpp
deleted file mode 100644
index f6a8640..0000000
--- a/linden/indra/newview/llwaterpatch.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
1/**
2 * @file llwaterpatch.cpp
3 * @brief LLWaterTri class implementation
4 *
5 * Copyright (c) 2001-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29#include "llviewerprecompiledheaders.h"
30
31#include "llwaterpatch.h"
32
33#include "llvowater.h"
34
35U32 LLWaterTri::sMinStep;
36LL2Coord LLWaterTri::sCam;
37F32 LLWaterTri::sClipFar;
38U32 LLWaterTri::sMaxDivLevel;
39BOOL LLWaterTri::sCurrRound = FALSE;
40
41
42LLWaterTri::LLWaterTri (U8 level, S8 type, LLWaterTri* par): LLRoamTriNode(level, type, par), mRefine(FALSE)
43{
44 if (!parent() || type == 0)
45 {
46 mSize = mLvtx.distance(mRvtx) * sMinStep;
47 mCurr = sCurrRound;
48 setNotUpToDate();
49 return;
50 }
51
52 mSize = par->size() * OO_SQRT2;
53 setPatch(par->patch());
54 // LL2Coord c1 = par->Lvtx();
55 // LL2Coord c2 = par->Rvtx();
56
57 // if (c1.x() - c2.x() == 1 || c1.y() - c2.y() == 1)
58 // bool stophere = true;
59
60 if (type < 0) // left child
61 {
62 mLvtx = par->Tvtx();
63 mRvtx = par->Lvtx();
64 //mTvtx = middle(c1, c2);
65 } else {
66 mRvtx = par->Tvtx();
67 mLvtx = par->Rvtx();
68 //mTvtx = middle(c1, c2);
69 }
70 mTvtx = par->middleSide();
71 mMiddle = mLvtx.middle(mRvtx);
72 if (((LLWaterPatch*)patch())->visible())
73 setNotUpToDate();
74 else
75 setUpToDate();
76}
77
78
79void LLWaterTri::updatePassive()
80{
81 setUpToDate();
82 if (!leaf())
83 {
84 mLchild->updatePassive();
85 mRchild->updatePassive();
86 }
87}
88
89
90BOOL LLWaterTri::refine()
91{
92 if (upToDate())
93 return mRefine;
94
95 if (!patch()->refine(this))
96 {
97 setUpToDate();
98 mRefine = FALSE;
99 return mRefine;
100 }
101
102 const static F32 a = 0.6f;
103 const static F32 K = sMinStep / 50.f;//0.08f;
104 const static F32 eps = K;//0.01f;
105
106 const F32 tri_dist = llmin(sCam.distance(middleSide()) * sMinStep, sClipFar);
107 const F32 func = K * (1 - (1 - eps) * exp(a * (tri_dist - sClipFar)));
108
109
110 //const F32 tri_size = distance(mLvtx, mRvtx) * sMinStep;// * min_step2;
111 const F32 ratio = mSize / (tri_dist + 1);
112
113 if (tri_dist > 0.8 * sClipFar)
114 mRefine = ratio > func;
115 else
116 mRefine = (ratio > func) && (mLevel < sMaxDivLevel);
117
118 if (!mRefine && !mLeaf)
119 {
120 if (mLchild->refine())
121 mRefine = TRUE;
122 else if (mRchild->refine())
123 mRefine = TRUE;
124 }
125
126 setUpToDate();
127 return mRefine;
128
129 //return mGrid->refine(this);
130 //return FALSE;
131}
132
diff --git a/linden/indra/newview/llwaterpatch.h b/linden/indra/newview/llwaterpatch.h
deleted file mode 100644
index f4eddf6..0000000
--- a/linden/indra/newview/llwaterpatch.h
+++ /dev/null
@@ -1,317 +0,0 @@
1/**
2 * @file llwaterpatch.h
3 * @brief LLWaterTri class header file
4 *
5 * Copyright (c) 2001-2007, Linden Research, Inc.
6 *
7 * Second Life Viewer Source Code
8 * The source code in this file ("Source Code") is provided by Linden Lab
9 * to you under the terms of the GNU General Public License, version 2.0
10 * ("GPL"), unless you have obtained a separate licensing agreement
11 * ("Other License"), formally executed by you and Linden Lab. Terms of
12 * the GPL can be found in doc/GPL-license.txt in this distribution, or
13 * online at http://secondlife.com/developers/opensource/gplv2
14 *
15 * There are special exceptions to the terms and conditions of the GPL as
16 * it is applied to this Source Code. View the full text of the exception
17 * in the file doc/FLOSS-exception.txt in this software distribution, or
18 * online at http://secondlife.com/developers/opensource/flossexception
19 *
20 * By copying, modifying or distributing this software, you acknowledge
21 * that you have read and understood your obligations described above,
22 * and agree to abide by those obligations.
23 *
24 * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
25 * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
26 * COMPLETENESS OR PERFORMANCE.
27 */
28
29#ifndef LL_WATER_PATCH_H
30#define LL_WATER_PATCH_H
31
32#include "llmath.h"
33#include "v3math.h"
34#include "llroam.h"
35
36const U8 MAX_LEVEL = 10;
37
38class LL2Coord
39{
40protected:
41 S32 mX;
42 S32 mY;
43public:
44 LL2Coord() {}
45 //LL2Coord() : mX(0), mY(0) {}
46 LL2Coord (S32 i, S32 j) : mX(i), mY(j) {}
47 LL2Coord operator+ (const LL2Coord& c) const
48 {
49 return LL2Coord(mX + c.mX, mY + c.mY);
50 }
51 LL2Coord operator* (F32 c) const
52 {
53 return LL2Coord(llround(mX * c), llround(mY * c));
54 }
55 S32 x() const { return mX; }
56 S32 y() const { return mY; }
57
58 S32& x() { return mX; }
59 S32& y() { return mY; }
60
61 LL2Coord middle(const LL2Coord& c2) const
62 {
63 return LL2Coord((x() + c2.x()) >> 1, (y() + c2.y()) >> 1);
64 }
65
66 S32 distance2(const LL2Coord& c2) const
67 {
68 S32 dx = x() - c2.x();
69 S32 dy = y() - c2.y();
70
71 return dx * dx + dy * dy;
72 }
73
74 F32 distance(const LL2Coord& c2) const
75 {
76 return (F32) sqrt((F32)distance2(c2));
77 }
78};
79
80
81
82
83
84
85class LLWaterGrid;
86
87class LLWaterTri : public LLRoamTriNode
88{
89protected:
90 LL2Coord mLvtx; // Left vertex
91 LL2Coord mRvtx; // Right vertex
92 LL2Coord mTvtx; // Top vertex
93 LL2Coord mMiddle; // Top vertex
94
95 F32 mSize;
96
97 BOOL mCurr;
98 BOOL mRefine;
99
100public:
101 static LL2Coord sCam;
102 static F32 sClipFar;
103 static U32 sMaxDivLevel;
104 static U32 sMinStep;
105
106 static BOOL sCurrRound;
107
108
109public:
110 LLWaterTri (const LL2Coord& l, const LL2Coord& r, const LL2Coord& t):
111 LLRoamTriNode(0, 0, 0), mLvtx(l), mRvtx(r), mTvtx(t), mRefine(FALSE)
112 {
113 mSize = mLvtx.distance(mRvtx) * sMinStep;
114 mCurr = sCurrRound;
115 mMiddle = mLvtx.middle(mRvtx);
116 }
117
118 LLWaterTri (U8 level = 0, S8 type = 0, LLWaterTri* par = 0);
119
120 virtual LLRoamTriNode* newLChild()
121 {
122 return new LLWaterTri(mLevel+1, -1, this);
123 }
124 virtual LLRoamTriNode* newRChild()
125 {
126 return new LLWaterTri(mLevel+1, 1, this);
127 }
128
129 virtual ~LLWaterTri() {}
130
131 const LL2Coord& Lvtx() const { return mLvtx; }
132 const LL2Coord& Rvtx() const { return mRvtx; }
133 const LL2Coord& Tvtx() const { return mTvtx; }
134
135 F32 size() const { return mSize; }
136
137 LL2Coord middleSide() const { return mMiddle; }//middle(mLvtx, mRvtx); }
138
139 void setLvtx(const LL2Coord& c) { mLvtx = c; }
140 void setRvtx(const LL2Coord& c) { mRvtx = c; }
141 void setTvtx(const LL2Coord& c) { mTvtx = c; }
142
143 void updatePassive();
144 BOOL refine();
145 void initForcefulRefine()
146 {
147 setUpToDate();
148 mRefine = TRUE;
149 }
150 void flushFromQueue() { setUpToDate(); }
151
152 BOOL upToDate() const { return mCurr == sCurrRound; }
153 void setUpToDate() { mCurr = sCurrRound; }
154 void setNotUpToDate() { mCurr = !sCurrRound; }
155 static void nextRound() { sCurrRound = !sCurrRound; }
156
157 BOOL checkUpToDate() const
158 {
159 BOOL ok = leaf() ? upToDate() :
160 upToDate() && ((LLWaterTri*)Lchild())->upToDate() && ((LLWaterTri*)Rchild())->upToDate();
161 if (!ok)
162 return ok;
163 else
164 return ok;
165 }
166
167};
168
169
170
171
172class LLWaterPatch : public LLRoamPatch
173{
174protected:
175 LL2Coord mOrig; // Bottom left vertex
176 U32 mSize;
177 U32 mRegionWidth;
178 LLVector3 mCenter;
179 BOOL mVis;
180
181public:
182 LLWaterPatch() :
183 LLRoamPatch(MAX_LEVEL, TRUE), mOrig(0, 0), mSize(32), mRegionWidth(256) {}
184
185 LLWaterPatch(const LL2Coord o, U32 size, U32 width, const LLVector3& center,
186 U8 max_level = MAX_LEVEL, BOOL back_slash = TRUE) :
187 LLRoamPatch(back_slash, max_level), mOrig(o), mSize(size), mRegionWidth(width), mCenter(center)
188 { createTris(); }
189
190 LLWaterPatch(S32 o1, S32 o2, U32 size, U32 width, const LLVector3& center,
191 U8 max_level = MAX_LEVEL, BOOL back_slash = TRUE) :
192 LLRoamPatch(back_slash, max_level), mOrig(o1, o2), mSize(size), mRegionWidth(width), mCenter(center)
193 { createTris(); }
194
195
196 const LL2Coord& orig() const { return mOrig; }
197 void set (S32 o1, S32 o2, U32 size, U32 width, const LLVector3& center,
198 U8 max_level = MAX_LEVEL, BOOL back_slash = TRUE)
199 {
200 deleteTris();
201 mBackSlash = back_slash;
202 mMaxLevel = max_level;
203 mOrig.x() = o1;
204 mOrig.y() = o2;
205 mSize = size;
206 mCenter = center;
207 mRegionWidth = width;
208 mNumTris = 0;
209 createTris();
210 }
211
212 void setMaxLevel (U8 max_level) { mMaxLevel = max_level; }
213
214 void createTris()
215 {
216 if (mBackSlash)
217 {
218 mTri[0] = new LLWaterTri(LL2Coord(mOrig.x() + mSize, mOrig.y()),
219 LL2Coord(mOrig.x(), mOrig.y() + mSize), mOrig);
220 mTri[1] = new LLWaterTri(LL2Coord(mOrig.x(), mOrig.y() + mSize),
221 LL2Coord(mOrig.x() + mSize, mOrig.y()),
222 LL2Coord(mOrig.x() + mSize, mOrig.y() + mSize));
223 } else {
224 mTri[0] = new LLWaterTri(mOrig,
225 LL2Coord(mOrig.x() + mSize, mOrig.y() + mSize),
226 LL2Coord(mOrig.x(), mOrig.y() + mSize));
227 mTri[1] = new LLWaterTri(LL2Coord(mOrig.x() + mSize, mOrig.y() + mSize),
228 mOrig,
229 LL2Coord(mOrig.x() + mSize, mOrig.y()));
230 }
231 setTris();
232 ((LLWaterTri*)mTri[0])->setUpToDate();
233 ((LLWaterTri*)mTri[1])->setUpToDate();
234 }
235 //virtual ~LLWaterPatch() {}
236 void setInvisible() { mVis = FALSE; }
237 void setVisible() { mVis = TRUE; }
238
239 BOOL visible() const { return mVis; }
240
241 BOOL updateTree(const LLVector3 &camera_pos, const LLVector3 &look_at, const LLVector3 &reg_orig)
242 {
243 const static F32 patch_rad = mRegionWidth * F_SQRT2 * 0.5f;
244
245 LLVector3 to_patch = reg_orig + mCenter - camera_pos;
246 F32 to_patch_dist = to_patch.normVec();
247
248 if ( to_patch_dist < patch_rad)
249 {
250 setVisible();
251 update();
252 } else {
253 const F32 sin_min_angle = patch_rad / to_patch_dist;
254 const F32 cos_min_angle = (F32)sqrt(1.f - sin_min_angle * sin_min_angle);
255 const F32 cos_max = OO_SQRT2 * (cos_min_angle - sin_min_angle);
256
257 if (to_patch * look_at > cos_max)
258 {
259 setVisible();
260 update();
261 } else {
262 setInvisible();
263 updatePassive();
264 }
265 }
266
267 return mVis;
268 }
269
270 BOOL updateVisibility(const LLVector3 &camera_pos, const LLVector3 &look_at, const LLVector3 &reg_orig)
271 {
272 const static F32 patch_rad = mRegionWidth * F_SQRT2 * 0.5f;
273 const static U32 reg_width_half = mRegionWidth / 2;
274 //const static F32 patch_rad2 = patch_rad * patch_rad;
275
276 LLVector3 to_patch = reg_orig + mCenter - camera_pos;
277 //const F32 to_patch_dist2D2 = to_patch.mV[VX] * to_patch.mV[VX] + to_patch.mV[VY] * to_patch.mV[VY];
278
279 if (fabs(to_patch.mV[VX]) <= reg_width_half && fabs(to_patch.mV[VY]) <= reg_width_half)
280 //if ( to_patch_dist2D2 < patch_rad2)
281 {
282 setVisible();
283 } else {
284 F32 to_patch_dist = to_patch.normVec();
285 //const F32 to_patch_dist = sqrt(to_patch_dist2D2 + to_patch.mV[VZ] * to_patch.mV[VZ]);
286 const F32 sin_min_angle = patch_rad / to_patch_dist;
287 if (sin_min_angle >= 1)
288 {
289 setVisible();
290 } else {
291 const F32 cos_min_angle = (F32)sqrt(1.f - sin_min_angle * sin_min_angle);
292 const F32 cos_max = OO_SQRT2 * (cos_min_angle - sin_min_angle);
293
294 if (to_patch * look_at > cos_max)
295 {
296 setVisible();
297 } else {
298 setInvisible();
299 }
300 }
301 }
302
303 return mVis;
304 }
305 void checkUpToDate() const
306 {
307 for (U8 h = 0; h < 2; h++)
308 {
309 ((LLWaterTri*)left())->checkUpToDate();
310 ((LLWaterTri*)right())->checkUpToDate();
311 }
312 }
313
314};
315
316
317#endif
diff --git a/linden/indra/newview/macview.xcodeproj/project.pbxproj b/linden/indra/newview/macview.xcodeproj/project.pbxproj
index 02be1d5..059ae5a 100644
--- a/linden/indra/newview/macview.xcodeproj/project.pbxproj
+++ b/linden/indra/newview/macview.xcodeproj/project.pbxproj
@@ -27,6 +27,9 @@
27 1A0201850B7A861200D5C589 /* llblowfishcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A02017E0B7A861200D5C589 /* llblowfishcipher.cpp */; }; 27 1A0201850B7A861200D5C589 /* llblowfishcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A02017E0B7A861200D5C589 /* llblowfishcipher.cpp */; };
28 1A0201860B7A861200D5C589 /* llnullcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0201810B7A861200D5C589 /* llnullcipher.cpp */; }; 28 1A0201860B7A861200D5C589 /* llnullcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0201810B7A861200D5C589 /* llnullcipher.cpp */; };
29 1A0201870B7A861200D5C589 /* llxorcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0201830B7A861200D5C589 /* llxorcipher.cpp */; }; 29 1A0201870B7A861200D5C589 /* llxorcipher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0201830B7A861200D5C589 /* llxorcipher.cpp */; };
30 1A0DA5130C3AC07800361F49 /* llviewerjointmesh_vec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0DA5100C3AC07700361F49 /* llviewerjointmesh_vec.cpp */; };
31 1A0DA5140C3AC07800361F49 /* llviewerjointmesh_sse2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0DA5110C3AC07700361F49 /* llviewerjointmesh_sse2.cpp */; };
32 1A0DA5150C3AC07800361F49 /* llviewerjointmesh_sse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0DA5120C3AC07700361F49 /* llviewerjointmesh_sse.cpp */; };
30 1A1C61620847AEE6005D7227 /* llvolumemgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1C615E0847AEE6005D7227 /* llvolumemgr.cpp */; }; 33 1A1C61620847AEE6005D7227 /* llvolumemgr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1C615E0847AEE6005D7227 /* llvolumemgr.cpp */; };
31 1A1C61630847AEE6005D7227 /* llvolume.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1C615F0847AEE6005D7227 /* llvolume.cpp */; }; 34 1A1C61630847AEE6005D7227 /* llvolume.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1C615F0847AEE6005D7227 /* llvolume.cpp */; };
32 1A1C61760847B307005D7227 /* llvolumemessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1C61740847B307005D7227 /* llvolumemessage.cpp */; }; 35 1A1C61760847B307005D7227 /* llvolumemessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A1C61740847B307005D7227 /* llvolumemessage.cpp */; };
@@ -95,7 +98,6 @@
95 5503BB3C05446B20003D051F /* llwind.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C2051F61DF00A80050 /* llwind.cpp */; }; 98 5503BB3C05446B20003D051F /* llwind.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C2051F61DF00A80050 /* llwind.cpp */; };
96 5503BB3D05446B20003D051F /* llwearablelist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C3051F61DF00A80050 /* llwearablelist.cpp */; }; 99 5503BB3D05446B20003D051F /* llwearablelist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C3051F61DF00A80050 /* llwearablelist.cpp */; };
97 5503BB3E05446B20003D051F /* llwearable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C4051F61DF00A80050 /* llwearable.cpp */; }; 100 5503BB3E05446B20003D051F /* llwearable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C4051F61DF00A80050 /* llwearable.cpp */; };
98 5503BB3F05446B20003D051F /* llwaterpatch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C5051F61DF00A80050 /* llwaterpatch.cpp */; };
99 5503BB4005446B20003D051F /* llvowater.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C6051F61DF00A80050 /* llvowater.cpp */; }; 101 5503BB4005446B20003D051F /* llvowater.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C6051F61DF00A80050 /* llvowater.cpp */; };
100 5503BB4105446B20003D051F /* llvovolume.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C7051F61DF00A80050 /* llvovolume.cpp */; }; 102 5503BB4105446B20003D051F /* llvovolume.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C7051F61DF00A80050 /* llvovolume.cpp */; };
101 5503BB4305446B20003D051F /* llvotree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C9051F61DF00A80050 /* llvotree.cpp */; }; 103 5503BB4305446B20003D051F /* llvotree.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F529C9051F61DF00A80050 /* llvotree.cpp */; };
@@ -158,7 +160,6 @@
158 5503BB9105446B20003D051F /* llfloaterland.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A17051F61DF00A80050 /* llfloaterland.cpp */; }; 160 5503BB9105446B20003D051F /* llfloaterland.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A17051F61DF00A80050 /* llfloaterland.cpp */; };
159 5503BB9205446B20003D051F /* llpanelface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A18051F61DF00A80050 /* llpanelface.cpp */; }; 161 5503BB9205446B20003D051F /* llpanelface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A18051F61DF00A80050 /* llpanelface.cpp */; };
160 5503BB9305446B20003D051F /* llpanelevent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A19051F61DF00A80050 /* llpanelevent.cpp */; }; 162 5503BB9305446B20003D051F /* llpanelevent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A19051F61DF00A80050 /* llpanelevent.cpp */; };
161 5503BB9405446B20003D051F /* llcountdown.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A1A051F61DF00A80050 /* llcountdown.cpp */; };
162 5503BB9505446B20003D051F /* llcontroldef.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A1B051F61DF00A80050 /* llcontroldef.cpp */; }; 163 5503BB9505446B20003D051F /* llcontroldef.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A1B051F61DF00A80050 /* llcontroldef.cpp */; };
163 5503BB9805446B20003D051F /* llframestatview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A1E051F61DF00A80050 /* llframestatview.cpp */; }; 164 5503BB9805446B20003D051F /* llframestatview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A1E051F61DF00A80050 /* llframestatview.cpp */; };
164 5503BB9905446B20003D051F /* llframestats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A1F051F61DF00A80050 /* llframestats.cpp */; }; 165 5503BB9905446B20003D051F /* llframestats.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A1F051F61DF00A80050 /* llframestats.cpp */; };
@@ -166,7 +167,6 @@
166 5503BB9E05446B20003D051F /* llhudobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A24051F61DF00A80050 /* llhudobject.cpp */; }; 167 5503BB9E05446B20003D051F /* llhudobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A24051F61DF00A80050 /* llhudobject.cpp */; };
167 5503BB9F05446B20003D051F /* llhudmanager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A25051F61DF00A80050 /* llhudmanager.cpp */; }; 168 5503BB9F05446B20003D051F /* llhudmanager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A25051F61DF00A80050 /* llhudmanager.cpp */; };
168 5503BBA005446B20003D051F /* lldrawpoolalpha.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A26051F61DF00A80050 /* lldrawpoolalpha.cpp */; }; 169 5503BBA005446B20003D051F /* lldrawpoolalpha.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A26051F61DF00A80050 /* lldrawpoolalpha.cpp */; };
169 5503BBA105446B20003D051F /* lltexturetable.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A27051F61DF00A80050 /* lltexturetable.cpp */; };
170 5503BBA205446B20003D051F /* lltexturectrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A28051F61DF00A80050 /* lltexturectrl.cpp */; }; 170 5503BBA205446B20003D051F /* lltexturectrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A28051F61DF00A80050 /* lltexturectrl.cpp */; };
171 5503BBA405446B20003D051F /* llpanelobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A2A051F61DF00A80050 /* llpanelobject.cpp */; }; 171 5503BBA405446B20003D051F /* llpanelobject.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A2A051F61DF00A80050 /* llpanelobject.cpp */; };
172 5503BBA505446B20003D051F /* llpanelnetwork.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A2B051F61DF00A80050 /* llpanelnetwork.cpp */; }; 172 5503BBA505446B20003D051F /* llpanelnetwork.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52A2B051F61DF00A80050 /* llpanelnetwork.cpp */; };
@@ -260,7 +260,6 @@
260 5503BC2105446B20003D051F /* llcolorscheme.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AA9051F61DF00A80050 /* llcolorscheme.cpp */; }; 260 5503BC2105446B20003D051F /* llcolorscheme.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AA9051F61DF00A80050 /* llcolorscheme.cpp */; };
261 5503BC2205446B20003D051F /* llmutelist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AAA051F61DF00A80050 /* llmutelist.cpp */; }; 261 5503BC2205446B20003D051F /* llmutelist.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AAA051F61DF00A80050 /* llmutelist.cpp */; };
262 5503BC2305446B20003D051F /* llmoveview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AAB051F61DF00A80050 /* llmoveview.cpp */; }; 262 5503BC2305446B20003D051F /* llmoveview.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AAB051F61DF00A80050 /* llmoveview.cpp */; };
263 5503BC2405446B20003D051F /* llfft.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AAC051F61DF00A80050 /* llfft.cpp */; };
264 5503BC2505446B20003D051F /* llfloatermap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AAD051F61DF00A80050 /* llfloatermap.cpp */; }; 263 5503BC2505446B20003D051F /* llfloatermap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AAD051F61DF00A80050 /* llfloatermap.cpp */; };
265 5503BC2705446B20003D051F /* llregionposition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AAF051F61DF00A80050 /* llregionposition.cpp */; }; 264 5503BC2705446B20003D051F /* llregionposition.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AAF051F61DF00A80050 /* llregionposition.cpp */; };
266 5503BC2905446B20003D051F /* llasynchostbyname.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AB2051F61DF00A80050 /* llasynchostbyname.cpp */; }; 265 5503BC2905446B20003D051F /* llasynchostbyname.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 26F52AB2051F61DF00A80050 /* llasynchostbyname.cpp */; };
@@ -822,6 +821,9 @@
822 1A0201820B7A861200D5C589 /* llnullcipher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llnullcipher.h; sourceTree = "<group>"; }; 821 1A0201820B7A861200D5C589 /* llnullcipher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llnullcipher.h; sourceTree = "<group>"; };
823 1A0201830B7A861200D5C589 /* llxorcipher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llxorcipher.cpp; sourceTree = "<group>"; }; 822 1A0201830B7A861200D5C589 /* llxorcipher.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llxorcipher.cpp; sourceTree = "<group>"; };
824 1A0201840B7A861200D5C589 /* llxorcipher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llxorcipher.h; sourceTree = "<group>"; }; 823 1A0201840B7A861200D5C589 /* llxorcipher.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llxorcipher.h; sourceTree = "<group>"; };
824 1A0DA5100C3AC07700361F49 /* llviewerjointmesh_vec.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewerjointmesh_vec.cpp; sourceTree = "<group>"; };
825 1A0DA5110C3AC07700361F49 /* llviewerjointmesh_sse2.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewerjointmesh_sse2.cpp; sourceTree = "<group>"; };
826 1A0DA5120C3AC07700361F49 /* llviewerjointmesh_sse.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llviewerjointmesh_sse.cpp; sourceTree = "<group>"; };
825 1A1C615E0847AEE6005D7227 /* llvolumemgr.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvolumemgr.cpp; sourceTree = "<group>"; }; 827 1A1C615E0847AEE6005D7227 /* llvolumemgr.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvolumemgr.cpp; sourceTree = "<group>"; };
826 1A1C615F0847AEE6005D7227 /* llvolume.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvolume.cpp; sourceTree = "<group>"; }; 828 1A1C615F0847AEE6005D7227 /* llvolume.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvolume.cpp; sourceTree = "<group>"; };
827 1A1C61600847AEE6005D7227 /* llvolumemgr.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llvolumemgr.h; sourceTree = "<group>"; }; 829 1A1C61600847AEE6005D7227 /* llvolumemgr.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llvolumemgr.h; sourceTree = "<group>"; };
@@ -925,7 +927,6 @@
925 26F529C2051F61DF00A80050 /* llwind.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llwind.cpp; sourceTree = SOURCE_ROOT; }; 927 26F529C2051F61DF00A80050 /* llwind.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llwind.cpp; sourceTree = SOURCE_ROOT; };
926 26F529C3051F61DF00A80050 /* llwearablelist.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llwearablelist.cpp; sourceTree = SOURCE_ROOT; }; 928 26F529C3051F61DF00A80050 /* llwearablelist.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llwearablelist.cpp; sourceTree = SOURCE_ROOT; };
927 26F529C4051F61DF00A80050 /* llwearable.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llwearable.cpp; sourceTree = SOURCE_ROOT; }; 929 26F529C4051F61DF00A80050 /* llwearable.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llwearable.cpp; sourceTree = SOURCE_ROOT; };
928 26F529C5051F61DF00A80050 /* llwaterpatch.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llwaterpatch.cpp; sourceTree = SOURCE_ROOT; };
929 26F529C6051F61DF00A80050 /* llvowater.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvowater.cpp; sourceTree = SOURCE_ROOT; }; 930 26F529C6051F61DF00A80050 /* llvowater.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvowater.cpp; sourceTree = SOURCE_ROOT; };
930 26F529C7051F61DF00A80050 /* llvovolume.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvovolume.cpp; sourceTree = SOURCE_ROOT; }; 931 26F529C7051F61DF00A80050 /* llvovolume.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvovolume.cpp; sourceTree = SOURCE_ROOT; };
931 26F529C9051F61DF00A80050 /* llvotree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvotree.cpp; sourceTree = SOURCE_ROOT; }; 932 26F529C9051F61DF00A80050 /* llvotree.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llvotree.cpp; sourceTree = SOURCE_ROOT; };
@@ -989,7 +990,6 @@
989 26F52A17051F61DF00A80050 /* llfloaterland.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterland.cpp; sourceTree = SOURCE_ROOT; }; 990 26F52A17051F61DF00A80050 /* llfloaterland.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloaterland.cpp; sourceTree = SOURCE_ROOT; };
990 26F52A18051F61DF00A80050 /* llpanelface.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelface.cpp; sourceTree = SOURCE_ROOT; }; 991 26F52A18051F61DF00A80050 /* llpanelface.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelface.cpp; sourceTree = SOURCE_ROOT; };
991 26F52A19051F61DF00A80050 /* llpanelevent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelevent.cpp; sourceTree = SOURCE_ROOT; }; 992 26F52A19051F61DF00A80050 /* llpanelevent.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelevent.cpp; sourceTree = SOURCE_ROOT; };
992 26F52A1A051F61DF00A80050 /* llcountdown.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llcountdown.cpp; sourceTree = SOURCE_ROOT; };
993 26F52A1B051F61DF00A80050 /* llcontroldef.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llcontroldef.cpp; sourceTree = SOURCE_ROOT; }; 993 26F52A1B051F61DF00A80050 /* llcontroldef.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llcontroldef.cpp; sourceTree = SOURCE_ROOT; };
994 26F52A1E051F61DF00A80050 /* llframestatview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llframestatview.cpp; sourceTree = SOURCE_ROOT; }; 994 26F52A1E051F61DF00A80050 /* llframestatview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llframestatview.cpp; sourceTree = SOURCE_ROOT; };
995 26F52A1F051F61DF00A80050 /* llframestats.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llframestats.cpp; sourceTree = SOURCE_ROOT; }; 995 26F52A1F051F61DF00A80050 /* llframestats.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llframestats.cpp; sourceTree = SOURCE_ROOT; };
@@ -997,7 +997,6 @@
997 26F52A24051F61DF00A80050 /* llhudobject.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llhudobject.cpp; sourceTree = SOURCE_ROOT; }; 997 26F52A24051F61DF00A80050 /* llhudobject.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llhudobject.cpp; sourceTree = SOURCE_ROOT; };
998 26F52A25051F61DF00A80050 /* llhudmanager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llhudmanager.cpp; sourceTree = SOURCE_ROOT; }; 998 26F52A25051F61DF00A80050 /* llhudmanager.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llhudmanager.cpp; sourceTree = SOURCE_ROOT; };
999 26F52A26051F61DF00A80050 /* lldrawpoolalpha.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lldrawpoolalpha.cpp; sourceTree = SOURCE_ROOT; }; 999 26F52A26051F61DF00A80050 /* lldrawpoolalpha.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lldrawpoolalpha.cpp; sourceTree = SOURCE_ROOT; };
1000 26F52A27051F61DF00A80050 /* lltexturetable.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lltexturetable.cpp; sourceTree = SOURCE_ROOT; };
1001 26F52A28051F61DF00A80050 /* lltexturectrl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lltexturectrl.cpp; sourceTree = SOURCE_ROOT; }; 1000 26F52A28051F61DF00A80050 /* lltexturectrl.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = lltexturectrl.cpp; sourceTree = SOURCE_ROOT; };
1002 26F52A2A051F61DF00A80050 /* llpanelobject.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelobject.cpp; sourceTree = SOURCE_ROOT; }; 1001 26F52A2A051F61DF00A80050 /* llpanelobject.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelobject.cpp; sourceTree = SOURCE_ROOT; };
1003 26F52A2B051F61DF00A80050 /* llpanelnetwork.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelnetwork.cpp; sourceTree = SOURCE_ROOT; }; 1002 26F52A2B051F61DF00A80050 /* llpanelnetwork.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llpanelnetwork.cpp; sourceTree = SOURCE_ROOT; };
@@ -1093,7 +1092,6 @@
1093 26F52AA9051F61DF00A80050 /* llcolorscheme.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llcolorscheme.cpp; sourceTree = SOURCE_ROOT; }; 1092 26F52AA9051F61DF00A80050 /* llcolorscheme.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llcolorscheme.cpp; sourceTree = SOURCE_ROOT; };
1094 26F52AAA051F61DF00A80050 /* llmutelist.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmutelist.cpp; sourceTree = SOURCE_ROOT; }; 1093 26F52AAA051F61DF00A80050 /* llmutelist.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmutelist.cpp; sourceTree = SOURCE_ROOT; };
1095 26F52AAB051F61DF00A80050 /* llmoveview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmoveview.cpp; sourceTree = SOURCE_ROOT; }; 1094 26F52AAB051F61DF00A80050 /* llmoveview.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llmoveview.cpp; sourceTree = SOURCE_ROOT; };
1096 26F52AAC051F61DF00A80050 /* llfft.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfft.cpp; sourceTree = SOURCE_ROOT; };
1097 26F52AAD051F61DF00A80050 /* llfloatermap.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloatermap.cpp; sourceTree = SOURCE_ROOT; }; 1095 26F52AAD051F61DF00A80050 /* llfloatermap.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llfloatermap.cpp; sourceTree = SOURCE_ROOT; };
1098 26F52AAF051F61DF00A80050 /* llregionposition.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llregionposition.cpp; sourceTree = SOURCE_ROOT; }; 1096 26F52AAF051F61DF00A80050 /* llregionposition.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llregionposition.cpp; sourceTree = SOURCE_ROOT; };
1099 26F52AB2051F61DF00A80050 /* llasynchostbyname.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llasynchostbyname.cpp; sourceTree = SOURCE_ROOT; }; 1097 26F52AB2051F61DF00A80050 /* llasynchostbyname.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = llasynchostbyname.cpp; sourceTree = SOURCE_ROOT; };
@@ -1634,7 +1632,6 @@
1634 997B4BE206015821001B0407 /* llwind.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llwind.h; sourceTree = SOURCE_ROOT; }; 1632 997B4BE206015821001B0407 /* llwind.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llwind.h; sourceTree = SOURCE_ROOT; };
1635 997B4BE306015821001B0407 /* llwearablelist.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llwearablelist.h; sourceTree = SOURCE_ROOT; }; 1633 997B4BE306015821001B0407 /* llwearablelist.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llwearablelist.h; sourceTree = SOURCE_ROOT; };
1636 997B4BE406015821001B0407 /* llwearable.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llwearable.h; sourceTree = SOURCE_ROOT; }; 1634 997B4BE406015821001B0407 /* llwearable.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llwearable.h; sourceTree = SOURCE_ROOT; };
1637 997B4BE506015821001B0407 /* llwaterpatch.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llwaterpatch.h; sourceTree = SOURCE_ROOT; };
1638 997B4BE606015821001B0407 /* llvowater.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llvowater.h; sourceTree = SOURCE_ROOT; }; 1635 997B4BE606015821001B0407 /* llvowater.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llvowater.h; sourceTree = SOURCE_ROOT; };
1639 997B4BE706015821001B0407 /* llvovolume.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llvovolume.h; sourceTree = SOURCE_ROOT; }; 1636 997B4BE706015821001B0407 /* llvovolume.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llvovolume.h; sourceTree = SOURCE_ROOT; };
1640 997B4BE806015821001B0407 /* llvotreenew.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llvotreenew.h; sourceTree = SOURCE_ROOT; }; 1637 997B4BE806015821001B0407 /* llvotreenew.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llvotreenew.h; sourceTree = SOURCE_ROOT; };
@@ -1701,7 +1698,6 @@
1701 997B4C3206015821001B0407 /* lltoolbar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltoolbar.h; sourceTree = SOURCE_ROOT; }; 1698 997B4C3206015821001B0407 /* lltoolbar.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltoolbar.h; sourceTree = SOURCE_ROOT; };
1702 997B4C3306015821001B0407 /* lltool.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltool.h; sourceTree = SOURCE_ROOT; }; 1699 997B4C3306015821001B0407 /* lltool.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltool.h; sourceTree = SOURCE_ROOT; };
1703 997B4C3406015821001B0407 /* lltextureview.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltextureview.h; sourceTree = SOURCE_ROOT; }; 1700 997B4C3406015821001B0407 /* lltextureview.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltextureview.h; sourceTree = SOURCE_ROOT; };
1704 997B4C3506015821001B0407 /* lltexturetable.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltexturetable.h; sourceTree = SOURCE_ROOT; };
1705 997B4C3606015821001B0407 /* lltexturectrl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltexturectrl.h; sourceTree = SOURCE_ROOT; }; 1701 997B4C3606015821001B0407 /* lltexturectrl.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltexturectrl.h; sourceTree = SOURCE_ROOT; };
1706 997B4C3B06015821001B0407 /* lltexlayer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltexlayer.h; sourceTree = SOURCE_ROOT; }; 1702 997B4C3B06015821001B0407 /* lltexlayer.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltexlayer.h; sourceTree = SOURCE_ROOT; };
1707 997B4C3D06015821001B0407 /* lltable.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltable.h; sourceTree = SOURCE_ROOT; }; 1703 997B4C3D06015821001B0407 /* lltable.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lltable.h; sourceTree = SOURCE_ROOT; };
@@ -1826,7 +1822,6 @@
1826 997B4CE506015822001B0407 /* llfloaterabout.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterabout.h; sourceTree = SOURCE_ROOT; }; 1822 997B4CE506015822001B0407 /* llfloaterabout.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfloaterabout.h; sourceTree = SOURCE_ROOT; };
1827 997B4CE706015822001B0407 /* llfirstuse.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfirstuse.h; sourceTree = SOURCE_ROOT; }; 1823 997B4CE706015822001B0407 /* llfirstuse.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfirstuse.h; sourceTree = SOURCE_ROOT; };
1828 997B4CE906015822001B0407 /* llfilepicker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfilepicker.h; sourceTree = SOURCE_ROOT; }; 1824 997B4CE906015822001B0407 /* llfilepicker.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfilepicker.h; sourceTree = SOURCE_ROOT; };
1829 997B4CEA06015822001B0407 /* llfft.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfft.h; sourceTree = SOURCE_ROOT; };
1830 997B4CEB06015822001B0407 /* llfeaturemanager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfeaturemanager.h; sourceTree = SOURCE_ROOT; }; 1825 997B4CEB06015822001B0407 /* llfeaturemanager.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llfeaturemanager.h; sourceTree = SOURCE_ROOT; };
1831 997B4CEC06015822001B0407 /* llface.inl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = llface.inl; sourceTree = SOURCE_ROOT; }; 1826 997B4CEC06015822001B0407 /* llface.inl */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text; path = llface.inl; sourceTree = SOURCE_ROOT; };
1832 997B4CEE06015822001B0407 /* llcylinder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcylinder.h; sourceTree = SOURCE_ROOT; }; 1827 997B4CEE06015822001B0407 /* llcylinder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcylinder.h; sourceTree = SOURCE_ROOT; };
@@ -1848,7 +1843,6 @@
1848 997B4D0006015823001B0407 /* lldrawpool.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lldrawpool.h; sourceTree = SOURCE_ROOT; }; 1843 997B4D0006015823001B0407 /* lldrawpool.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lldrawpool.h; sourceTree = SOURCE_ROOT; };
1849 997B4D0106015823001B0407 /* lldrawable.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lldrawable.h; sourceTree = SOURCE_ROOT; }; 1844 997B4D0106015823001B0407 /* lldrawable.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lldrawable.h; sourceTree = SOURCE_ROOT; };
1850 997B4D0306015823001B0407 /* lldebugview.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lldebugview.h; sourceTree = SOURCE_ROOT; }; 1845 997B4D0306015823001B0407 /* lldebugview.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = lldebugview.h; sourceTree = SOURCE_ROOT; };
1851 997B4D0406015823001B0407 /* llcountdown.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcountdown.h; sourceTree = SOURCE_ROOT; };
1852 997B4D0506015823001B0407 /* llconversation.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llconversation.h; sourceTree = SOURCE_ROOT; }; 1846 997B4D0506015823001B0407 /* llconversation.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llconversation.h; sourceTree = SOURCE_ROOT; };
1853 997B4D0606015823001B0407 /* llcontainerview.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcontainerview.h; sourceTree = SOURCE_ROOT; }; 1847 997B4D0606015823001B0407 /* llcontainerview.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llcontainerview.h; sourceTree = SOURCE_ROOT; };
1854 997B4D0706015823001B0407 /* llconsole.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llconsole.h; sourceTree = SOURCE_ROOT; }; 1848 997B4D0706015823001B0407 /* llconsole.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = llconsole.h; sourceTree = SOURCE_ROOT; };
@@ -2352,6 +2346,9 @@
2352 26F529A0051F61CD00A80050 /* newview */ = { 2346 26F529A0051F61CD00A80050 /* newview */ = {
2353 isa = PBXGroup; 2347 isa = PBXGroup;
2354 children = ( 2348 children = (
2349 1A0DA5100C3AC07700361F49 /* llviewerjointmesh_vec.cpp */,
2350 1A0DA5110C3AC07700361F49 /* llviewerjointmesh_sse2.cpp */,
2351 1A0DA5120C3AC07700361F49 /* llviewerjointmesh_sse.cpp */,
2355 26F52A9D051F61DF00A80050 /* head.cpp */, 2352 26F52A9D051F61DF00A80050 /* head.cpp */,
2356 26F52A41051F61DF00A80050 /* llagent.cpp */, 2353 26F52A41051F61DF00A80050 /* llagent.cpp */,
2357 1A758C910A436FCA00589675 /* llagentdata.cpp */, 2354 1A758C910A436FCA00589675 /* llagentdata.cpp */,
@@ -2379,7 +2376,6 @@
2379 26F52A03051F61DF00A80050 /* llconsole.cpp */, 2376 26F52A03051F61DF00A80050 /* llconsole.cpp */,
2380 26F52A78051F61DF00A80050 /* llcontainerview.cpp */, 2377 26F52A78051F61DF00A80050 /* llcontainerview.cpp */,
2381 26F52A1B051F61DF00A80050 /* llcontroldef.cpp */, 2378 26F52A1B051F61DF00A80050 /* llcontroldef.cpp */,
2382 26F52A1A051F61DF00A80050 /* llcountdown.cpp */,
2383 26F52ACB051F61DF00A80050 /* llcubemap.cpp */, 2379 26F52ACB051F61DF00A80050 /* llcubemap.cpp */,
2384 99BB5170099AC1FC004BF9F2 /* llcurrencyuimanager.cpp */, 2380 99BB5170099AC1FC004BF9F2 /* llcurrencyuimanager.cpp */,
2385 99BB5171099AC1FC004BF9F2 /* llcurrencyuimanager.h */, 2381 99BB5171099AC1FC004BF9F2 /* llcurrencyuimanager.h */,
@@ -2412,7 +2408,6 @@
2412 26F52A3A051F61DF00A80050 /* llface.cpp */, 2408 26F52A3A051F61DF00A80050 /* llface.cpp */,
2413 912541AD0691FF79008C66F7 /* llfasttimerview.cpp */, 2409 912541AD0691FF79008C66F7 /* llfasttimerview.cpp */,
2414 263E02FE05239C9A00A80050 /* llfeaturemanager.cpp */, 2410 263E02FE05239C9A00A80050 /* llfeaturemanager.cpp */,
2415 26F52AAC051F61DF00A80050 /* llfft.cpp */,
2416 26F52AD3051F61DF00A80050 /* llfilepicker.cpp */, 2411 26F52AD3051F61DF00A80050 /* llfilepicker.cpp */,
2417 8B2ECFA00534C21A00A80059 /* llfirstuse.cpp */, 2412 8B2ECFA00534C21A00A80059 /* llfirstuse.cpp */,
2418 8B2ECF9E0534C17A00A80059 /* llfirstuse.h */, 2413 8B2ECF9E0534C17A00A80059 /* llfirstuse.h */,
@@ -2628,7 +2623,6 @@
2628 26F52A28051F61DF00A80050 /* lltexturectrl.cpp */, 2623 26F52A28051F61DF00A80050 /* lltexturectrl.cpp */,
2629 AA02B9BA0B0CE44D00F2996D /* lltexturefetch.cpp */, 2624 AA02B9BA0B0CE44D00F2996D /* lltexturefetch.cpp */,
2630 AA02B9BB0B0CE44D00F2996D /* lltexturefetch.h */, 2625 AA02B9BB0B0CE44D00F2996D /* lltexturefetch.h */,
2631 26F52A27051F61DF00A80050 /* lltexturetable.cpp */,
2632 26F529F6051F61DF00A80050 /* lltextureview.cpp */, 2626 26F529F6051F61DF00A80050 /* lltextureview.cpp */,
2633 26F529F5051F61DF00A80050 /* lltool.cpp */, 2627 26F529F5051F61DF00A80050 /* lltool.cpp */,
2634 26F529F4051F61DF00A80050 /* lltoolbar.cpp */, 2628 26F529F4051F61DF00A80050 /* lltoolbar.cpp */,
@@ -2724,7 +2718,6 @@
2724 26F529C9051F61DF00A80050 /* llvotree.cpp */, 2718 26F529C9051F61DF00A80050 /* llvotree.cpp */,
2725 26F529C7051F61DF00A80050 /* llvovolume.cpp */, 2719 26F529C7051F61DF00A80050 /* llvovolume.cpp */,
2726 26F529C6051F61DF00A80050 /* llvowater.cpp */, 2720 26F529C6051F61DF00A80050 /* llvowater.cpp */,
2727 26F529C5051F61DF00A80050 /* llwaterpatch.cpp */,
2728 26F529C4051F61DF00A80050 /* llwearable.cpp */, 2721 26F529C4051F61DF00A80050 /* llwearable.cpp */,
2729 26F529C3051F61DF00A80050 /* llwearablelist.cpp */, 2722 26F529C3051F61DF00A80050 /* llwearablelist.cpp */,
2730 1AF7C1E30AF6C44800C4BF4A /* llweb.cpp */, 2723 1AF7C1E30AF6C44800C4BF4A /* llweb.cpp */,
@@ -3155,48 +3148,38 @@
3155 6192225C074A9B5A005E1F34 /* llui */ = { 3148 6192225C074A9B5A005E1F34 /* llui */ = {
3156 isa = PBXGroup; 3149 isa = PBXGroup;
3157 children = ( 3150 children = (
3158 A29852A10BC6BC630005FA09 /* llhtmlhelp.h */,
3159 1A1F130A0B3919F100845A6C /* lleditmenuhandler.h */,
3160 1A1F130B0B3919F100845A6C /* lleditmenuhandler.cpp */,
3161 1AEF0A590B2DFE71003F107C /* llrootview.h */,
3162 1AEF0A5A0B2DFE72003F107C /* llrootview.cpp */,
3163 1AEF0A560B2DFE67003F107C /* llctrlselectioninterface.cpp */,
3164 1AEF0A570B2DFE67003F107C /* llctrlselectioninterface.h */,
3165 299F95BE0ADDE5D000C94EEF /* llviewquery.cpp */,
3166 299F95BF0ADDE5D000C94EEF /* llviewquery.h */,
3167 AAEAAF250A8104D8005F0707 /* llscrollingpanellist.cpp */,
3168 AAEAAF260A8104D8005F0707 /* llscrollingpanellist.h */,
3169 AAA133690A3F94D000419F7C /* lluistring.cpp */,
3170 AAA1336A0A3F94D000419F7C /* lluistring.h */,
3171 1A8BF3770A1AAB7B005B9D5A /* llcallbackmap.h */,
3172 93AE41C908F483E300141675 /* llalertdialog.h */,
3173 93AE41CA08F483E300141675 /* llmodaldialog.h */,
3174 93AE41C508F483C800141675 /* llalertdialog.cpp */, 3151 93AE41C508F483C800141675 /* llalertdialog.cpp */,
3175 93AE41C608F483C900141675 /* llmodaldialog.cpp */, 3152 93AE41C908F483E300141675 /* llalertdialog.h */,
3176 EB9E8314082AEEF2007B4479 /* llmenugl.cpp */,
3177 EB9E8315082AEEF2007B4479 /* llmenugl.h */,
3178 EB9E8316082AEEF2007B4479 /* llresmgr.cpp */,
3179 EB9E8317082AEEF2007B4479 /* llresmgr.h */,
3180 EB3EE68E083ABB5D002BF676 /* llbutton.cpp */, 3153 EB3EE68E083ABB5D002BF676 /* llbutton.cpp */,
3181 EB3EE68F083ABB5D002BF676 /* llbutton.h */, 3154 EB3EE68F083ABB5D002BF676 /* llbutton.h */,
3155 1A8BF3770A1AAB7B005B9D5A /* llcallbackmap.h */,
3182 EB3EE690083ABB5D002BF676 /* llcheckboxctrl.cpp */, 3156 EB3EE690083ABB5D002BF676 /* llcheckboxctrl.cpp */,
3183 EB3EE691083ABB5D002BF676 /* llcheckboxctrl.h */, 3157 EB3EE691083ABB5D002BF676 /* llcheckboxctrl.h */,
3184 EB3EE692083ABB5D002BF676 /* llclipboard.cpp */, 3158 EB3EE692083ABB5D002BF676 /* llclipboard.cpp */,
3185 EB3EE693083ABB5D002BF676 /* llclipboard.h */, 3159 EB3EE693083ABB5D002BF676 /* llclipboard.h */,
3186 EB3EE694083ABB5D002BF676 /* llcombobox.cpp */, 3160 EB3EE694083ABB5D002BF676 /* llcombobox.cpp */,
3187 EB3EE695083ABB5D002BF676 /* llcombobox.h */, 3161 EB3EE695083ABB5D002BF676 /* llcombobox.h */,
3162 1AEF0A560B2DFE67003F107C /* llctrlselectioninterface.cpp */,
3163 1AEF0A570B2DFE67003F107C /* llctrlselectioninterface.h */,
3188 EB3EE696083ABB5D002BF676 /* lldraghandle.cpp */, 3164 EB3EE696083ABB5D002BF676 /* lldraghandle.cpp */,
3189 EB3EE697083ABB5D002BF676 /* lldraghandle.h */, 3165 EB3EE697083ABB5D002BF676 /* lldraghandle.h */,
3166 1A1F130B0B3919F100845A6C /* lleditmenuhandler.cpp */,
3167 1A1F130A0B3919F100845A6C /* lleditmenuhandler.h */,
3190 EB3EE698083ABB5D002BF676 /* llfloater.cpp */, 3168 EB3EE698083ABB5D002BF676 /* llfloater.cpp */,
3191 EB3EE699083ABB5D002BF676 /* llfloater.h */, 3169 EB3EE699083ABB5D002BF676 /* llfloater.h */,
3192 EB3EE69A083ABB5D002BF676 /* llfocusmgr.cpp */, 3170 EB3EE69A083ABB5D002BF676 /* llfocusmgr.cpp */,
3193 EB3EE69B083ABB5D002BF676 /* llfocusmgr.h */, 3171 EB3EE69B083ABB5D002BF676 /* llfocusmgr.h */,
3172 A29852A10BC6BC630005FA09 /* llhtmlhelp.h */,
3194 EB3EE69C083ABB5D002BF676 /* lliconctrl.cpp */, 3173 EB3EE69C083ABB5D002BF676 /* lliconctrl.cpp */,
3195 EB3EE69D083ABB5D002BF676 /* lliconctrl.h */, 3174 EB3EE69D083ABB5D002BF676 /* lliconctrl.h */,
3196 EB3EE69E083ABB5D002BF676 /* llkeywords.cpp */, 3175 EB3EE69E083ABB5D002BF676 /* llkeywords.cpp */,
3197 EB3EE69F083ABB5D002BF676 /* llkeywords.h */, 3176 EB3EE69F083ABB5D002BF676 /* llkeywords.h */,
3198 EB3EE6A0083ABB5D002BF676 /* lllineeditor.cpp */, 3177 EB3EE6A0083ABB5D002BF676 /* lllineeditor.cpp */,
3199 EB3EE6A1083ABB5D002BF676 /* lllineeditor.h */, 3178 EB3EE6A1083ABB5D002BF676 /* lllineeditor.h */,
3179 EB9E8314082AEEF2007B4479 /* llmenugl.cpp */,
3180 EB9E8315082AEEF2007B4479 /* llmenugl.h */,
3181 93AE41C608F483C900141675 /* llmodaldialog.cpp */,
3182 93AE41CA08F483E300141675 /* llmodaldialog.h */,
3200 EB3EE6A2083ABB5D002BF676 /* llpanel.cpp */, 3183 EB3EE6A2083ABB5D002BF676 /* llpanel.cpp */,
3201 EB3EE6A3083ABB5D002BF676 /* llpanel.h */, 3184 EB3EE6A3083ABB5D002BF676 /* llpanel.h */,
3202 EB3EE6A4083ABB5D002BF676 /* llradiogroup.cpp */, 3185 EB3EE6A4083ABB5D002BF676 /* llradiogroup.cpp */,
@@ -3205,10 +3188,16 @@
3205 EB3EE6A7083ABB5D002BF676 /* llresizebar.h */, 3188 EB3EE6A7083ABB5D002BF676 /* llresizebar.h */,
3206 EB3EE6A8083ABB5D002BF676 /* llresizehandle.cpp */, 3189 EB3EE6A8083ABB5D002BF676 /* llresizehandle.cpp */,
3207 EB3EE6A9083ABB5D002BF676 /* llresizehandle.h */, 3190 EB3EE6A9083ABB5D002BF676 /* llresizehandle.h */,
3191 EB9E8316082AEEF2007B4479 /* llresmgr.cpp */,
3192 EB9E8317082AEEF2007B4479 /* llresmgr.h */,
3193 1AEF0A5A0B2DFE72003F107C /* llrootview.cpp */,
3194 1AEF0A590B2DFE71003F107C /* llrootview.h */,
3208 EB3EE6AA083ABB5D002BF676 /* llscrollbar.cpp */, 3195 EB3EE6AA083ABB5D002BF676 /* llscrollbar.cpp */,
3209 EB3EE6AB083ABB5D002BF676 /* llscrollbar.h */, 3196 EB3EE6AB083ABB5D002BF676 /* llscrollbar.h */,
3210 EB3EE6AC083ABB5D002BF676 /* llscrollcontainer.cpp */, 3197 EB3EE6AC083ABB5D002BF676 /* llscrollcontainer.cpp */,
3211 EB3EE6AD083ABB5D002BF676 /* llscrollcontainer.h */, 3198 EB3EE6AD083ABB5D002BF676 /* llscrollcontainer.h */,
3199 AAEAAF250A8104D8005F0707 /* llscrollingpanellist.cpp */,
3200 AAEAAF260A8104D8005F0707 /* llscrollingpanellist.h */,
3212 EB3EE6AE083ABB5D002BF676 /* llscrolllistctrl.cpp */, 3201 EB3EE6AE083ABB5D002BF676 /* llscrolllistctrl.cpp */,
3213 EB3EE6AF083ABB5D002BF676 /* llscrolllistctrl.h */, 3202 EB3EE6AF083ABB5D002BF676 /* llscrolllistctrl.h */,
3214 EB3EE6B0083ABB5D002BF676 /* llslider.cpp */, 3203 EB3EE6B0083ABB5D002BF676 /* llslider.cpp */,
@@ -3227,19 +3216,23 @@
3227 EB3EE6BD083ABB5D002BF676 /* lltextbox.h */, 3216 EB3EE6BD083ABB5D002BF676 /* lltextbox.h */,
3228 EB3EE6C0083ABB5D002BF676 /* lltexteditor.cpp */, 3217 EB3EE6C0083ABB5D002BF676 /* lltexteditor.cpp */,
3229 EB3EE6C1083ABB5D002BF676 /* lltexteditor.h */, 3218 EB3EE6C1083ABB5D002BF676 /* lltexteditor.h */,
3230 EB3EE6C2083ABB5D002BF676 /* lluictrlfactory.cpp */,
3231 EB3EE6C3083ABB5D002BF676 /* lluictrlfactory.h */,
3232 EB3EE6C4083ABB5E002BF676 /* llviewborder.cpp */,
3233 EB3EE6C5083ABB5E002BF676 /* llviewborder.h */,
3234 EB9E8318082AEEF3007B4479 /* llui.cpp */, 3219 EB9E8318082AEEF3007B4479 /* llui.cpp */,
3235 EB9E8319082AEEF3007B4479 /* llui.h */, 3220 EB9E8319082AEEF3007B4479 /* llui.h */,
3236 EB9E831A082AEEF3007B4479 /* lluiconstants.h */, 3221 EB9E831A082AEEF3007B4479 /* lluiconstants.h */,
3237 EB9E831B082AEEF3007B4479 /* lluictrl.cpp */, 3222 EB9E831B082AEEF3007B4479 /* lluictrl.cpp */,
3238 EB9E831C082AEEF3007B4479 /* lluictrl.h */, 3223 EB9E831C082AEEF3007B4479 /* lluictrl.h */,
3239 EB9E831D082AEEF3007B4479 /* llview.cpp */, 3224 EB3EE6C2083ABB5D002BF676 /* lluictrlfactory.cpp */,
3240 EB9E831E082AEEF3007B4479 /* llview.h */, 3225 EB3EE6C3083ABB5D002BF676 /* lluictrlfactory.h */,
3226 AAA133690A3F94D000419F7C /* lluistring.cpp */,
3227 AAA1336A0A3F94D000419F7C /* lluistring.h */,
3241 6192225F074A9B5A005E1F34 /* llundo.cpp */, 3228 6192225F074A9B5A005E1F34 /* llundo.cpp */,
3242 61922260074A9B5A005E1F34 /* llundo.h */, 3229 61922260074A9B5A005E1F34 /* llundo.h */,
3230 EB9E831D082AEEF3007B4479 /* llview.cpp */,
3231 EB9E831E082AEEF3007B4479 /* llview.h */,
3232 EB3EE6C4083ABB5E002BF676 /* llviewborder.cpp */,
3233 EB3EE6C5083ABB5E002BF676 /* llviewborder.h */,
3234 299F95BE0ADDE5D000C94EEF /* llviewquery.cpp */,
3235 299F95BF0ADDE5D000C94EEF /* llviewquery.h */,
3243 ); 3236 );
3244 name = llui; 3237 name = llui;
3245 path = ../llui; 3238 path = ../llui;
@@ -3528,302 +3521,298 @@
3528 997B4BCB060157E5001B0407 /* newview headers */ = { 3521 997B4BCB060157E5001B0407 /* newview headers */ = {
3529 isa = PBXGroup; 3522 isa = PBXGroup;
3530 children = ( 3523 children = (
3524 997B4CF006015822001B0407 /* audiosettings.h */,
3525 997B4D2406015823001B0407 /* head.h */,
3526 997B4D2306015823001B0407 /* llagent.h */,
3527 1A758C990A43700400589675 /* llagentdata.h */,
3528 997B4D2206015823001B0407 /* llagentpilot.h */,
3529 997B4D2106015823001B0407 /* llagparray.h */,
3530 997B4D2006015823001B0407 /* llagparray.inl */,
3531 997B4D1E06015823001B0407 /* llappearance.h */,
3532 997B4D2506015823001B0407 /* llasynchostbyname.h */,
3533 997B4D1C06015823001B0407 /* llaudiostatus.h */,
3534 997B4D1806015823001B0407 /* llbbox.h */,
3535 997B4D1606015823001B0407 /* llbox.h */,
3536 997B4D1306015823001B0407 /* llcallbacklist.h */,
3537 997B4D1206015823001B0407 /* llcallingcard.h */,
3538 997B4D1106015823001B0407 /* llcameraview.h */,
3531 9C1842500B9F94F200208356 /* llcaphttpsender.h */, 3539 9C1842500B9F94F200208356 /* llcaphttpsender.h */,
3532 1A8870E60BCC5AAD00E89AA6 /* llresourcedata.h */, 3540 997B4D1006015823001B0407 /* llchatbar.h */,
3533 A3C20E4E0BB0BD49007E872B /* llviewerjoystick.h */, 3541 997B4D0D06015823001B0407 /* llcloud.h */,
3534 A3C20E4D0BB0BD37007E872B /* llglslshader.h */, 3542 997B4D0C06015823001B0407 /* llcolorscheme.h */,
3535 1AF7C1F20AF6C45000C4BF4A /* llweb.h */, 3543 997B4D0B06015823001B0407 /* llcolorswatch.h */,
3544 997B4D0906015823001B0407 /* llcompass.h */,
3545 997B4D0806015823001B0407 /* llcompilequeue.h */,
3546 997B4D0706015823001B0407 /* llconsole.h */,
3547 997B4D0606015823001B0407 /* llcontainerview.h */,
3548 997B4D0506015823001B0407 /* llconversation.h */,
3549 997B4CEF06015822001B0407 /* llcubemap.h */,
3550 997B4CEE06015822001B0407 /* llcylinder.h */,
3551 997B4D0306015823001B0407 /* lldebugview.h */,
3552 997B4D0106015823001B0407 /* lldrawable.h */,
3553 997B4D0006015823001B0407 /* lldrawpool.h */,
3554 997B4CFF06015823001B0407 /* lldrawpoolalpha.h */,
3555 997B4CFE06015823001B0407 /* lldrawpoolavatar.h */,
3556 997B4CFD06015823001B0407 /* lldrawpoolbump.h */,
3557 997B4CFC06015823001B0407 /* lldrawpoolground.h */,
3558 997B4CFB06015823001B0407 /* lldrawpoolsimple.h */,
3559 997B4CFA06015823001B0407 /* lldrawpoolsky.h */,
3560 997B4CF806015823001B0407 /* lldrawpoolterrain.h */,
3561 997B4CF706015823001B0407 /* lldrawpooltree.h */,
3562 997B4CF606015823001B0407 /* lldrawpooltreenew.h */,
3563 997B4CF506015823001B0407 /* lldrawpoolwater.h */,
3564 997B4CF406015822001B0407 /* lldriverparam.h */,
3565 997B4CF206015822001B0407 /* llemote.h */,
3566 915F492B06B5739800F629BF /* lleventinfo.h */,
3567 915F492306B572FB00F629BF /* lleventnotifier.h */,
3568 997B4CF106015822001B0407 /* llface.h */,
3569 997B4CEC06015822001B0407 /* llface.inl */,
3570 912541B00691FF8D008C66F7 /* llfasttimerview.h */,
3571 997B4CEB06015822001B0407 /* llfeaturemanager.h */,
3572 997B4CE906015822001B0407 /* llfilepicker.h */,
3573 997B4CE706015822001B0407 /* llfirstuse.h */,
3574 997B4CE506015822001B0407 /* llfloaterabout.h */,
3575 997B4CE306015822001B0407 /* llfloaterauction.h */,
3576 997B4CE206015822001B0407 /* llfloateravatarinfo.h */,
3577 1A61A7FA0A5ED44E009FE3D2 /* llfloateravatarpicker.h */,
3536 1AF9CA450AE972D4003EFF2D /* llfloateravatartextures.h */, 3578 1AF9CA450AE972D4003EFF2D /* llfloateravatartextures.h */,
3537 1AD61F6C0AC09B2600507FB9 /* llimview.h */, 3579 997B4CE006015822001B0407 /* llfloaterbuildoptions.h */,
3538 1A5B3B530A70146900A90391 /* llfloaterbump.h */, 3580 1A5B3B530A70146900A90391 /* llfloaterbump.h */,
3539 A3285A350A71419F00F619A5 /* llinventorybridge.h */, 3581 997B4CDF06015822001B0407 /* llfloaterbuy.h */,
3540 A3D968F10A6EBCA7007E8BD2 /* llfloaternewim.h */, 3582 997B4CDE06015822001B0407 /* llfloaterbuycontents.h */,
3541 1A61A7FA0A5ED44E009FE3D2 /* llfloateravatarpicker.h */, 3583 997B4CDC06015822001B0407 /* llfloaterchat.h */,
3542 A3AF6BD00A544F0A005B5E2C /* llpanellogin.h */, 3584 91CB311706FB586300DBCE1E /* llfloaterclothing.h */,
3543 1A758C990A43700400589675 /* llagentdata.h */, 3585 997B4CDB06015822001B0407 /* llfloatercustomize.h */,
3544 1A758C980A436FF400589675 /* llpanellandoptions.h */, 3586 997B4CDA06015822001B0407 /* llfloaterdirectory.h */,
3545 1A758C970A436FF000589675 /* llpanellandobjects.h */, 3587 913AA1FE0798560200D111CE /* llfloaterfriends.h */,
3546 1AFA40B60A2DFD8200C13F70 /* llsavedsettingsglue.h */, 3588 997B4CD906015822001B0407 /* llfloatergesture.h */,
3547 1A8BF3790A1AABAD005B9D5A /* llfloatertest.h */, 3589 997B4CD806015822001B0407 /* llfloatergodtools.h */,
3548 1A3143DD0A02B725005B87E7 /* llprefschat.h */, 3590 997B4CD606015822001B0407 /* llfloatergroupinfo.h */,
3549 1A3143DC0A02B720005B87E7 /* llprefsim.h */,
3550 1A3143DB0A02B70E005B87E7 /* llviewernetwork.h */,
3551 84401E2E0A13CC9A006720A5 /* llfloatergroupinvite.h */, 3591 84401E2E0A13CC9A006720A5 /* llfloatergroupinvite.h */,
3592 997B4CD506015822001B0407 /* llfloatergroupprofile.h */,
3593 997B4CD406015822001B0407 /* llfloatergroups.h */,
3594 997B4CD206015822001B0407 /* llfloaterland.h */,
3595 997B4CD106015822001B0407 /* llfloaterlandholdings.h */,
3596 997B4CCF06015822001B0407 /* llfloatermap.h */,
3597 997B4CCD06015822001B0407 /* llfloatermute.h */,
3598 997B4CCC06015822001B0407 /* llfloaternamedesc.h */,
3599 A3D968F10A6EBCA7007E8BD2 /* llfloaternewim.h */,
3600 997B4CCB06015822001B0407 /* llfloaterpostcard.h */,
3601 997B4CCA06015822001B0407 /* llfloaterpreference.h */,
3602 997B4CC906015822001B0407 /* llfloaterproperties.h */,
3603 9174D2C20653FC3700A7E32B /* llfloaterregioninfo.h */,
3604 997B4CC706015822001B0407 /* llfloaterreporter.h */,
3552 91E86C3307BD3B6400F56E75 /* llfloatersaveavatar.h */, 3605 91E86C3307BD3B6400F56E75 /* llfloatersaveavatar.h */,
3553 913AA1FE0798560200D111CE /* llfloaterfriends.h */, 3606 997B4CC606015822001B0407 /* llfloatersnapshot.h */,
3554 9104C0CD0778AE20001EC4F6 /* llpanelmsgs.h */, 3607 1A8BF3790A1AABAD005B9D5A /* llfloatertest.h */,
3608 997B4CC506015822001B0407 /* llfloatertools.h */,
3609 997B4CC406015822001B0407 /* llfloatertos.h */,
3610 997B4CC106015822001B0407 /* llfloaterworldmap.h */,
3611 997B4CC006015822001B0407 /* llfolderview.h */,
3612 997B4CBF06015822001B0407 /* llframestats.h */,
3613 997B4CBE06015822001B0407 /* llframestatview.h */,
3614 997B4CBD06015822001B0407 /* llgenepool.h */,
3615 91FC1D480652802C009CF498 /* llgesturemgr.h */,
3616 997B4CBC06015822001B0407 /* llgivemoney.h */,
3617 A3C20E4D0BB0BD37007E872B /* llglslshader.h */,
3555 2EFEA8EA09F4557900CB0193 /* llgroupnotify.h */, 3618 2EFEA8EA09F4557900CB0193 /* llgroupnotify.h */,
3556 91CB311706FB586300DBCE1E /* llfloaterclothing.h */, 3619 997B4CBA06015822001B0407 /* llhippo.h */,
3620 997B4CB906015822001B0407 /* llhoverview.h */,
3621 997B4CB806015822001B0407 /* llhudconnector.h */,
3622 997B4CB706015822001B0407 /* llhudeffect.h */,
3623 997B4CB606015822001B0407 /* llhudeffectbeam.h */,
3624 997B4CB506015822001B0407 /* llhudeffectlookat.h */,
3625 997B4CB406015822001B0407 /* llhudeffectpointat.h */,
3626 997B4CB306015822001B0407 /* llhudeffecttrail.h */,
3627 997B4CB206015822001B0407 /* llhudmanager.h */,
3628 997B4CB106015822001B0407 /* llhudobject.h */,
3629 997B4CB006015822001B0407 /* llhudrender.h */,
3630 997B4CAF06015822001B0407 /* llhudtext.h */,
3631 997B4CAE06015822001B0407 /* llhudview.h */,
3632 997B4CAC06015822001B0407 /* llimpanel.h */,
3633 1AD61F6C0AC09B2600507FB9 /* llimview.h */,
3634 A3285A350A71419F00F619A5 /* llinventorybridge.h */,
3635 997B4CAB06015822001B0407 /* llinventoryclipboard.h */,
3636 997B4CAA06015822001B0407 /* llinventorymodel.h */,
3637 997B4CA906015822001B0407 /* llinventoryview.h */,
3638 997B4CA806015822001B0407 /* lljoystickbutton.h */,
3639 997B4CA506015822001B0407 /* lllandmarklist.h */,
3640 997B4CA406015822001B0407 /* lllightconstants.h */,
3641 997B4CA106015822001B0407 /* llmanip.h */,
3642 997B4CA006015822001B0407 /* llmaniprotate.h */,
3643 997B4C9F06015822001B0407 /* llmanipscale.h */,
3644 997B4C9E06015822001B0407 /* llmaniptranslate.h */,
3645 E34C14750AE6A3FF009BF4DE /* llmapresponders.h */,
3646 997B4C9D06015822001B0407 /* llmenucommands.h */,
3647 997B4C9906015822001B0407 /* llmorphview.h */,
3648 997B4C9806015822001B0407 /* llmoveview.h */,
3649 997B4C9706015822001B0407 /* llmutelist.h */,
3650 997B4C9606015822001B0407 /* llnamebox.h */,
3651 997B4C9506015822001B0407 /* llnameeditor.h */,
3652 997B4C9406015822001B0407 /* llnamelistctrl.h */,
3653 997B4C9306015822001B0407 /* llnetmap.h */,
3654 997B4C9106015822001B0407 /* llnotify.h */,
3655 997B4C9006015822001B0407 /* lloverlaybar.h */,
3656 997B4C8E06015822001B0407 /* llpanelaudioprefs.h */,
3657 997B4C8D06015822001B0407 /* llpanelavatar.h */,
3658 99FBB048087363B00048A5CC /* llpanelclassified.h */,
3659 997B4C8B06015822001B0407 /* llpanelcontents.h */,
3660 997B4C8A06015822001B0407 /* llpanelcreate.h */,
3661 997B4C8906015822001B0407 /* llpaneldebug.h */,
3662 997B4C8606015822001B0407 /* llpaneldirbrowser.h */,
3663 99FBB090087366930048A5CC /* llpaneldirclassified.h */,
3664 997B4C8506015822001B0407 /* llpaneldirevents.h */,
3665 997B4C8406015822001B0407 /* llpaneldirfind.h */,
3666 997B4C8306015822001B0407 /* llpaneldirgroups.h */,
3667 997B4C8206015822001B0407 /* llpaneldirland.h */,
3668 997B4C8006015822001B0407 /* llpaneldirpeople.h */,
3669 997B4C7F06015822001B0407 /* llpaneldirpicks.h */,
3670 997B4C7E06015822001B0407 /* llpaneldirplaces.h */,
3671 997B4C7D06015822001B0407 /* llpaneldirpopular.h */,
3672 997B4C7C06015822001B0407 /* llpaneldisplay.h */,
3673 997B4C7A06015822001B0407 /* llpanelevent.h */,
3674 997B4C7906015822001B0407 /* llpanelface.h */,
3675 997B4C7706015822001B0407 /* llpanelgeneral.h */,
3676 2EFEA8ED09F455C900CB0193 /* llpanelgroup.h */,
3677 2EFEA8EF09F4588000CB0193 /* llpanelgroupgeneral.h */,
3557 84401E310A13CCB2006720A5 /* llpanelgroupinvite.h */, 3678 84401E310A13CCB2006720A5 /* llpanelgroupinvite.h */,
3558 2EA4CEEE09F83C0B008F60F7 /* llpanelgrouplandmoney.h */, 3679 2EA4CEEE09F83C0B008F60F7 /* llpanelgrouplandmoney.h */,
3559 2EA4CEEF09F83C16008F60F7 /* llpanelgrouproles.h */,
3560 2E6FE90E09FD562D00AF02FF /* llpanelgroupnotices.h */, 3680 2E6FE90E09FD562D00AF02FF /* llpanelgroupnotices.h */,
3561 915F492B06B5739800F629BF /* lleventinfo.h */, 3681 2EA4CEEF09F83C16008F60F7 /* llpanelgrouproles.h */,
3562 915F492306B572FB00F629BF /* lleventnotifier.h */, 3682 997B4C7506015822001B0407 /* llpanelgroupvoting.h */,
3563 91DF405006A73E0C00CA7FE5 /* llviewerdisplay.h */, 3683 997B4C7406015822001B0407 /* llpanelinput.h */,
3564 2EFEA8EF09F4588000CB0193 /* llpanelgroupgeneral.h */, 3684 997B4C7306015822001B0407 /* llpanelinventory.h */,
3565 2EFEA8ED09F455C900CB0193 /* llpanelgroup.h */, 3685 997B4C7206015822001B0407 /* llpanelland.h */,
3566 91DF402206A739CB00CA7FE5 /* llstartup.h */, 3686 1A758C970A436FF000589675 /* llpanellandobjects.h */,
3567 912541B00691FF8D008C66F7 /* llfasttimerview.h */, 3687 1A758C980A436FF400589675 /* llpanellandoptions.h */,
3568 9174D2C20653FC3700A7E32B /* llfloaterregioninfo.h */, 3688 997B4C7106015822001B0407 /* llpanelleaderboard.h */,
3569 91FC1D480652802C009CF498 /* llgesturemgr.h */, 3689 A3AF6BD00A544F0A005B5E2C /* llpanellogin.h */,
3690 997B4C6F06015822001B0407 /* llpanelmorph.h */,
3691 9104C0CD0778AE20001EC4F6 /* llpanelmsgs.h */,
3692 997B4C6D06015822001B0407 /* llpanelnetwork.h */,
3693 997B4C6C06015821001B0407 /* llpanelobject.h */,
3694 997B4C6B06015821001B0407 /* llpanelpermissions.h */,
3695 997B4C6A06015821001B0407 /* llpanelpick.h */,
3696 997B4C6906015821001B0407 /* llpanelplace.h */,
3697 997B4C6706015821001B0407 /* llpatchvertexarray.h */,
3698 997B4C6506015821001B0407 /* llpolymesh.h */,
3699 997B4C6406015821001B0407 /* llpolymorph.h */,
3700 1A3143DD0A02B725005B87E7 /* llprefschat.h */,
3701 1A3143DC0A02B720005B87E7 /* llprefsim.h */,
3702 997B4C6206015821001B0407 /* llpreview.h */,
3570 91FC1D4606527FEC009CF498 /* llpreviewgesture.h */, 3703 91FC1D4606527FEC009CF498 /* llpreviewgesture.h */,
3571 997B4BD006015820001B0407 /* viewer.h */, 3704 997B4C6106015821001B0407 /* llpreviewlandmark.h */,
3572 997B4BD106015820001B0407 /* VertexCache.h */, 3705 997B4C6006015821001B0407 /* llpreviewnotecard.h */,
3573 997B4BD406015820001B0407 /* randgauss.h */, 3706 997B4C5F06015821001B0407 /* llpreviewobject.h */,
3574 997B4BD506015820001B0407 /* pipeline.h */, 3707 997B4C5E06015821001B0407 /* llpreviewscript.h */,
3575 997B4BD906015821001B0407 /* noise.h */, 3708 997B4C5D06015821001B0407 /* llpreviewsound.h */,
3576 997B4BDA06015821001B0407 /* moviemaker.h */, 3709 997B4C5C06015821001B0407 /* llpreviewtexture.h */,
3577 997B4BDB06015821001B0407 /* macview_Prefix.h */, 3710 997B4C5A06015821001B0407 /* llprogressview.h */,
3578 997B4BDC06015821001B0407 /* macmain.h */, 3711 997B4C5706015821001B0407 /* llregionposition.h */,
3579 997B4BDE06015821001B0407 /* llworldmapview.h */, 3712 1A8870E60BCC5AAD00E89AA6 /* llresourcedata.h */,
3580 997B4BDF06015821001B0407 /* llworldmap.h */, 3713 997B4C5206015821001B0407 /* llroam.h */,
3581 997B4BE006015821001B0407 /* llworld.h */, 3714 1AFA40B60A2DFD8200C13F70 /* llsavedsettingsglue.h */,
3582 997B4BE106015821001B0407 /* llwindebug.h */, 3715 997B4C4E06015821001B0407 /* llselectmgr.h */,
3583 997B4BE206015821001B0407 /* llwind.h */, 3716 997B4C4D06015821001B0407 /* llsky.h */,
3584 997B4BE306015821001B0407 /* llwearablelist.h */,
3585 997B4BE406015821001B0407 /* llwearable.h */,
3586 997B4BE506015821001B0407 /* llwaterpatch.h */,
3587 997B4BE606015821001B0407 /* llvowater.h */,
3588 997B4BE706015821001B0407 /* llvovolume.h */,
3589 997B4BE806015821001B0407 /* llvotreenew.h */,
3590 997B4BE906015821001B0407 /* llvotree.h */,
3591 997B4BEA06015821001B0407 /* llvotextbubble.h */,
3592 997B4BEB06015821001B0407 /* llvosurfacepatch.h */,
3593 997B4BEC06015821001B0407 /* llvosky.h */,
3594 997B4BED06015821001B0407 /* llvopartgroup.h */,
3595 997B4BEF06015821001B0407 /* llvoground.h */,
3596 997B4BF006015821001B0407 /* llvograss.h */,
3597 997B4BF106015821001B0407 /* llvoclouds.h */,
3598 997B4BF206015821001B0407 /* llvocache.h */,
3599 997B4BF306015821001B0407 /* llvoavatar.h */,
3600 997B4BF406015821001B0407 /* llvlmanager.h */,
3601 997B4BF506015821001B0407 /* llvlcomposition.h */,
3602 997B4BF606015821001B0407 /* llviewerwindow.h */,
3603 997B4BF706015821001B0407 /* llviewervisualparam.h */,
3604 997B4BF806015821001B0407 /* llviewerthrottle.h */,
3605 997B4BF906015821001B0407 /* llviewertextureanim.h */,
3606 997B4BFA06015821001B0407 /* llviewerstats.h */,
3607 997B4BFC06015821001B0407 /* llviewerregion.h */,
3608 997B4BFD06015821001B0407 /* llviewerpartsource.h */,
3609 997B4BFE06015821001B0407 /* llviewerpartsim.h */,
3610 997B4BFF06015821001B0407 /* llviewerparceloverlay.h */,
3611 997B4C0006015821001B0407 /* llviewerparcelmgr.h */,
3612 997B4C0106015821001B0407 /* llviewerobjectlist.h */,
3613 997B4C0206015821001B0407 /* llviewerobject.h */,
3614 997B4C0306015821001B0407 /* llviewermessage.h */,
3615 997B4C0406015821001B0407 /* llviewermenu.h */,
3616 997B4C0506015821001B0407 /* llviewerlayer.h */,
3617 997B4C0606015821001B0407 /* llviewerjointshape.h */,
3618 997B4C0706015821001B0407 /* llviewerimagelist.h */,
3619 997B4C0806015821001B0407 /* llviewerimage.h */,
3620 997B4C0906015821001B0407 /* llviewergesture.h */,
3621 997B4C0A06015821001B0407 /* llviewercamera.h */,
3622 997B4C0B06015821001B0407 /* llviewerbuild.h */,
3623 997B4C0E06015821001B0407 /* llvelocitybar.h */,
3624 997B4C0F06015821001B0407 /* llviewerjointmesh.h */,
3625 997B4C1006015821001B0407 /* llviewerjointattachment.h */,
3626 997B4C1106015821001B0407 /* llviewerjoint.h */,
3627 997B4C1206015821001B0407 /* llviewerinventory.h */,
3628 997B4C1306015821001B0407 /* lluserauth.h */,
3629 997B4C1406015821001B0407 /* llurl.h */,
3630 997B4C1506015821001B0407 /* lluploaddialog.h */,
3631 997B4C1806015821001B0407 /* lluiconstants.h */,
3632 997B4C1B06015821001B0407 /* lltoolview.h */,
3633 997B4C1C06015821001B0407 /* lltoolselectrect.h */,
3634 997B4C1D06015821001B0407 /* lltoolselectland.h */,
3635 997B4C1E06015821001B0407 /* lltoolselect.h */,
3636 997B4C2006015821001B0407 /* lltoolplacer.h */,
3637 997B4C2106015821001B0407 /* lltoolpie.h */,
3638 997B4C2406015821001B0407 /* lltracker.h */,
3639 997B4C2506015821001B0407 /* lltoolobjpicker.h */,
3640 997B4C2606015821001B0407 /* lltoolmorph.h */,
3641 997B4C2706015821001B0407 /* lltoolmgr.h */,
3642 997B4C2806015821001B0407 /* lltoolindividual.h */,
3643 997B4C2906015821001B0407 /* lltoolgun.h */,
3644 997B4C2A06015821001B0407 /* lltoolgrab.h */,
3645 997B4C2B06015821001B0407 /* lltoolfocus.h */,
3646 997B4C2C06015821001B0407 /* lltoolface.h */,
3647 997B4C2D06015821001B0407 /* lltooldraganddrop.h */,
3648 997B4C2E06015821001B0407 /* lltoolcomp.h */,
3649 997B4C3006015821001B0407 /* lltoolbrush.h */,
3650 997B4C3206015821001B0407 /* lltoolbar.h */,
3651 997B4C3306015821001B0407 /* lltool.h */,
3652 997B4C3406015821001B0407 /* lltextureview.h */,
3653 997B4C3506015821001B0407 /* lltexturetable.h */,
3654 997B4C3606015821001B0407 /* lltexturectrl.h */,
3655 997B4C3B06015821001B0407 /* lltexlayer.h */,
3656 997B4C3D06015821001B0407 /* lltable.h */,
3657 997B4C4006015821001B0407 /* llstatview.h */,
3658 997B4C4106015821001B0407 /* llstatusbar.h */,
3659 997B4C4206015821001B0407 /* llstatgraph.h */,
3660 997B4C4306015821001B0407 /* llstatbar.h */,
3661 997B4C4406015821001B0407 /* llsprite.h */,
3662 997B4C4606015821001B0407 /* llsphere.h */,
3663 997B4C4706015821001B0407 /* llspatialpartition.h */, 3717 997B4C4706015821001B0407 /* llspatialpartition.h */,
3664 997B4C4A06015821001B0407 /* llsurfacepatch.h */, 3718 997B4C4606015821001B0407 /* llsphere.h */,
3719 997B4C4406015821001B0407 /* llsprite.h */,
3720 91DF402206A739CB00CA7FE5 /* llstartup.h */,
3721 997B4C4306015821001B0407 /* llstatbar.h */,
3722 997B4C4206015821001B0407 /* llstatgraph.h */,
3723 997B4C4106015821001B0407 /* llstatusbar.h */,
3724 997B4C4006015821001B0407 /* llstatview.h */,
3665 997B4C4B06015821001B0407 /* llsurface.h */, 3725 997B4C4B06015821001B0407 /* llsurface.h */,
3666 997B4C4D06015821001B0407 /* llsky.h */, 3726 997B4C4A06015821001B0407 /* llsurfacepatch.h */,
3667 997B4C4E06015821001B0407 /* llselectmgr.h */, 3727 997B4C3D06015821001B0407 /* lltable.h */,
3668 997B4C5206015821001B0407 /* llroam.h */, 3728 997B4C3B06015821001B0407 /* lltexlayer.h */,
3669 997B4C5706015821001B0407 /* llregionposition.h */, 3729 997B4C3606015821001B0407 /* lltexturectrl.h */,
3670 997B4C5A06015821001B0407 /* llprogressview.h */, 3730 997B4C3406015821001B0407 /* lltextureview.h */,
3671 997B4C5C06015821001B0407 /* llpreviewtexture.h */, 3731 997B4C3306015821001B0407 /* lltool.h */,
3672 997B4C5D06015821001B0407 /* llpreviewsound.h */, 3732 997B4C3206015821001B0407 /* lltoolbar.h */,
3673 997B4C5E06015821001B0407 /* llpreviewscript.h */, 3733 997B4C3006015821001B0407 /* lltoolbrush.h */,
3674 997B4C5F06015821001B0407 /* llpreviewobject.h */, 3734 997B4C2E06015821001B0407 /* lltoolcomp.h */,
3675 997B4C6006015821001B0407 /* llpreviewnotecard.h */, 3735 997B4C2D06015821001B0407 /* lltooldraganddrop.h */,
3676 997B4C6106015821001B0407 /* llpreviewlandmark.h */, 3736 997B4C2C06015821001B0407 /* lltoolface.h */,
3677 997B4C6206015821001B0407 /* llpreview.h */, 3737 997B4C2B06015821001B0407 /* lltoolfocus.h */,
3678 997B4C6406015821001B0407 /* llpolymorph.h */, 3738 997B4C2A06015821001B0407 /* lltoolgrab.h */,
3679 997B4C6506015821001B0407 /* llpolymesh.h */, 3739 997B4C2906015821001B0407 /* lltoolgun.h */,
3680 997B4C6706015821001B0407 /* llpatchvertexarray.h */, 3740 997B4C2806015821001B0407 /* lltoolindividual.h */,
3681 997B4C6906015821001B0407 /* llpanelplace.h */, 3741 997B4C2706015821001B0407 /* lltoolmgr.h */,
3682 997B4C6A06015821001B0407 /* llpanelpick.h */, 3742 997B4C2606015821001B0407 /* lltoolmorph.h */,
3683 997B4C6B06015821001B0407 /* llpanelpermissions.h */, 3743 997B4C2506015821001B0407 /* lltoolobjpicker.h */,
3684 997B4C6C06015821001B0407 /* llpanelobject.h */, 3744 997B4C2106015821001B0407 /* lltoolpie.h */,
3685 997B4C6D06015822001B0407 /* llpanelnetwork.h */, 3745 997B4C2006015821001B0407 /* lltoolplacer.h */,
3686 997B4C6F06015822001B0407 /* llpanelmorph.h */, 3746 997B4C1E06015821001B0407 /* lltoolselect.h */,
3687 997B4C7106015822001B0407 /* llpanelleaderboard.h */, 3747 997B4C1D06015821001B0407 /* lltoolselectland.h */,
3688 997B4C7206015822001B0407 /* llpanelland.h */, 3748 997B4C1C06015821001B0407 /* lltoolselectrect.h */,
3689 997B4C7306015822001B0407 /* llpanelinventory.h */, 3749 997B4C1B06015821001B0407 /* lltoolview.h */,
3690 997B4C7406015822001B0407 /* llpanelinput.h */, 3750 997B4C2406015821001B0407 /* lltracker.h */,
3691 997B4C7506015822001B0407 /* llpanelgroupvoting.h */, 3751 997B4C1806015821001B0407 /* lluiconstants.h */,
3692 997B4C7706015822001B0407 /* llpanelgeneral.h */, 3752 997B4C1506015821001B0407 /* lluploaddialog.h */,
3693 997B4C7906015822001B0407 /* llpanelface.h */, 3753 997B4C1406015821001B0407 /* llurl.h */,
3694 997B4C7A06015822001B0407 /* llpanelevent.h */, 3754 997B4C1306015821001B0407 /* lluserauth.h */,
3695 997B4C7C06015822001B0407 /* llpaneldisplay.h */, 3755 997B4C0E06015821001B0407 /* llvelocitybar.h */,
3696 997B4C7D06015822001B0407 /* llpaneldirpopular.h */, 3756 997B4C0B06015821001B0407 /* llviewerbuild.h */,
3697 997B4C7E06015822001B0407 /* llpaneldirplaces.h */, 3757 997B4C0A06015821001B0407 /* llviewercamera.h */,
3698 997B4C7F06015822001B0407 /* llpaneldirpicks.h */, 3758 91DF405006A73E0C00CA7FE5 /* llviewerdisplay.h */,
3699 997B4C8006015822001B0407 /* llpaneldirpeople.h */, 3759 997B4C0906015821001B0407 /* llviewergesture.h */,
3700 997B4C8206015822001B0407 /* llpaneldirland.h */, 3760 997B4C0806015821001B0407 /* llviewerimage.h */,
3701 997B4C8306015822001B0407 /* llpaneldirgroups.h */, 3761 997B4C0706015821001B0407 /* llviewerimagelist.h */,
3702 997B4C8406015822001B0407 /* llpaneldirfind.h */, 3762 997B4C1206015821001B0407 /* llviewerinventory.h */,
3703 997B4C8506015822001B0407 /* llpaneldirevents.h */, 3763 997B4C1106015821001B0407 /* llviewerjoint.h */,
3704 997B4C8606015822001B0407 /* llpaneldirbrowser.h */, 3764 997B4C1006015821001B0407 /* llviewerjointattachment.h */,
3705 99FBB090087366930048A5CC /* llpaneldirclassified.h */, 3765 997B4C0F06015821001B0407 /* llviewerjointmesh.h */,
3706 997B4C8906015822001B0407 /* llpaneldebug.h */, 3766 997B4C0606015821001B0407 /* llviewerjointshape.h */,
3707 997B4C8A06015822001B0407 /* llpanelcreate.h */, 3767 A3C20E4E0BB0BD49007E872B /* llviewerjoystick.h */,
3708 99FBB048087363B00048A5CC /* llpanelclassified.h */, 3768 997B4C0506015821001B0407 /* llviewerlayer.h */,
3709 997B4C8B06015822001B0407 /* llpanelcontents.h */, 3769 997B4C0406015821001B0407 /* llviewermenu.h */,
3710 997B4C8D06015822001B0407 /* llpanelavatar.h */, 3770 997B4C0306015821001B0407 /* llviewermessage.h */,
3711 997B4C8E06015822001B0407 /* llpanelaudioprefs.h */, 3771 1A3143DB0A02B70E005B87E7 /* llviewernetwork.h */,
3712 997B4C9006015822001B0407 /* lloverlaybar.h */, 3772 997B4C0206015821001B0407 /* llviewerobject.h */,
3713 997B4C9106015822001B0407 /* llnotify.h */, 3773 997B4C0106015821001B0407 /* llviewerobjectlist.h */,
3714 997B4C9306015822001B0407 /* llnetmap.h */, 3774 997B4C0006015821001B0407 /* llviewerparcelmgr.h */,
3715 997B4C9406015822001B0407 /* llnamelistctrl.h */, 3775 997B4BFF06015821001B0407 /* llviewerparceloverlay.h */,
3716 997B4C9506015822001B0407 /* llnameeditor.h */, 3776 997B4BFE06015821001B0407 /* llviewerpartsim.h */,
3717 997B4C9606015822001B0407 /* llnamebox.h */, 3777 997B4BFD06015821001B0407 /* llviewerpartsource.h */,
3718 997B4C9706015822001B0407 /* llmutelist.h */, 3778 997B4BFC06015821001B0407 /* llviewerregion.h */,
3719 997B4C9806015822001B0407 /* llmoveview.h */, 3779 997B4BFA06015821001B0407 /* llviewerstats.h */,
3720 997B4C9906015822001B0407 /* llmorphview.h */, 3780 997B4BF906015821001B0407 /* llviewertextureanim.h */,
3721 997B4C9D06015822001B0407 /* llmenucommands.h */, 3781 997B4BF806015821001B0407 /* llviewerthrottle.h */,
3722 997B4C9E06015822001B0407 /* llmaniptranslate.h */, 3782 997B4BF706015821001B0407 /* llviewervisualparam.h */,
3723 997B4C9F06015822001B0407 /* llmanipscale.h */, 3783 997B4BF606015821001B0407 /* llviewerwindow.h */,
3724 997B4CA006015822001B0407 /* llmaniprotate.h */, 3784 997B4BF506015821001B0407 /* llvlcomposition.h */,
3725 997B4CA106015822001B0407 /* llmanip.h */, 3785 997B4BF406015821001B0407 /* llvlmanager.h */,
3726 997B4CA406015822001B0407 /* lllightconstants.h */, 3786 997B4BF306015821001B0407 /* llvoavatar.h */,
3727 997B4CA506015822001B0407 /* lllandmarklist.h */, 3787 997B4BF206015821001B0407 /* llvocache.h */,
3728 997B4CA806015822001B0407 /* lljoystickbutton.h */, 3788 997B4BF106015821001B0407 /* llvoclouds.h */,
3729 997B4CA906015822001B0407 /* llinventoryview.h */, 3789 997B4BF006015821001B0407 /* llvograss.h */,
3730 997B4CAA06015822001B0407 /* llinventorymodel.h */, 3790 997B4BEF06015821001B0407 /* llvoground.h */,
3731 997B4CAB06015822001B0407 /* llinventoryclipboard.h */, 3791 997B4BED06015821001B0407 /* llvopartgroup.h */,
3732 997B4CAC06015822001B0407 /* llimpanel.h */, 3792 997B4BEC06015821001B0407 /* llvosky.h */,
3733 997B4CAE06015822001B0407 /* llhudview.h */, 3793 997B4BEB06015821001B0407 /* llvosurfacepatch.h */,
3734 997B4CAF06015822001B0407 /* llhudtext.h */, 3794 997B4BEA06015821001B0407 /* llvotextbubble.h */,
3735 997B4CB006015822001B0407 /* llhudrender.h */, 3795 997B4BE906015821001B0407 /* llvotree.h */,
3736 997B4CB106015822001B0407 /* llhudobject.h */, 3796 997B4BE806015821001B0407 /* llvotreenew.h */,
3737 997B4CB206015822001B0407 /* llhudmanager.h */, 3797 997B4BE706015821001B0407 /* llvovolume.h */,
3738 997B4CB306015822001B0407 /* llhudeffecttrail.h */, 3798 997B4BE606015821001B0407 /* llvowater.h */,
3739 997B4CB406015822001B0407 /* llhudeffectpointat.h */, 3799 997B4BE406015821001B0407 /* llwearable.h */,
3740 997B4CB506015822001B0407 /* llhudeffectlookat.h */, 3800 997B4BE306015821001B0407 /* llwearablelist.h */,
3741 997B4CB606015822001B0407 /* llhudeffectbeam.h */, 3801 1AF7C1F20AF6C45000C4BF4A /* llweb.h */,
3742 997B4CB706015822001B0407 /* llhudeffect.h */, 3802 997B4BE206015821001B0407 /* llwind.h */,
3743 997B4CB806015822001B0407 /* llhudconnector.h */, 3803 997B4BE106015821001B0407 /* llwindebug.h */,
3744 997B4CB906015822001B0407 /* llhoverview.h */, 3804 997B4BE006015821001B0407 /* llworld.h */,
3745 997B4CBA06015822001B0407 /* llhippo.h */, 3805 997B4BDF06015821001B0407 /* llworldmap.h */,
3746 997B4CBC06015822001B0407 /* llgivemoney.h */, 3806 997B4BDE06015821001B0407 /* llworldmapview.h */,
3747 997B4CBD06015822001B0407 /* llgenepool.h */, 3807 997B4BDC06015821001B0407 /* macmain.h */,
3748 997B4CBE06015822001B0407 /* llframestatview.h */,
3749 997B4CBF06015822001B0407 /* llframestats.h */,
3750 997B4CC006015822001B0407 /* llfolderview.h */,
3751 997B4CC106015822001B0407 /* llfloaterworldmap.h */,
3752 997B4CC406015822001B0407 /* llfloatertos.h */,
3753 997B4CC506015822001B0407 /* llfloatertools.h */,
3754 997B4CC606015822001B0407 /* llfloatersnapshot.h */,
3755 997B4CC706015822001B0407 /* llfloaterreporter.h */,
3756 997B4CC906015822001B0407 /* llfloaterproperties.h */,
3757 997B4CCA06015822001B0407 /* llfloaterpreference.h */,
3758 997B4CCB06015822001B0407 /* llfloaterpostcard.h */,
3759 997B4CCC06015822001B0407 /* llfloaternamedesc.h */,
3760 997B4CCD06015822001B0407 /* llfloatermute.h */,
3761 997B4CCF06015822001B0407 /* llfloatermap.h */,
3762 997B4CD106015822001B0407 /* llfloaterlandholdings.h */,
3763 997B4CD206015822001B0407 /* llfloaterland.h */,
3764 997B4CD406015822001B0407 /* llfloatergroups.h */,
3765 997B4CD506015822001B0407 /* llfloatergroupprofile.h */,
3766 997B4CD606015822001B0407 /* llfloatergroupinfo.h */,
3767 997B4CD806015822001B0407 /* llfloatergodtools.h */,
3768 997B4CD906015822001B0407 /* llfloatergesture.h */,
3769 997B4CDA06015822001B0407 /* llfloaterdirectory.h */,
3770 997B4CDB06015822001B0407 /* llfloatercustomize.h */,
3771 997B4CDC06015822001B0407 /* llfloaterchat.h */,
3772 997B4CDE06015822001B0407 /* llfloaterbuycontents.h */,
3773 997B4CDF06015822001B0407 /* llfloaterbuy.h */,
3774 997B4CE006015822001B0407 /* llfloaterbuildoptions.h */,
3775 997B4CE206015822001B0407 /* llfloateravatarinfo.h */,
3776 997B4CE306015822001B0407 /* llfloaterauction.h */,
3777 997B4CE506015822001B0407 /* llfloaterabout.h */,
3778 997B4CE706015822001B0407 /* llfirstuse.h */,
3779 997B4CE906015822001B0407 /* llfilepicker.h */,
3780 997B4CEA06015822001B0407 /* llfft.h */,
3781 997B4CEB06015822001B0407 /* llfeaturemanager.h */,
3782 997B4CEC06015822001B0407 /* llface.inl */,
3783 997B4CEE06015822001B0407 /* llcylinder.h */,
3784 997B4CEF06015822001B0407 /* llcubemap.h */,
3785 997B4CF006015822001B0407 /* audiosettings.h */,
3786 997B4CF106015822001B0407 /* llface.h */,
3787 997B4CF206015822001B0407 /* llemote.h */,
3788 997B4CF406015822001B0407 /* lldriverparam.h */,
3789 997B4CF506015823001B0407 /* lldrawpoolwater.h */,
3790 997B4CF606015823001B0407 /* lldrawpooltreenew.h */,
3791 997B4CF706015823001B0407 /* lldrawpooltree.h */,
3792 997B4CF806015823001B0407 /* lldrawpoolterrain.h */,
3793 997B4CFA06015823001B0407 /* lldrawpoolsky.h */,
3794 997B4CFB06015823001B0407 /* lldrawpoolsimple.h */,
3795 997B4CFC06015823001B0407 /* lldrawpoolground.h */,
3796 997B4CFD06015823001B0407 /* lldrawpoolbump.h */,
3797 997B4CFE06015823001B0407 /* lldrawpoolavatar.h */,
3798 997B4CFF06015823001B0407 /* lldrawpoolalpha.h */,
3799 997B4D0006015823001B0407 /* lldrawpool.h */,
3800 997B4D0106015823001B0407 /* lldrawable.h */,
3801 997B4D0306015823001B0407 /* lldebugview.h */,
3802 997B4D0406015823001B0407 /* llcountdown.h */,
3803 997B4D0506015823001B0407 /* llconversation.h */,
3804 997B4D0606015823001B0407 /* llcontainerview.h */,
3805 997B4D0706015823001B0407 /* llconsole.h */,
3806 997B4D0806015823001B0407 /* llcompilequeue.h */,
3807 997B4D0906015823001B0407 /* llcompass.h */,
3808 997B4D0B06015823001B0407 /* llcolorswatch.h */,
3809 997B4D0C06015823001B0407 /* llcolorscheme.h */,
3810 997B4D0D06015823001B0407 /* llcloud.h */,
3811 997B4D1006015823001B0407 /* llchatbar.h */,
3812 997B4D1106015823001B0407 /* llcameraview.h */,
3813 997B4D1206015823001B0407 /* llcallingcard.h */,
3814 997B4D1306015823001B0407 /* llcallbacklist.h */,
3815 997B4D1606015823001B0407 /* llbox.h */,
3816 997B4D1806015823001B0407 /* llbbox.h */,
3817 997B4D1C06015823001B0407 /* llaudiostatus.h */,
3818 997B4D1E06015823001B0407 /* llappearance.h */,
3819 997B4D2006015823001B0407 /* llagparray.inl */,
3820 997B4D2106015823001B0407 /* llagparray.h */,
3821 997B4D2206015823001B0407 /* llagentpilot.h */,
3822 997B4D2306015823001B0407 /* llagent.h */,
3823 997B4D2406015823001B0407 /* head.h */,
3824 997B4D2506015823001B0407 /* llasynchostbyname.h */,
3825 FD53B3DB09BDE88B00BFE3BC /* macutil_Prefix.h */, 3808 FD53B3DB09BDE88B00BFE3BC /* macutil_Prefix.h */,
3826 E34C14750AE6A3FF009BF4DE /* llmapresponders.h */, 3809 997B4BDB06015821001B0407 /* macview_Prefix.h */,
3810 997B4BDA06015821001B0407 /* moviemaker.h */,
3811 997B4BD906015821001B0407 /* noise.h */,
3812 997B4BD506015820001B0407 /* pipeline.h */,
3813 997B4BD406015820001B0407 /* randgauss.h */,
3814 997B4BD106015820001B0407 /* VertexCache.h */,
3815 997B4BD006015820001B0407 /* viewer.h */,
3827 ); 3816 );
3828 name = "newview headers"; 3817 name = "newview headers";
3829 sourceTree = "<group>"; 3818 sourceTree = "<group>";
@@ -4149,7 +4138,6 @@
4149 5503BB3C05446B20003D051F /* llwind.cpp in Sources */, 4138 5503BB3C05446B20003D051F /* llwind.cpp in Sources */,
4150 5503BB3D05446B20003D051F /* llwearablelist.cpp in Sources */, 4139 5503BB3D05446B20003D051F /* llwearablelist.cpp in Sources */,
4151 5503BB3E05446B20003D051F /* llwearable.cpp in Sources */, 4140 5503BB3E05446B20003D051F /* llwearable.cpp in Sources */,
4152 5503BB3F05446B20003D051F /* llwaterpatch.cpp in Sources */,
4153 5503BB4005446B20003D051F /* llvowater.cpp in Sources */, 4141 5503BB4005446B20003D051F /* llvowater.cpp in Sources */,
4154 5503BB4105446B20003D051F /* llvovolume.cpp in Sources */, 4142 5503BB4105446B20003D051F /* llvovolume.cpp in Sources */,
4155 5503BB4305446B20003D051F /* llvotree.cpp in Sources */, 4143 5503BB4305446B20003D051F /* llvotree.cpp in Sources */,
@@ -4212,7 +4200,6 @@
4212 5503BB9105446B20003D051F /* llfloaterland.cpp in Sources */, 4200 5503BB9105446B20003D051F /* llfloaterland.cpp in Sources */,
4213 5503BB9205446B20003D051F /* llpanelface.cpp in Sources */, 4201 5503BB9205446B20003D051F /* llpanelface.cpp in Sources */,
4214 5503BB9305446B20003D051F /* llpanelevent.cpp in Sources */, 4202 5503BB9305446B20003D051F /* llpanelevent.cpp in Sources */,
4215 5503BB9405446B20003D051F /* llcountdown.cpp in Sources */,
4216 5503BB9505446B20003D051F /* llcontroldef.cpp in Sources */, 4203 5503BB9505446B20003D051F /* llcontroldef.cpp in Sources */,
4217 5503BB9805446B20003D051F /* llframestatview.cpp in Sources */, 4204 5503BB9805446B20003D051F /* llframestatview.cpp in Sources */,
4218 5503BB9905446B20003D051F /* llframestats.cpp in Sources */, 4205 5503BB9905446B20003D051F /* llframestats.cpp in Sources */,
@@ -4220,7 +4207,6 @@
4220 5503BB9E05446B20003D051F /* llhudobject.cpp in Sources */, 4207 5503BB9E05446B20003D051F /* llhudobject.cpp in Sources */,
4221 5503BB9F05446B20003D051F /* llhudmanager.cpp in Sources */, 4208 5503BB9F05446B20003D051F /* llhudmanager.cpp in Sources */,
4222 5503BBA005446B20003D051F /* lldrawpoolalpha.cpp in Sources */, 4209 5503BBA005446B20003D051F /* lldrawpoolalpha.cpp in Sources */,
4223 5503BBA105446B20003D051F /* lltexturetable.cpp in Sources */,
4224 5503BBA205446B20003D051F /* lltexturectrl.cpp in Sources */, 4210 5503BBA205446B20003D051F /* lltexturectrl.cpp in Sources */,
4225 5503BBA405446B20003D051F /* llpanelobject.cpp in Sources */, 4211 5503BBA405446B20003D051F /* llpanelobject.cpp in Sources */,
4226 5503BBA505446B20003D051F /* llpanelnetwork.cpp in Sources */, 4212 5503BBA505446B20003D051F /* llpanelnetwork.cpp in Sources */,
@@ -4314,7 +4300,6 @@
4314 5503BC2105446B20003D051F /* llcolorscheme.cpp in Sources */, 4300 5503BC2105446B20003D051F /* llcolorscheme.cpp in Sources */,
4315 5503BC2205446B20003D051F /* llmutelist.cpp in Sources */, 4301 5503BC2205446B20003D051F /* llmutelist.cpp in Sources */,
4316 5503BC2305446B20003D051F /* llmoveview.cpp in Sources */, 4302 5503BC2305446B20003D051F /* llmoveview.cpp in Sources */,
4317 5503BC2405446B20003D051F /* llfft.cpp in Sources */,
4318 5503BC2505446B20003D051F /* llfloatermap.cpp in Sources */, 4303 5503BC2505446B20003D051F /* llfloatermap.cpp in Sources */,
4319 5503BC2705446B20003D051F /* llregionposition.cpp in Sources */, 4304 5503BC2705446B20003D051F /* llregionposition.cpp in Sources */,
4320 5503BC2905446B20003D051F /* llasynchostbyname.cpp in Sources */, 4305 5503BC2905446B20003D051F /* llasynchostbyname.cpp in Sources */,
@@ -4576,6 +4561,9 @@
4576 88A95BB20C14D5FC0027E363 /* llsrv.cpp in Sources */, 4561 88A95BB20C14D5FC0027E363 /* llsrv.cpp in Sources */,
4577 8833693F0C18AF33007F52DA /* llimagepng.cpp in Sources */, 4562 8833693F0C18AF33007F52DA /* llimagepng.cpp in Sources */,
4578 883369400C18AF33007F52DA /* llpngwrapper.cpp in Sources */, 4563 883369400C18AF33007F52DA /* llpngwrapper.cpp in Sources */,
4564 1A0DA5130C3AC07800361F49 /* llviewerjointmesh_vec.cpp in Sources */,
4565 1A0DA5140C3AC07800361F49 /* llviewerjointmesh_sse2.cpp in Sources */,
4566 1A0DA5150C3AC07800361F49 /* llviewerjointmesh_sse.cpp in Sources */,
4579 ); 4567 );
4580 runOnlyForDeploymentPostprocessing = 0; 4568 runOnlyForDeploymentPostprocessing = 0;
4581 }; 4569 };
diff --git a/linden/indra/newview/newview.vcproj b/linden/indra/newview/newview.vcproj
index ae0c02d..a6d4fa5 100644
--- a/linden/indra/newview/newview.vcproj
+++ b/linden/indra/newview/newview.vcproj
@@ -344,9 +344,6 @@
344 RelativePath=".\llcontroldef.cpp"> 344 RelativePath=".\llcontroldef.cpp">
345 </File> 345 </File>
346 <File 346 <File
347 RelativePath=".\llcountdown.cpp">
348 </File>
349 <File
350 RelativePath=".\llcubemap.cpp"> 347 RelativePath=".\llcubemap.cpp">
351 </File> 348 </File>
352 <File 349 <File
@@ -431,9 +428,6 @@
431 RelativePath=".\llfeaturemanager.cpp"> 428 RelativePath=".\llfeaturemanager.cpp">
432 </File> 429 </File>
433 <File 430 <File
434 RelativePath=".\llfft.cpp">
435 </File>
436 <File
437 RelativePath=".\llfilepicker.cpp"> 431 RelativePath=".\llfilepicker.cpp">
438 </File> 432 </File>
439 <File 433 <File
@@ -983,9 +977,6 @@
983 RelativePath=".\lltexturefetch.cpp"> 977 RelativePath=".\lltexturefetch.cpp">
984 </File> 978 </File>
985 <File 979 <File
986 RelativePath=".\lltexturetable.cpp">
987 </File>
988 <File
989 RelativePath=".\lltextureview.cpp"> 980 RelativePath=".\lltextureview.cpp">
990 </File> 981 </File>
991 <File 982 <File
@@ -1109,6 +1100,71 @@
1109 RelativePath=".\llviewerjointmesh.cpp"> 1100 RelativePath=".\llviewerjointmesh.cpp">
1110 </File> 1101 </File>
1111 <File 1102 <File
1103 RelativePath=".\llviewerjointmesh_sse.cpp">
1104 <FileConfiguration
1105 Name="Debug|Win32">
1106 <Tool
1107 Name="VCCLCompilerTool"
1108 EnableEnhancedInstructionSet="1"
1109 UsePrecompiledHeader="0"/>
1110 </FileConfiguration>
1111 <FileConfiguration
1112 Name="Release|Win32">
1113 <Tool
1114 Name="VCCLCompilerTool"
1115 EnableEnhancedInstructionSet="1"
1116 UsePrecompiledHeader="0"/>
1117 </FileConfiguration>
1118 <FileConfiguration
1119 Name="ReleaseForDownload|Win32">
1120 <Tool
1121 Name="VCCLCompilerTool"
1122 EnableEnhancedInstructionSet="1"
1123 UsePrecompiledHeader="0"/>
1124 </FileConfiguration>
1125 <FileConfiguration
1126 Name="ReleaseNoOpt|Win32">
1127 <Tool
1128 Name="VCCLCompilerTool"
1129 EnableEnhancedInstructionSet="1"
1130 UsePrecompiledHeader="0"/>
1131 </FileConfiguration>
1132 </File>
1133 <File
1134 RelativePath=".\llviewerjointmesh_sse2.cpp">
1135 <FileConfiguration
1136 Name="Debug|Win32">
1137 <Tool
1138 Name="VCCLCompilerTool"
1139 EnableEnhancedInstructionSet="2"
1140 UsePrecompiledHeader="0"/>
1141 </FileConfiguration>
1142 <FileConfiguration
1143 Name="Release|Win32">
1144 <Tool
1145 Name="VCCLCompilerTool"
1146 EnableEnhancedInstructionSet="2"
1147 UsePrecompiledHeader="0"/>
1148 </FileConfiguration>
1149 <FileConfiguration
1150 Name="ReleaseForDownload|Win32">
1151 <Tool
1152 Name="VCCLCompilerTool"
1153 EnableEnhancedInstructionSet="2"
1154 UsePrecompiledHeader="0"/>
1155 </FileConfiguration>
1156 <FileConfiguration
1157 Name="ReleaseNoOpt|Win32">
1158 <Tool
1159 Name="VCCLCompilerTool"
1160 EnableEnhancedInstructionSet="2"
1161 UsePrecompiledHeader="0"/>
1162 </FileConfiguration>
1163 </File>
1164 <File
1165 RelativePath=".\llviewerjointmesh_vec.cpp">
1166 </File>
1167 <File
1112 RelativePath=".\llviewerjointshape.cpp"> 1168 RelativePath=".\llviewerjointshape.cpp">
1113 </File> 1169 </File>
1114 <File 1170 <File
@@ -1226,9 +1282,6 @@
1226 RelativePath=".\llvowater.cpp"> 1282 RelativePath=".\llvowater.cpp">
1227 </File> 1283 </File>
1228 <File 1284 <File
1229 RelativePath=".\llwaterpatch.cpp">
1230 </File>
1231 <File
1232 RelativePath=".\llwearable.cpp"> 1285 RelativePath=".\llwearable.cpp">
1233 </File> 1286 </File>
1234 <File 1287 <File
@@ -1360,9 +1413,6 @@
1360 RelativePath=".\llcontainerview.h"> 1413 RelativePath=".\llcontainerview.h">
1361 </File> 1414 </File>
1362 <File 1415 <File
1363 RelativePath=".\llcountdown.h">
1364 </File>
1365 <File
1366 RelativePath=".\llcubemap.h"> 1416 RelativePath=".\llcubemap.h">
1367 </File> 1417 </File>
1368 <File 1418 <File
@@ -1447,9 +1497,6 @@
1447 RelativePath=".\llfeaturemanager.h"> 1497 RelativePath=".\llfeaturemanager.h">
1448 </File> 1498 </File>
1449 <File 1499 <File
1450 RelativePath=".\llfft.h">
1451 </File>
1452 <File
1453 RelativePath=".\llfilepicker.h"> 1500 RelativePath=".\llfilepicker.h">
1454 </File> 1501 </File>
1455 <File 1502 <File
@@ -2017,9 +2064,6 @@
2017 RelativePath=".\lltexturefetch.h"> 2064 RelativePath=".\lltexturefetch.h">
2018 </File> 2065 </File>
2019 <File 2066 <File
2020 RelativePath=".\lltexturetable.h">
2021 </File>
2022 <File
2023 RelativePath=".\lltextureview.h"> 2067 RelativePath=".\lltextureview.h">
2024 </File> 2068 </File>
2025 <File 2069 <File
@@ -2260,9 +2304,6 @@
2260 RelativePath=".\llvowater.h"> 2304 RelativePath=".\llvowater.h">
2261 </File> 2305 </File>
2262 <File 2306 <File
2263 RelativePath=".\llwaterpatch.h">
2264 </File>
2265 <File
2266 RelativePath=".\llwearable.h"> 2307 RelativePath=".\llwearable.h">
2267 </File> 2308 </File>
2268 <File 2309 <File
diff --git a/linden/indra/newview/newview_vc8.vcproj b/linden/indra/newview/newview_vc8.vcproj
index 445ebd9..5ba125b 100644
--- a/linden/indra/newview/newview_vc8.vcproj
+++ b/linden/indra/newview/newview_vc8.vcproj
@@ -496,10 +496,6 @@
496 > 496 >
497 </File> 497 </File>
498 <File 498 <File
499 RelativePath=".\llcountdown.cpp"
500 >
501 </File>
502 <File
503 RelativePath=".\llcubemap.cpp" 499 RelativePath=".\llcubemap.cpp"
504 > 500 >
505 </File> 501 </File>
@@ -612,10 +608,6 @@
612 > 608 >
613 </File> 609 </File>
614 <File 610 <File
615 RelativePath=".\llfft.cpp"
616 >
617 </File>
618 <File
619 RelativePath=".\llfilepicker.cpp" 611 RelativePath=".\llfilepicker.cpp"
620 > 612 >
621 </File> 613 </File>
@@ -1348,10 +1340,6 @@
1348 > 1340 >
1349 </File> 1341 </File>
1350 <File 1342 <File
1351 RelativePath=".\lltexturetable.cpp"
1352 >
1353 </File>
1354 <File
1355 RelativePath=".\lltextureview.cpp" 1343 RelativePath=".\lltextureview.cpp"
1356 > 1344 >
1357 </File> 1345 </File>
@@ -1516,6 +1504,95 @@
1516 > 1504 >
1517 </File> 1505 </File>
1518 <File 1506 <File
1507 RelativePath=".\llviewerjointmesh_sse.cpp"
1508 >
1509 <FileConfiguration
1510 Name="Debug|Win32"
1511 >
1512 <Tool
1513 Name="VCCLCompilerTool"
1514 EnableEnhancedInstructionSet="1"
1515 UsePrecompiledHeader="0"
1516 WarnAsError="false"
1517 />
1518 </FileConfiguration>
1519 <FileConfiguration
1520 Name="Release|Win32"
1521 >
1522 <Tool
1523 Name="VCCLCompilerTool"
1524 EnableEnhancedInstructionSet="1"
1525 UsePrecompiledHeader="0"
1526 WarnAsError="false"
1527 />
1528 </FileConfiguration>
1529 <FileConfiguration
1530 Name="ReleaseForDownload|Win32"
1531 >
1532 <Tool
1533 Name="VCCLCompilerTool"
1534 EnableEnhancedInstructionSet="1"
1535 UsePrecompiledHeader="0"
1536 WarnAsError="false"
1537 />
1538 </FileConfiguration>
1539 <FileConfiguration
1540 Name="ReleaseNoOpt|Win32"
1541 >
1542 <Tool
1543 Name="VCCLCompilerTool"
1544 EnableEnhancedInstructionSet="1"
1545 UsePrecompiledHeader="0"
1546 WarnAsError="false"
1547 />
1548 </FileConfiguration>
1549 </File>
1550 <File
1551 RelativePath=".\llviewerjointmesh_sse2.cpp"
1552 >
1553 <FileConfiguration
1554 Name="Debug|Win32"
1555 >
1556 <Tool
1557 Name="VCCLCompilerTool"
1558 EnableEnhancedInstructionSet="2"
1559 WarnAsError="false"
1560 />
1561 </FileConfiguration>
1562 <FileConfiguration
1563 Name="Release|Win32"
1564 >
1565 <Tool
1566 Name="VCCLCompilerTool"
1567 EnableEnhancedInstructionSet="2"
1568 WarnAsError="false"
1569 />
1570 </FileConfiguration>
1571 <FileConfiguration
1572 Name="ReleaseForDownload|Win32"
1573 >
1574 <Tool
1575 Name="VCCLCompilerTool"
1576 EnableEnhancedInstructionSet="2"
1577 WarnAsError="false"
1578 />
1579 </FileConfiguration>
1580 <FileConfiguration
1581 Name="ReleaseNoOpt|Win32"
1582 >
1583 <Tool
1584 Name="VCCLCompilerTool"
1585 EnableEnhancedInstructionSet="2"
1586 UsePrecompiledHeader="0"
1587 WarnAsError="false"
1588 />
1589 </FileConfiguration>
1590 </File>
1591 <File
1592 RelativePath=".\llviewerjointmesh_vec.cpp"
1593 >
1594 </File>
1595 <File
1519 RelativePath=".\llviewerjointshape.cpp" 1596 RelativePath=".\llviewerjointshape.cpp"
1520 > 1597 >
1521 </File> 1598 </File>
@@ -1672,10 +1749,6 @@
1672 > 1749 >
1673 </File> 1750 </File>
1674 <File 1751 <File
1675 RelativePath=".\llwaterpatch.cpp"
1676 >
1677 </File>
1678 <File
1679 RelativePath=".\llwearable.cpp" 1752 RelativePath=".\llwearable.cpp"
1680 > 1753 >
1681 </File> 1754 </File>
@@ -1850,10 +1923,6 @@
1850 > 1923 >
1851 </File> 1924 </File>
1852 <File 1925 <File
1853 RelativePath=".\llcountdown.h"
1854 >
1855 </File>
1856 <File
1857 RelativePath=".\llcubemap.h" 1926 RelativePath=".\llcubemap.h"
1858 > 1927 >
1859 </File> 1928 </File>
@@ -1966,10 +2035,6 @@
1966 > 2035 >
1967 </File> 2036 </File>
1968 <File 2037 <File
1969 RelativePath=".\llfft.h"
1970 >
1971 </File>
1972 <File
1973 RelativePath=".\llfilepicker.h" 2038 RelativePath=".\llfilepicker.h"
1974 > 2039 >
1975 </File> 2040 </File>
@@ -2722,10 +2787,6 @@
2722 > 2787 >
2723 </File> 2788 </File>
2724 <File 2789 <File
2725 RelativePath=".\lltexturetable.h"
2726 >
2727 </File>
2728 <File
2729 RelativePath=".\lltextureview.h" 2790 RelativePath=".\lltextureview.h"
2730 > 2791 >
2731 </File> 2792 </File>
@@ -3046,10 +3107,6 @@
3046 > 3107 >
3047 </File> 3108 </File>
3048 <File 3109 <File
3049 RelativePath=".\llwaterpatch.h"
3050 >
3051 </File>
3052 <File
3053 RelativePath=".\llwearable.h" 3110 RelativePath=".\llwearable.h"
3054 > 3111 >
3055 </File> 3112 </File>
diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt
index 278f022..83fb42f 100644
--- a/linden/indra/newview/releasenotes.txt
+++ b/linden/indra/newview/releasenotes.txt
@@ -1,3 +1,24 @@
1Release Notes for Second Life 1.17.3(0) July 5, 2007
2=====================================
3Changes:
4* Added muting for permissions requests
5* Added viewer channel info to Help > About Second Life...
6
7Bug fixes:
8* SVC-21: Request for making identification of llOwnerSay messages possible
9* VWR-1418: Progressive memory consumption (leak) since 1.17.1
10* VWR-1410: Quirk in net.cpp
11* VWR-1351: Violation against the conding standard in llfloaterchat.cpp
12* VWR-1203: Avatars eyes are constantly crossing in 1.17
13* VWR-1184: [Linux VWR] Signal 7 (SIGBUS) Error (caused by libtcmalloc)
14* VWR-1147: A patch set is provided to add an optional 'Confirm Exit' pop-up window for most user client exit methods. Prevents the 'Accidental Quit'.
15* VWR-605: Include the SL date & day with the time
16* VWR-561: Blurry arrows in camera control and other graphics issues
17* VWR-53: Inconsistency in order of AV texture layer between the upper and lower body
18* Fixed Top Scripts window not refreshing when button is pressed while Top Colliders list is still open
19* Fixed odd text overlay on About Land > General tab
20* Fixed format of llOwnerSay chat text
21
1Release Notes for Second Life 1.17.2(0) June 27, 2007 22Release Notes for Second Life 1.17.2(0) June 27, 2007
2===================================== 23=====================================
3Changes: 24Changes:
diff --git a/linden/indra/newview/res/newViewRes.rc b/linden/indra/newview/res/newViewRes.rc
index 5a8c413..bd94933 100644
--- a/linden/indra/newview/res/newViewRes.rc
+++ b/linden/indra/newview/res/newViewRes.rc
@@ -227,8 +227,8 @@ TOOLPIPETTE CURSOR "toolpipette.cur"
227// 227//
228 228
229VS_VERSION_INFO VERSIONINFO 229VS_VERSION_INFO VERSIONINFO
230 FILEVERSION 1,17,2,0 230 FILEVERSION 1,17,3,0
231 PRODUCTVERSION 1,17,2,0 231 PRODUCTVERSION 1,17,3,0
232 FILEFLAGSMASK 0x3fL 232 FILEFLAGSMASK 0x3fL
233#ifdef _DEBUG 233#ifdef _DEBUG
234 FILEFLAGS 0x1L 234 FILEFLAGS 0x1L
@@ -245,12 +245,12 @@ BEGIN
245 BEGIN 245 BEGIN
246 VALUE "CompanyName", "Linden Lab" 246 VALUE "CompanyName", "Linden Lab"
247 VALUE "FileDescription", "Second Life" 247 VALUE "FileDescription", "Second Life"
248 VALUE "FileVersion", "1.17.2.0" 248 VALUE "FileVersion", "1.17.3.0"
249 VALUE "InternalName", "Second Life" 249 VALUE "InternalName", "Second Life"
250 VALUE "LegalCopyright", "Copyright © 2001-2007, Linden Research, Inc." 250 VALUE "LegalCopyright", "Copyright © 2001-2007, Linden Research, Inc."
251 VALUE "OriginalFilename", "SecondLife.exe" 251 VALUE "OriginalFilename", "SecondLife.exe"
252 VALUE "ProductName", "Second Life" 252 VALUE "ProductName", "Second Life"
253 VALUE "ProductVersion", "1.17.2.0" 253 VALUE "ProductVersion", "1.17.3.0"
254 END 254 END
255 END 255 END
256 BLOCK "VarFileInfo" 256 BLOCK "VarFileInfo"
diff --git a/linden/indra/newview/skins/xui/en-us/alerts.xml b/linden/indra/newview/skins/xui/en-us/alerts.xml
index 6c11a06..319e495 100644
--- a/linden/indra/newview/skins/xui/en-us/alerts.xml
+++ b/linden/indra/newview/skins/xui/en-us/alerts.xml
@@ -1180,17 +1180,6 @@ Please choose the male or female avatar.
1180 Female 1180 Female
1181 </option> 1181 </option>
1182 </alert> 1182 </alert>
1183 <alert modal="true" name="ConfirmQuit">
1184 <message name="message">
1185 Are you sure you want to quit?
1186 </message>
1187 <option name="Yes">
1188 Yes
1189 </option>
1190 <option name="No">
1191 No
1192 </option>
1193 </alert>
1194 <alert modal="true" name="RegionNoTerraforming"> 1183 <alert modal="true" name="RegionNoTerraforming">
1195 <message name="message"> 1184 <message name="message">
1196 The region [REGION] does not allow terraforming. 1185 The region [REGION] does not allow terraforming.
@@ -4102,6 +4091,20 @@ will only work if a script is added with a money() event.
4102 Cancel 4091 Cancel
4103 </option> 4092 </option>
4104 </alert> 4093 </alert>
4094 <alert modal="true" name="ConfirmQuit">
4095 <message name="message">
4096 Are you sure you want to quit?
4097 </message>
4098 <ignore name="ignore">
4099 Ignore
4100 </ignore>
4101 <option name="Quit">
4102 Quit
4103 </option>
4104 <option name="Continue">
4105 Continue
4106 </option>
4107 </alert>
4105 <alert modal="true" name="HelpReportAbuseEmailLL" > 4108 <alert modal="true" name="HelpReportAbuseEmailLL" >
4106 <message name="message"> 4109 <message name="message">
4107Use this tool to report violations of the Terms of Service 4110Use this tool to report violations of the Terms of Service
diff --git a/linden/indra/newview/skins/xui/en-us/panel_login.xml b/linden/indra/newview/skins/xui/en-us/panel_login.xml
index 7df2151..ba4884d 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_login.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_login.xml
@@ -91,4 +91,10 @@
91 left="698" mouse_opaque="true" name="version_text" v_pad="0" width="100"> 91 left="698" mouse_opaque="true" name="version_text" v_pad="0" width="100">
92 1.23.4 (5) 92 1.23.4 (5)
93 </text> 93 </text>
94 <text bg_visible="false" border_drop_shadow_visible="false" border_visible="false"
95 bottom="14" drop_shadow_visible="true" follows="right|bottom"
96 font="SansSerifSmall" h_pad="0" halign="right" height="12" hidden="false"
97 left="698" mouse_opaque="true" name="channel_text" v_pad="0" width="300">
98 [Viewer Channel Name]
99 </text>
94</panel> 100</panel>
diff --git a/linden/indra/newview/skins/xui/en-us/panel_status_bar.xml b/linden/indra/newview/skins/xui/en-us/panel_status_bar.xml
index 9feaafc..b584151 100644
--- a/linden/indra/newview/skins/xui/en-us/panel_status_bar.xml
+++ b/linden/indra/newview/skins/xui/en-us/panel_status_bar.xml
@@ -28,7 +28,8 @@
28 image_unselected="status_buy_currency.tga" label="" label_selected="" 28 image_unselected="status_buy_currency.tga" label="" label_selected=""
29 left="-120" mouse_opaque="true" name="buycurrency" scale_image="true" 29 left="-120" mouse_opaque="true" name="buycurrency" scale_image="true"
30 tool_tip="Buy currency" width="16" /> 30 tool_tip="Buy currency" width="16" />
31 <text type="string" length="12" bg_visible="false" border_drop_shadow_visible="false" border_visible="false" 31 <text type="string" length="12" bg_visible="false" border_drop_shadow_visible="false"
32 border_visible="false"
32 bottom="-20" disabled_color="1 1 1 1" drop_shadow_visible="true" 33 bottom="-20" disabled_color="1 1 1 1" drop_shadow_visible="true"
33 enabled="true" follows="right|bottom" font="SansSerifSmall" h_pad="0" 34 enabled="true" follows="right|bottom" font="SansSerifSmall" h_pad="0"
34 halign="right" height="18" hidden="false" left="-210" mouse_opaque="true" 35 halign="right" height="18" hidden="false" left="-210" mouse_opaque="true"
@@ -36,6 +37,14 @@
36 v_pad="2" width="80"> 37 v_pad="2" width="80">
37 12:00 AM 38 12:00 AM
38 </text> 39 </text>
40
41 <text hidden="true" name="StatBarDaysOfWeek">
42 Sunday:Monday:Tuesday:Wednesday:Thursday:Friday:Saturday
43 </text>
44 <text hidden="true" name="StatBarMonthsOfYear">
45 January:February:March:April:May:June:July:August:September:October:November:December
46 </text>
47
39 <button bottom="-18" enabled="true" follows="right|bottom" font="SansSerif" 48 <button bottom="-18" enabled="true" follows="right|bottom" font="SansSerif"
40 halign="center" height="16" hidden="false" 49 halign="center" height="16" hidden="false"
41 image_disabled="status_script_debug.tga" 50 image_disabled="status_script_debug.tga"
diff --git a/linden/indra/newview/viewer.cpp b/linden/indra/newview/viewer.cpp
index 7ff6cc3..48108bd 100644
--- a/linden/indra/newview/viewer.cpp
+++ b/linden/indra/newview/viewer.cpp
@@ -205,6 +205,7 @@
205#include "llviewerbuild.h" 205#include "llviewerbuild.h"
206#include "llviewercamera.h" 206#include "llviewercamera.h"
207#include "llviewercontrol.h" 207#include "llviewercontrol.h"
208#include "llviewerjointmesh.h"
208#include "llviewerimagelist.h" 209#include "llviewerimagelist.h"
209#include "llviewerkeyboard.h" 210#include "llviewerkeyboard.h"
210#include "llviewermenu.h" 211#include "llviewermenu.h"
@@ -1077,8 +1078,10 @@ int main( int argc, char **argv )
1077 // Initialize apple menubar and various callbacks 1078 // Initialize apple menubar and various callbacks
1078 init_apple_menu(gSecondLife.c_str()); 1079 init_apple_menu(gSecondLife.c_str());
1079 1080
1081#if __ppc__
1080 // If the CPU doesn't have Altivec (i.e. it's not at least a G4), don't go any further. 1082 // If the CPU doesn't have Altivec (i.e. it's not at least a G4), don't go any further.
1081 if(!gSysCPU.hasSSE()) 1083 // Only test PowerPC - all Intel Macs have SSE.
1084 if(!gSysCPU.hasAltivec())
1082 { 1085 {
1083 std::ostringstream msg; 1086 std::ostringstream msg;
1084 msg << gSecondLife << " requires a processor with AltiVec (G4 or later)."; 1087 msg << gSecondLife << " requires a processor with AltiVec (G4 or later).";
@@ -1089,6 +1092,7 @@ int main( int argc, char **argv )
1089 remove_marker_file(); 1092 remove_marker_file();
1090 return 1; 1093 return 1;
1091 } 1094 }
1095#endif
1092 1096
1093#endif // LL_DARWIN 1097#endif // LL_DARWIN
1094 1098
@@ -2447,7 +2451,7 @@ static inline bool being_debugged()
2447 if (ret != -1) 2451 if (ret != -1)
2448 { 2452 {
2449 char buf[1024]; 2453 char buf[1024];
2450 size_t n; 2454 ssize_t n;
2451 2455
2452 n = readlink(name, buf, sizeof(buf) - 1); 2456 n = readlink(name, buf, sizeof(buf) - 1);
2453 if (n != -1) 2457 if (n != -1)
@@ -2899,7 +2903,7 @@ OSErr AEQuitHandler(const AppleEvent *messagein, AppleEvent *reply, long refIn)
2899{ 2903{
2900 OSErr result = noErr; 2904 OSErr result = noErr;
2901 2905
2902 app_request_quit(); 2906 app_user_quit();
2903 2907
2904 return(result); 2908 return(result);
2905} 2909}
@@ -3171,6 +3175,20 @@ void app_force_quit(const char* launch_file_on_quit)
3171 gQuit = TRUE; 3175 gQuit = TRUE;
3172} 3176}
3173 3177
3178static void finish_quit(S32 option, void *userdata)
3179{
3180 if (option == 0)
3181 {
3182 app_request_quit();
3183 }
3184}
3185
3186void app_user_quit()
3187{
3188 gViewerWindow->alertXml("ConfirmQuit", finish_quit, NULL);
3189}
3190
3191
3174// Don't quit instantly. Instead, request to be logged off. 3192// Don't quit instantly. Instead, request to be logged off.
3175// Called from control-Q handler, Windows(tm) close-window message (WM_CLOSE), and Mac Quit AppleEvent handler. 3193// Called from control-Q handler, Windows(tm) close-window message (WM_CLOSE), and Mac Quit AppleEvent handler.
3176void app_request_quit() 3194void app_request_quit()
@@ -4980,6 +4998,89 @@ class LLRenderLightingDetailListener: public LLSimpleListener
4980}; 4998};
4981static LLRenderLightingDetailListener render_lighting_detail_listener; 4999static LLRenderLightingDetailListener render_lighting_detail_listener;
4982 5000
5001
5002//-------------------------------------------------------------------
5003//-------------------------------------------------------------------
5004// Vector Performance Options
5005//-------------------------------------------------------------------
5006//-------------------------------------------------------------------
5007
5008// Initially, we test the performance of the vectorization code, then
5009// turn it off if it ends up being slower. JC
5010BOOL gVectorizePerfTest = TRUE;
5011BOOL gVectorizeEnable = FALSE;
5012U32 gVectorizeProcessor = 0;
5013BOOL gVectorizeSkin = FALSE;
5014
5015void update_vector_performances(void)
5016{
5017 char *vp;
5018
5019 switch(gVectorizeProcessor)
5020 {
5021 case 2: vp = "SSE2"; break; // *TODO: replace the magic #s
5022 case 1: vp = "SSE"; break;
5023 default: vp = "COMPILER DEFAULT"; break;
5024 }
5025 llinfos << "Vectorization : " << ( gVectorizeEnable ? "ENABLED" : "DISABLED" ) << llendl ;
5026 llinfos << "Vector Processor : " << vp << llendl ;
5027 llinfos << "Vectorized Skinning : " << ( gVectorizeSkin ? "ENABLED" : "DISABLED" ) << llendl ;
5028
5029 if(gVectorizeEnable && gVectorizeSkin)
5030 {
5031 switch(gVectorizeProcessor)
5032 {
5033 case 2:
5034 LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometrySSE2;
5035 break;
5036 case 1:
5037 LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometrySSE;
5038 break;
5039 default:
5040 LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometryVectorized;
5041 break;
5042 }
5043 }
5044 else
5045 {
5046 LLViewerJointMesh::sUpdateGeometryFunc = &LLViewerJointMesh::updateGeometryOriginal;
5047 }
5048}
5049
5050
5051class LLVectorizationEnableListener: public LLSimpleListener
5052{
5053 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
5054 {
5055 gVectorizeEnable = event->getValue().asBoolean();
5056 update_vector_performances();
5057 return true;
5058 }
5059};
5060static LLVectorizationEnableListener vectorization_enable_listener;
5061
5062class LLVectorizeSkinListener: public LLSimpleListener
5063{
5064 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
5065 {
5066 gVectorizeSkin = event->getValue().asBoolean();
5067 update_vector_performances();
5068 return true;
5069 }
5070};
5071static LLVectorizeSkinListener vectorize_skin_listener;
5072
5073class LLVectorProcessorListener: public LLSimpleListener
5074{
5075 bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
5076 {
5077 gVectorizeProcessor = event->getValue().asInteger();
5078 update_vector_performances();
5079 return true;
5080 }
5081};
5082static LLVectorProcessorListener vector_processor_listener;
5083
4983// Use these strictly for things that are constructed at startup, 5084// Use these strictly for things that are constructed at startup,
4984// or for things that are performance critical. JC 5085// or for things that are performance critical. JC
4985void saved_settings_to_globals() 5086void saved_settings_to_globals()
@@ -5031,6 +5132,38 @@ void saved_settings_to_globals()
5031 gHandleKeysAsync = gSavedSettings.getBOOL("AsyncKeyboard"); 5132 gHandleKeysAsync = gSavedSettings.getBOOL("AsyncKeyboard");
5032 LLHoverView::sShowHoverTips = gSavedSettings.getBOOL("ShowHoverTips"); 5133 LLHoverView::sShowHoverTips = gSavedSettings.getBOOL("ShowHoverTips");
5033 5134
5135 if (gSysCPU.hasAltivec())
5136 {
5137 gSavedSettings.setBOOL("VectorizeEnable", TRUE );
5138 gSavedSettings.setU32("VectorizeProcessor", 0 );
5139 }
5140 else
5141 if (gSysCPU.hasSSE2())
5142 {
5143 gSavedSettings.setBOOL("VectorizeEnable", TRUE );
5144 gSavedSettings.setU32("VectorizeProcessor", 2 );
5145 }
5146 else
5147 if (gSysCPU.hasSSE())
5148 {
5149 gSavedSettings.setBOOL("VectorizeEnable", TRUE );
5150 gSavedSettings.setU32("VectorizeProcessor", 1 );
5151 }
5152 else
5153 {
5154 // Don't bother testing or running if CPU doesn't support it. JC
5155 gSavedSettings.setBOOL("VectorizePerfTest", FALSE );
5156 gSavedSettings.setBOOL("VectorizeEnable", FALSE );
5157 gSavedSettings.setU32("VectorizeProcessor", 0 );
5158 gSavedSettings.setBOOL("VectorizeSkin", FALSE);
5159 }
5160
5161 gVectorizePerfTest = gSavedSettings.getBOOL("VectorizePerfTest");
5162 gVectorizeEnable = gSavedSettings.getBOOL("VectorizeEnable");
5163 gVectorizeProcessor = gSavedSettings.getU32("VectorizeProcessor");
5164 gVectorizeSkin = gSavedSettings.getBOOL("VectorizeSkin");
5165 update_vector_performances();
5166
5034 // Into a global in case we corrupt the list on crash. 5167 // Into a global in case we corrupt the list on crash.
5035 gCrashBehavior = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING); 5168 gCrashBehavior = gCrashSettings.getS32(CRASH_BEHAVIOR_SETTING);
5036 5169
@@ -5077,6 +5210,9 @@ void saved_settings_to_globals()
5077 gSavedSettings.getControl("FlycamAxis4")->addListener(&joystick_listener); 5210 gSavedSettings.getControl("FlycamAxis4")->addListener(&joystick_listener);
5078 gSavedSettings.getControl("FlycamAxis5")->addListener(&joystick_listener); 5211 gSavedSettings.getControl("FlycamAxis5")->addListener(&joystick_listener);
5079 gSavedSettings.getControl("FlycamAxis6")->addListener(&joystick_listener); 5212 gSavedSettings.getControl("FlycamAxis6")->addListener(&joystick_listener);
5213 gSavedSettings.getControl("VectorizeEnable")->addListener(&vectorization_enable_listener);
5214 gSavedSettings.getControl("VectorizeProcessor")->addListener(&vector_processor_listener);
5215 gSavedSettings.getControl("VectorizeSkin")->addListener(&vectorize_skin_listener);
5080 5216
5081 // gAgent.init() also loads from saved settings. 5217 // gAgent.init() also loads from saved settings.
5082} 5218}
diff --git a/linden/indra/newview/viewer.h b/linden/indra/newview/viewer.h
index 22edc73..74ca366 100644
--- a/linden/indra/newview/viewer.h
+++ b/linden/indra/newview/viewer.h
@@ -286,6 +286,9 @@ BOOL raycast_for_new_obj_pos( S32 x, S32 y, LLViewerObject** hit_obj, S32* hit_f
286// Saves the final snapshot, but only once. 286// Saves the final snapshot, but only once.
287void save_final_snapshot(void*); 287void save_final_snapshot(void*);
288 288
289// Call when user is requesting application to quit, ask for confirmation.
290void app_user_quit();
291
289// Call when user is requesting application to quit. 292// Call when user is requesting application to quit.
290void app_request_quit(); 293void app_request_quit();
291 294
diff --git a/linden/indra/newview/viewer_manifest.py b/linden/indra/newview/viewer_manifest.py
index 2da4a22..e66af2a 100755
--- a/linden/indra/newview/viewer_manifest.py
+++ b/linden/indra/newview/viewer_manifest.py
@@ -432,8 +432,8 @@ class Linux_i686Manifest(LinuxManifest):
432# self.path("libstdc++.so.6") 432# self.path("libstdc++.so.6")
433 self.path("libuuid.so", "libuuid.so.1") 433 self.path("libuuid.so", "libuuid.so.1")
434 self.path("libSDL-1.2.so.0") 434 self.path("libSDL-1.2.so.0")
435 self.path("libtcmalloc.so.0") 435 #self.path("libtcmalloc.so.0")
436 self.path("libstacktrace.so.0") 436 #self.path("libstacktrace.so.0")
437# self.path("libllkdu.so", "../bin/libllkdu.so") # llkdu goes in bin for some reason 437# self.path("libllkdu.so", "../bin/libllkdu.so") # llkdu goes in bin for some reason
438 self.end_prefix("lib") 438 self.end_prefix("lib")
439 439