mirror of
https://github.com/imprudence/imprudence.git
synced 2026-08-14 00:58:02 +00:00
Merge remote-tracking branch 'origin/next' into WL-refactor
This commit is contained in:
@@ -3,6 +3,97 @@
|
||||
http://imprudenceviewer.org
|
||||
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
=- 1.4.0 beta 2 -=
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
|
||||
|
||||
CHANGES
|
||||
|
||||
This version of Imprudence mostly contains bug fixes, as
|
||||
Imprudence went into a feature freeze in anticipation of an RC
|
||||
release to come later.
|
||||
|
||||
|
||||
IMPROVEMENTS
|
||||
|
||||
* Selective cache clearing: now you can selectively delete
|
||||
different types of disk cache separately.
|
||||
|
||||
BUG FIXES
|
||||
|
||||
Many bug fixes that are listed here -
|
||||
|
||||
http://wiki.kokuaviewer.org/wiki/Imprudence:Release_Notes/1.4.0_Beta_2
|
||||
|
||||
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
=- 1.4.0 beta 1 -=
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
|
||||
There was very many changes in 1.4.0 beta 1 compared to Imprudence
|
||||
1.3.2, this file only summarizes some of them. A more complete list
|
||||
is here -
|
||||
|
||||
http://wiki.kokuaviewer.org/wiki/Imprudence:Release_Notes/1.4.0_Beta_1
|
||||
|
||||
|
||||
RELEASE HIGHLIGHTS
|
||||
|
||||
Compared to Imprudence 1.3, Imprudence 1.4 adds a mind-blowing
|
||||
number of new features, UI improvements, and bug fixes. We
|
||||
recommend Imprudence 1.3 users also upgrade to Imprudence 1.4
|
||||
soon, unless you require streaming audio support on Mac.
|
||||
|
||||
Here is a brief overview of some of the most notable new features,
|
||||
grouped by category:
|
||||
|
||||
* General: Support for WindLight notecards; Updated Chinese,
|
||||
French, German, and Japanese UIs; Derender object/avatar; Gestures
|
||||
can use more keys; Reload $ Balance; Animation Overrider starts
|
||||
working sooner.
|
||||
|
||||
* Communication: Spell Checking; AutoCorrect; Chat Translation;
|
||||
Chatbar Commands; Display Names support; Highlight chat from
|
||||
friends; Highlight chat mentioning your name or nickname(s);
|
||||
Search bar in Friends and Groups lists.
|
||||
|
||||
* Content Creation: Support for Alpha and Tattoo layers; new Prim
|
||||
Alignment tool; Local Textures (real-time preview of textures on
|
||||
your computer without uploading); Object texture export from SL
|
||||
(with TPVP-compliant permission checks); Upload support for
|
||||
Photoshop PSD image files (available on Mac only); Copy/Paste
|
||||
buttons in Build tools.
|
||||
|
||||
* Login, Grids, and OpenSim: Login name and password saved
|
||||
per-grid; Support for variable sized regions (i.e. bigger than
|
||||
256m) when available; Support for the OpenRegionInfo capability.
|
||||
|
||||
* Map, Radar, and Teleport: Full Radar; Teleport History; Estate
|
||||
Managers’ minimap radar distance is no longer limited; Right
|
||||
clicking objects in Area Object Search to teleport to/cam to/edit
|
||||
them.
|
||||
|
||||
* Media, Browser, and Networking: Media system revamped with
|
||||
SLPlugin; Media Filters; Interaction and zoom with streaming
|
||||
media/webpages; Improved XMLPRC and SOCKS5 proxy support; Parcel
|
||||
media URLs are no longer hidden.
|
||||
|
||||
* Preferences: Reorganized Preferences window; New UI skins (Dark
|
||||
and Gemini); Sliders for draw distance, etc. allow typing in exact
|
||||
values; Search bar in Debug Settings.
|
||||
|
||||
* Texture Loading: Many, many texture loading improvements from
|
||||
Robin Cornelius, Thickbrick Sleaford, and others; Various
|
||||
improvements to help prevent unloaded (cloud) avatars.
|
||||
|
||||
* Development: Many, many, many code improvements and cleanup
|
||||
under the hood. Special thanks to Aleric Inglewood and others for
|
||||
their work on this.
|
||||
|
||||
|
||||
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
=- 1.3.2 -=
|
||||
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
|
||||
|
||||
@@ -702,6 +702,12 @@
|
||||
|
||||
<key>FetchLib</key>
|
||||
<boolean>true</boolean>
|
||||
|
||||
<key>ObjectMedia</key>
|
||||
<boolean>false</boolean>
|
||||
|
||||
<key>ObjectMediaNavigate</key>
|
||||
<boolean>false</boolean>
|
||||
</map>
|
||||
|
||||
<key>messageBans</key>
|
||||
|
||||
@@ -24,6 +24,11 @@ list(REMOVE_DUPLICATES TYPES)
|
||||
set(CMAKE_CONFIGURATION_TYPES ${TYPES} CACHE STRING "Supported build types." FORCE)
|
||||
unset(TYPES)
|
||||
|
||||
# Work around nmake / VS difference.
|
||||
set(VIEWER_CFG_INTDIR ${CMAKE_CFG_INTDIR})
|
||||
if (NMAKE)
|
||||
set(VIEWER_CFG_INTDIR ${CMAKE_BUILD_TYPE})
|
||||
endif(NMAKE)
|
||||
|
||||
# Determine the number of bits of this processor
|
||||
|
||||
|
||||
+97
-107
@@ -408,7 +408,7 @@ class LinuxSetup(UnixSetup):
|
||||
print 'Running %r' % cmd
|
||||
self.run(cmd)
|
||||
|
||||
|
||||
|
||||
class DarwinSetup(UnixSetup):
|
||||
def __init__(self):
|
||||
super(DarwinSetup, self).__init__()
|
||||
@@ -485,6 +485,10 @@ class WindowsSetup(PlatformSetup):
|
||||
'vc100' : {
|
||||
'gen' : r'Visual Studio 10',
|
||||
'ver' : r'10.0'
|
||||
},
|
||||
'nmake' : {
|
||||
'gen' : r'NMake Makefiles',
|
||||
'ver' : r''
|
||||
}
|
||||
}
|
||||
gens['vs2003'] = gens['vc71']
|
||||
@@ -500,6 +504,41 @@ class WindowsSetup(PlatformSetup):
|
||||
self._generator = None
|
||||
self.incredibuild = False
|
||||
|
||||
def find_visual_studio(self, gen=None):
|
||||
if gen is None:
|
||||
gen = self._generator
|
||||
gen = gen.lower()
|
||||
try:
|
||||
import _winreg
|
||||
key_str = (r'SOFTWARE\Microsoft\VisualStudio\%s\Setup\VS' %
|
||||
self.gens[gen]['ver'])
|
||||
value_str = (r'EnvironmentDirectory')
|
||||
reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
|
||||
key = _winreg.OpenKey(reg, key_str)
|
||||
value = _winreg.QueryValueEx(key, value_str)[0]
|
||||
print 'Found: %s' % value
|
||||
return value
|
||||
except WindowsError, err:
|
||||
return ''
|
||||
|
||||
def find_visual_studio_express(self, gen=None):
|
||||
if gen is None:
|
||||
gen = self._generator
|
||||
gen = gen.lower()
|
||||
try:
|
||||
import _winreg
|
||||
key_str = (r'SOFTWARE\Microsoft\VCExpress\%s\Setup\VC' %
|
||||
self.gens[gen]['ver'])
|
||||
value_str = (r'ProductDir')
|
||||
reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
|
||||
key = _winreg.OpenKey(reg, key_str)
|
||||
value = _winreg.QueryValueEx(key, value_str)[0]+"vcpackages"
|
||||
print 'Found: %s' % value
|
||||
self.using_express = True
|
||||
return value
|
||||
except WindowsError, err:
|
||||
return ''
|
||||
|
||||
def _get_generator(self):
|
||||
if self._generator is None:
|
||||
for version in 'vc80 vc90 vc100 vc71'.split():
|
||||
@@ -508,9 +547,8 @@ class WindowsSetup(PlatformSetup):
|
||||
print 'Building with ', self.gens[version]['gen']
|
||||
break
|
||||
else:
|
||||
print >> sys.stderr, 'Cannot find a Visual Studio installation, testing for express editions'
|
||||
for version in 'vc80 vc90 vc100 vc71'.split():
|
||||
if self.find_visual_studio_express(version):
|
||||
if self.find_visual_studio_express(version) != '':
|
||||
self._generator = version
|
||||
self.using_express = True
|
||||
print 'Building with ', self.gens[version]['gen'] , "Express edition"
|
||||
@@ -521,6 +559,8 @@ class WindowsSetup(PlatformSetup):
|
||||
return self._generator
|
||||
|
||||
def _set_generator(self, gen):
|
||||
if gen == 'nmake':
|
||||
self._get_generator()
|
||||
self._generator = gen
|
||||
|
||||
generator = property(_get_generator, _set_generator)
|
||||
@@ -538,83 +578,58 @@ class WindowsSetup(PlatformSetup):
|
||||
opts=quote(opts),
|
||||
standalone=self.standalone,
|
||||
unattended=self.unattended,
|
||||
project_name=self.project_name
|
||||
project_name=self.project_name,
|
||||
type=self.build_type,
|
||||
use_vstool='ON',
|
||||
nmake=''
|
||||
)
|
||||
if self.generator == 'nmake':
|
||||
args['use_vstool'] = 'OFF'
|
||||
args['nmake'] = '-DNMAKE:BOOL=ON'
|
||||
if self.using_express:
|
||||
args['using_express'] = 'ON'
|
||||
args['use_vstool'] = 'OFF'
|
||||
else:
|
||||
args['using_express'] = 'OFF'
|
||||
# default to packaging disabled
|
||||
# if simple:
|
||||
# return 'cmake %(opts)s "%(dir)s"' % args
|
||||
return ('cmake -G "%(generator)s" '
|
||||
'-DCMAKE_BUILD_TYPE:STRING=%(type)s '
|
||||
'-DSTANDALONE:BOOL=%(standalone)s '
|
||||
'-DUNATTENDED:BOOL=%(unattended)s '
|
||||
'-DROOT_PROJECT_NAME:STRING=%(project_name)s '
|
||||
#'-DPACKAGE:BOOL=ON '
|
||||
'-DUSING_EXPRESS:BOOL=%(using_express)s '
|
||||
'-DUSE_VSTOOL:BOOL=%(use_vstool)s '
|
||||
'%(nmake)s '
|
||||
'%(opts)s "%(dir)s"' % args)
|
||||
|
||||
def find_visual_studio(self, gen=None):
|
||||
if gen is None:
|
||||
gen = self._generator
|
||||
gen = gen.lower()
|
||||
try:
|
||||
import _winreg
|
||||
key_str = (r'SOFTWARE\Microsoft\VisualStudio\%s\Setup\VS' %
|
||||
self.gens[gen]['ver'])
|
||||
value_str = (r'EnvironmentDirectory')
|
||||
print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' %
|
||||
(key_str, value_str))
|
||||
print key_str
|
||||
|
||||
reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
|
||||
key = _winreg.OpenKey(reg, key_str)
|
||||
value = _winreg.QueryValueEx(key, value_str)[0]
|
||||
print 'Found: %s' % value
|
||||
return value
|
||||
except WindowsError, err:
|
||||
print >> sys.stderr, "Didn't find ", self.gens[gen]['gen']
|
||||
return ''
|
||||
|
||||
def find_visual_studio_express(self, gen=None):
|
||||
if gen is None:
|
||||
gen = self._generator
|
||||
gen = gen.lower()
|
||||
try:
|
||||
import _winreg
|
||||
key_str = (r'SOFTWARE\Microsoft\VCExpress\%s\Setup\VC' %
|
||||
self.gens[gen]['ver'])
|
||||
value_str = (r'ProductDir')
|
||||
print ('Reading VS environment from HKEY_LOCAL_MACHINE\%s\%s' %
|
||||
(key_str, value_str))
|
||||
print key_str
|
||||
|
||||
reg = _winreg.ConnectRegistry(None, _winreg.HKEY_LOCAL_MACHINE)
|
||||
key = _winreg.OpenKey(reg, key_str)
|
||||
value = _winreg.QueryValueEx(key, value_str)[0]+"IDE"
|
||||
print 'Found: %s' % value
|
||||
self.using_express = True
|
||||
return value
|
||||
except WindowsError, err:
|
||||
print >> sys.stderr, "Didn't find ", self.gens[gen]['gen']
|
||||
return ''
|
||||
|
||||
def get_build_cmd(self):
|
||||
if self.incredibuild:
|
||||
config = self.build_type
|
||||
if self.gens[self.generator]['ver'] in [ r'8.0', r'9.0', r'10.0', r'7.1' ]:
|
||||
config = '\"%s|Win32\"' % config
|
||||
|
||||
return "buildconsole %s.sln /build %s" % (self.project_name, config)
|
||||
|
||||
environment = self.find_visual_studio()
|
||||
|
||||
environment = self.find_visual_studio(self.generator)
|
||||
if environment == '':
|
||||
environment = self.find_visual_studio_express()
|
||||
if environment == '':
|
||||
print >> sys.stderr, "Something went very wrong during build stage, could not find a Visual Studio?"
|
||||
else:
|
||||
print >> sys.stderr, "\nSolution generation complete, as you are using an express edition the final\n stages will need to be completed by hand"
|
||||
build_dirs=self.build_dirs();
|
||||
print >> sys.stderr, "Solution can now be found in:", build_dirs[0]
|
||||
print >> sys.stderr, "Set %s as startup project" % self.project_name
|
||||
print >> sys.stderr, "Set build target is Release or RelWithDbgInfo"
|
||||
exit(0)
|
||||
environment = self.find_visual_studio_express(self.generator)
|
||||
if self.generator != 'nmake':
|
||||
if environment == '':
|
||||
print >> sys.stderr, "Something went very wrong during build stage, could not find a Visual Studio?"
|
||||
else:
|
||||
build_dirs=self.build_dirs();
|
||||
return("\"\"%s\\vcbuild\" /useenv %s.sln \"%s|win32\"\"" % (environment, self.project_name, self.build_type))
|
||||
|
||||
if self.generator == 'nmake':
|
||||
# Hack around a bug in cmake that I'm surprised did not hit GUI controlled builds.
|
||||
self.run(r'sed -i "s|\(^RC_FLAGS .* \) /GS .*$|\1|" build-nmake/win_crash_logger/CMakeFiles/windows-crash-logger.dir/flags.make')
|
||||
self.run(r'sed -i "s|\(^RC_FLAGS .* \) /GS .*$|\1|" build-nmake/newview/CMakeFiles/imprudence-bin.dir/flags.make')
|
||||
self.run(r'sed -i "s|\(^RC_FLAGS .* \) /EHsc .*/Zm1000 \($\)|\1\2|" build-nmake/win_crash_logger/CMakeFiles/windows-crash-logger.dir/flags.make')
|
||||
self.run(r'sed -i "s|\(^RC_FLAGS .* \) /EHsc .*/Zm1000 \($\)|\1\2|" build-nmake/newview/CMakeFiles/imprudence-bin.dir/flags.make')
|
||||
# Evil hack.
|
||||
self.run(r'touch newview/touched.bat')
|
||||
return 'nmake'
|
||||
|
||||
# devenv.com is CLI friendly, devenv.exe... not so much.
|
||||
return ('"%sdevenv.com" %s.sln /build %s' %
|
||||
@@ -634,55 +649,29 @@ class WindowsSetup(PlatformSetup):
|
||||
raise CommandError('the command %r %s' %
|
||||
(name, ret))
|
||||
|
||||
def run_cmake(self, args=[]):
|
||||
'''Override to add the vstool.exe call after running cmake.'''
|
||||
PlatformSetup.run_cmake(self, args)
|
||||
if self.unattended == 'OFF':
|
||||
if self.using_express == False:
|
||||
self.run_vstool()
|
||||
|
||||
def run_vstool(self):
|
||||
for build_dir in self.build_dirs():
|
||||
stamp = os.path.join(build_dir, 'vstool.txt')
|
||||
try:
|
||||
prev_build = open(stamp).read().strip()
|
||||
except IOError:
|
||||
prev_build = ''
|
||||
if prev_build == self.build_type:
|
||||
# Only run vstool if the build type has changed.
|
||||
continue
|
||||
vstool_cmd = (os.path.join('tools','vstool','VSTool.exe') +
|
||||
' --solution ' +
|
||||
os.path.join(build_dir,'Imprudence.sln') +
|
||||
' --config ' + self.build_type +
|
||||
' --startup imprudence-bin')
|
||||
print 'Running %r in %r' % (vstool_cmd, getcwd())
|
||||
self.run(vstool_cmd)
|
||||
print >> open(stamp, 'w'), self.build_type
|
||||
|
||||
def run_build(self, opts, targets):
|
||||
cwd = getcwd()
|
||||
build_cmd = self.get_build_cmd()
|
||||
|
||||
for d in self.build_dirs():
|
||||
try:
|
||||
os.chdir(d)
|
||||
if targets:
|
||||
for t in targets:
|
||||
cmd = '%s /project %s %s' % (build_cmd, t, ' '.join(opts))
|
||||
if build_cmd != "":
|
||||
for d in self.build_dirs():
|
||||
try:
|
||||
os.chdir(d)
|
||||
if targets:
|
||||
for t in targets:
|
||||
cmd = '%s /project %s %s' % (build_cmd, t, ' '.join(opts))
|
||||
print 'Running %r in %r' % (cmd, d)
|
||||
self.run(cmd)
|
||||
else:
|
||||
cmd = '%s %s' % (build_cmd, ' '.join(opts))
|
||||
print 'Running %r in %r' % (cmd, d)
|
||||
self.run(cmd)
|
||||
else:
|
||||
cmd = '%s %s' % (build_cmd, ' '.join(opts))
|
||||
print 'Running %r in %r' % (cmd, d)
|
||||
self.run(cmd)
|
||||
finally:
|
||||
os.chdir(cwd)
|
||||
|
||||
finally:
|
||||
os.chdir(cwd)
|
||||
|
||||
class CygwinSetup(WindowsSetup):
|
||||
def __init__(self):
|
||||
super(CygwinSetup, self).__init__()
|
||||
self.generator = 'vc80'
|
||||
self.generator = 'nmake'
|
||||
|
||||
def cmake_commandline(self, src_dir, build_dir, opts, simple):
|
||||
dos_dir = commands.getoutput("cygpath -w %s" % src_dir)
|
||||
@@ -692,11 +681,13 @@ class CygwinSetup(WindowsSetup):
|
||||
opts=quote(opts),
|
||||
standalone=self.standalone,
|
||||
unattended=self.unattended,
|
||||
project_name=self.project_name
|
||||
project_name=self.project_name,
|
||||
type=self.build_type
|
||||
)
|
||||
#if simple:
|
||||
# return 'cmake %(opts)s "%(dir)s"' % args
|
||||
return ('cmake -G "%(generator)s" '
|
||||
'-DCMAKE_BUILD_TYPE:STRING=%(type)s '
|
||||
'-DUNATTENDED:BOOl=%(unattended)s '
|
||||
'-DSTANDALONE:BOOL=%(standalone)s '
|
||||
'-DROOT_PROJECT_NAME:STRING=%(project_name)s '
|
||||
@@ -723,7 +714,7 @@ Options:
|
||||
-m32 | -m64 build architecture (32-bit or 64-bit)
|
||||
-N | --no-distcc disable use of distcc
|
||||
-G | --generator=NAME generator name
|
||||
Windows: VC80 (VS2005--default), VC71 (VS2003),
|
||||
Windows: NMake, VC80 (VS2005--default), VC71 (VS2003),
|
||||
VC90 (VS2008), or VC100 (VS2010)
|
||||
Mac OS X: Xcode (default), Unix Makefiles
|
||||
Linux: Unix Makefiles (default), KDevelop3
|
||||
@@ -806,7 +797,6 @@ For example: develop.py configure -DSERVER:BOOL=OFF"""
|
||||
for d in setup.build_dirs():
|
||||
if not os.path.exists(d):
|
||||
raise CommandError('run "develop.py cmake" first')
|
||||
setup.run_cmake()
|
||||
opts, targets = setup.parse_build_opts(args)
|
||||
setup.run_build(opts, targets)
|
||||
elif cmd == 'clean':
|
||||
|
||||
@@ -1447,9 +1447,12 @@ S32 LLSDBinaryFormatter::format(const LLSD& data, std::ostream& ostr, U32 option
|
||||
}
|
||||
|
||||
case LLSD::TypeUUID:
|
||||
{
|
||||
ostr.put('u');
|
||||
ostr.write((const char*)(&(data.asUUID().mData)), UUID_BYTES);
|
||||
U8 *value = data.asUUID().mData;
|
||||
ostr.write((const char*)(&value), UUID_BYTES);
|
||||
break;
|
||||
}
|
||||
|
||||
case LLSD::TypeString:
|
||||
ostr.put('s');
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
*
|
||||
* $LicenseInfo:firstyear=2006&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2006-2009, Linden Research, Inc.
|
||||
* Copyright (c) 2006-2010, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
@@ -14,13 +14,13 @@
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
|
||||
* online at http://secondlife.com/developers/opensource/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlifegrid.net/programs/open_source/licensing/flossexception
|
||||
* http://secondlife.com/developers/opensource/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
@@ -30,11 +30,12 @@
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*
|
||||
*/
|
||||
|
||||
#include "linden_common.h"
|
||||
|
||||
#include "llsdutil.h"
|
||||
#include "llsdutil_math.h"
|
||||
|
||||
#include "v3math.h"
|
||||
#include "v4math.h"
|
||||
@@ -165,9 +166,6 @@ LLSD ll_sd_from_color4(const LLColor4& c)
|
||||
LLColor4 ll_color4_from_sd(const LLSD& sd)
|
||||
{
|
||||
LLColor4 c;
|
||||
c.mV[0] = (F32)sd[0].asReal();
|
||||
c.mV[1] = (F32)sd[1].asReal();
|
||||
c.mV[2] = (F32)sd[2].asReal();
|
||||
c.mV[3] = (F32)sd[3].asReal();
|
||||
c.setValue(sd);
|
||||
return c;
|
||||
}
|
||||
|
||||
@@ -4437,14 +4437,7 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build)
|
||||
const std::vector<LLVector3>& profile = volume->getProfile().mProfile;
|
||||
S32 max_s = volume->getProfile().getTotal();
|
||||
S32 max_t = volume->getPath().mPath.size();
|
||||
|
||||
// S32 i;
|
||||
S32 num_vertices = 0, num_indices = 0;
|
||||
S32 grid_size = (profile.size()-1)/4;
|
||||
S32 quad_count = (grid_size * grid_size);
|
||||
|
||||
num_vertices = (grid_size+1)*(grid_size+1);
|
||||
num_indices = quad_count * 4;
|
||||
S32 grid_size = (profile.size() - 1) / 4;
|
||||
|
||||
LLVector3& min = mExtents[0];
|
||||
LLVector3& max = mExtents[1];
|
||||
|
||||
@@ -743,7 +743,8 @@ LLAssetRequest* LLHTTPAssetStorage::findNextRequest(LLAssetStorage::request_list
|
||||
request_list_t::iterator running_end = running.end();
|
||||
|
||||
request_list_t::iterator pending_iter = pending.begin();
|
||||
request_list_t::iterator pending_end = pending.end();
|
||||
// FIXME onefang - I assume this was being used to speed up the for(), but this is just a quick pass to get rid of warnings. Try to understand it later.
|
||||
//request_list_t::iterator pending_end = pending.end();
|
||||
// Loop over all pending requests until we miss finding it in the running list.
|
||||
for (; pending_iter != pending.end(); ++pending_iter)
|
||||
{
|
||||
|
||||
@@ -75,7 +75,7 @@ if (DARWIN)
|
||||
COMMAND mkdir
|
||||
ARGS
|
||||
-p
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/SLPlugin.app/Contents/Resources
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/SLPlugin.app/Contents/Resources
|
||||
)
|
||||
endif (DARWIN)
|
||||
|
||||
|
||||
@@ -40,16 +40,6 @@
|
||||
|
||||
LLMaterialTable LLMaterialTable::basic(1);
|
||||
|
||||
// Material UUIDs.
|
||||
LLUUID const LL_DEFAULT_STONE_UUID("87c5765b-aa26-43eb-b8c6-c09a1ca6208e");
|
||||
LLUUID const LL_DEFAULT_METAL_UUID("6f3c53e9-ba60-4010-8f3e-30f51a762476");
|
||||
LLUUID const LL_DEFAULT_GLASS_UUID("b4ba225c-373f-446d-9f7e-6cb7b5cf9b3d");
|
||||
LLUUID const LL_DEFAULT_WOOD_UUID("89556747-24cb-43ed-920b-47caed15465f");
|
||||
LLUUID const LL_DEFAULT_FLESH_UUID("80736669-e4b9-450e-8890-d5169f988a50");
|
||||
LLUUID const LL_DEFAULT_PLASTIC_UUID("304fcb4e-7d33-4339-ba80-76d3d22dc11a");
|
||||
LLUUID const LL_DEFAULT_RUBBER_UUID("9fae0bc5-666d-477e-9f70-84e8556ec867");
|
||||
LLUUID const LL_DEFAULT_LIGHT_UUID("00000000-0000-0000-0000-000000000000");
|
||||
|
||||
/*
|
||||
Old Havok 1 constants
|
||||
|
||||
|
||||
@@ -535,6 +535,8 @@ void LLFont::renderGlyph(const U32 glyph_index) const
|
||||
int error = FT_Load_Glyph(mFTFace, glyph_index, FT_LOAD_DEFAULT );
|
||||
llassert(!error);
|
||||
|
||||
// Work around the compiler warning about error not being used when llassert() is compiled out.
|
||||
error = error + 0;
|
||||
error = FT_Render_Glyph(mFTFace->glyph, gFontRenderMode);
|
||||
|
||||
mRenderGlyphCount++;
|
||||
|
||||
@@ -383,11 +383,10 @@ bool LLGLManager::initGL()
|
||||
if (mGLVendor.substr(0,4) == "ATI ")
|
||||
{
|
||||
mGLVendorShort = "ATI";
|
||||
BOOL mobile = FALSE;
|
||||
if (mGLRenderer.find("MOBILITY") != std::string::npos)
|
||||
{
|
||||
mobile = TRUE;
|
||||
}
|
||||
// This is not used anywhere.
|
||||
//BOOL mobile = FALSE;
|
||||
//if (mGLRenderer.find("MOBILITY") != std::string::npos)
|
||||
// mobile = TRUE;
|
||||
mIsATI = TRUE;
|
||||
|
||||
#if LL_WINDOWS && !LL_MESA_HEADLESS
|
||||
@@ -1014,8 +1013,8 @@ void assert_glerror()
|
||||
void clear_glerror()
|
||||
{
|
||||
// Create or update texture to be used with this data
|
||||
GLenum error;
|
||||
error = glGetError();
|
||||
//GLenum error;
|
||||
/*error =*/ glGetError();
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -711,7 +711,9 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips)
|
||||
{
|
||||
S32 bytes = w * h * mComponents;
|
||||
llassert(prev_mip_data);
|
||||
llassert(prev_mip_size == bytes*4);
|
||||
llassert(prev_mip_size == (bytes*4));
|
||||
// Work around llassert() being compiled out and prev_mip_size not otherwise being used.
|
||||
prev_mip_size = prev_mip_size + 0;
|
||||
U8* new_data = new U8[bytes];
|
||||
llassert_always(new_data);
|
||||
LLImageBase::generateMip(prev_mip_data, new_data, w, h, mComponents);
|
||||
|
||||
@@ -277,30 +277,14 @@ void LLFloater::initFloater(const std::string& title,
|
||||
mMinimized = FALSE;
|
||||
mExpandedRect.set(0,0,0,0);
|
||||
|
||||
S32 close_pad; // space to the right of close box
|
||||
S32 close_box_size; // For layout purposes, how big is the close box?
|
||||
if (close_btn)
|
||||
{
|
||||
close_box_size = LLFLOATER_CLOSE_BOX_SIZE;
|
||||
close_pad = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
close_box_size = 0;
|
||||
close_pad = 0;
|
||||
}
|
||||
|
||||
S32 minimize_box_size;
|
||||
S32 minimize_pad;
|
||||
if (minimizable && !drag_on_left)
|
||||
{
|
||||
minimize_box_size = LLFLOATER_CLOSE_BOX_SIZE;
|
||||
minimize_pad = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
minimize_box_size = 0;
|
||||
minimize_pad = 0;
|
||||
}
|
||||
|
||||
// Drag Handle
|
||||
|
||||
@@ -75,7 +75,6 @@ public:
|
||||
bool registerFunctor(const std::string& name, ResponseFunctor f)
|
||||
{
|
||||
bool retval = true;
|
||||
typename FunctorMap::iterator it = mMap.find(name);
|
||||
if (mMap.count(name) == 0)
|
||||
{
|
||||
mMap[name] = f;
|
||||
@@ -102,7 +101,6 @@ public:
|
||||
|
||||
FUNCTOR_TYPE getFunctor(const std::string& name)
|
||||
{
|
||||
typename FunctorMap::iterator it = mMap.find(name);
|
||||
if (mMap.count(name) != 0)
|
||||
{
|
||||
return mMap[name];
|
||||
|
||||
@@ -288,7 +288,6 @@ void LLKeywords::findSegments(std::vector<LLTextSegment *>* seg_list, const LLWS
|
||||
|
||||
const llwchar* base = wtext.c_str();
|
||||
const llwchar* cur = base;
|
||||
const llwchar* line = NULL;
|
||||
|
||||
while( *cur )
|
||||
{
|
||||
@@ -304,7 +303,6 @@ void LLKeywords::findSegments(std::vector<LLTextSegment *>* seg_list, const LLWS
|
||||
}
|
||||
|
||||
// Start of a new line
|
||||
line = cur;
|
||||
|
||||
// Skip white space
|
||||
while( *cur && isspace(*cur) && (*cur != '\n') )
|
||||
|
||||
@@ -3095,8 +3095,6 @@ void LLMenuGL::draw( void )
|
||||
LLUI::sConfigGroup->getS32("DropShadowFloater") );
|
||||
}
|
||||
|
||||
LLColor4 bg_color = mBackgroundColor;
|
||||
|
||||
if( mBgVisible )
|
||||
{
|
||||
gl_rect_2d( 0, getRect().getHeight(), getRect().getWidth(), 0, mBackgroundColor );
|
||||
|
||||
@@ -1078,7 +1078,6 @@ struct LLLayoutStack::LLEmbeddedPanel
|
||||
mVisibleAmt(1.f) // default to fully visible
|
||||
{
|
||||
LLResizeBar::Side side = (orientation == HORIZONTAL) ? LLResizeBar::RIGHT : LLResizeBar::BOTTOM;
|
||||
LLRect resize_bar_rect = panelp->getRect();
|
||||
|
||||
S32 min_dim;
|
||||
if (orientation == HORIZONTAL)
|
||||
|
||||
@@ -83,9 +83,6 @@ void LLProgressBar::draw()
|
||||
bar_bg_imagep->draw(getLocalRect(),
|
||||
background_color);
|
||||
|
||||
F32 alpha = 0.5f + 0.5f*0.5f*(1.f + (F32)sin(3.f*timer.getElapsedTimeF32()));
|
||||
LLColor4 bar_color = LLUI::sColorsGroup->getColor("LoginProgressBarFgColor");
|
||||
bar_color.mV[3] = alpha;
|
||||
LLRect progress_rect = getLocalRect();
|
||||
progress_rect.mRight = llround(getRect().getWidth() * (mPercentDone / 100.f));
|
||||
bar_fg_imagep->draw(progress_rect);
|
||||
|
||||
@@ -283,7 +283,6 @@ void LLSlider::draw()
|
||||
|
||||
F32 opacity = getEnabled() ? 1.f : 0.3f;
|
||||
LLColor4 center_color = (mThumbCenterColor % opacity);
|
||||
LLColor4 track_color = (mTrackColor % opacity);
|
||||
|
||||
// Track
|
||||
LLRect track_rect(mThumbImage->getWidth() / 2,
|
||||
|
||||
@@ -3077,7 +3077,6 @@ void LLTextEditor::drawSelectionBackground()
|
||||
S32 selection_right_x = mTextRect.mRight;
|
||||
S32 selection_right_y = mTextRect.mBottom;
|
||||
|
||||
BOOL selection_left_visible = FALSE;
|
||||
BOOL selection_right_visible = FALSE;
|
||||
|
||||
// Skip through the lines we aren't drawing.
|
||||
@@ -3085,7 +3084,6 @@ void LLTextEditor::drawSelectionBackground()
|
||||
|
||||
S32 left_line_num = cur_line;
|
||||
S32 num_lines = getLineCount();
|
||||
S32 right_line_num = num_lines - 1;
|
||||
|
||||
S32 line_start = -1;
|
||||
if (cur_line >= num_lines)
|
||||
@@ -3119,13 +3117,11 @@ void LLTextEditor::drawSelectionBackground()
|
||||
if( line_start <= selection_left && selection_left <= line_end )
|
||||
{
|
||||
left_line_num = cur_line;
|
||||
selection_left_visible = TRUE;
|
||||
selection_left_x = mTextRect.mLeft + mGLFont->getWidth(line, 0, selection_left - line_start, mAllowEmbeddedItems);
|
||||
selection_left_y = text_y;
|
||||
}
|
||||
if( line_start <= selection_right && selection_right <= line_end )
|
||||
{
|
||||
right_line_num = cur_line;
|
||||
selection_right_visible = TRUE;
|
||||
selection_right_x = mTextRect.mLeft + mGLFont->getWidth(line, 0, selection_right - line_start, mAllowEmbeddedItems);
|
||||
if (selection_right == line_end)
|
||||
|
||||
@@ -706,10 +706,12 @@ public:
|
||||
|
||||
// this avoids a MSVC bug where non-referenced static members are "optimized" away
|
||||
// even if their constructors have side effects
|
||||
// Then we avoid a compiler warning that dummy is never used. lol
|
||||
void reference()
|
||||
{
|
||||
S32 dummy;
|
||||
dummy = 0;
|
||||
dummy = dummy + 0;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -111,7 +111,9 @@ static const char* EatNonWhiteSpace(const char *str)
|
||||
int glh_init_extensions(const char *origReqExts)
|
||||
{
|
||||
// Length of requested extensions string
|
||||
/*
|
||||
unsigned reqExtsLen;
|
||||
*/
|
||||
char *reqExts;
|
||||
// Ptr for individual extensions within reqExts
|
||||
char *reqExt;
|
||||
@@ -153,8 +155,8 @@ int glh_init_extensions(const char *origReqExts)
|
||||
return TRUE;
|
||||
}
|
||||
reqExts = strdup(origReqExts);
|
||||
reqExtsLen = (S32)strlen(reqExts);
|
||||
/*
|
||||
reqExtsLen = (S32)strlen(reqExts);
|
||||
if (NULL == gGLHExts.mUnsupportedExts)
|
||||
{
|
||||
gGLHExts.mUnsupportedExts = (char*)malloc(reqExtsLen + 1);
|
||||
|
||||
@@ -2521,9 +2521,10 @@ std::vector<std::string> LLWindowSDL::getDynamicFallbackFontList()
|
||||
sortpat = FcNameParse((FcChar8*) sort_order.c_str());
|
||||
if (sortpat)
|
||||
{
|
||||
FcResult dummyResult;
|
||||
// Sort the list of system fonts from most-to-least-desirable.
|
||||
fs = FcFontSort(NULL, sortpat, elide_unicode_coverage,
|
||||
NULL, NULL);
|
||||
NULL, &dummyResult);
|
||||
FcPatternDestroy(sortpat);
|
||||
}
|
||||
|
||||
|
||||
@@ -103,7 +103,7 @@ if (WINDOWS)
|
||||
PROPERTIES COMPILE_FLAGS /DYY_NO_UNISTD_H)
|
||||
endif (WINDOWS)
|
||||
|
||||
if (WINDOWS)
|
||||
if (WINDOWS AND NOT CYGWIN)
|
||||
get_filename_component(M4_PATH ${M4} PATH)
|
||||
add_custom_command(
|
||||
OUTPUT
|
||||
@@ -118,7 +118,7 @@ if (WINDOWS)
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/indra.y
|
||||
)
|
||||
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/windows)
|
||||
else (WINDOWS)
|
||||
else (WINDOWS AND NOT CYGWIN)
|
||||
add_custom_command(
|
||||
OUTPUT
|
||||
${CMAKE_CURRENT_BINARY_DIR}/indra.y.cpp
|
||||
@@ -131,7 +131,7 @@ else (WINDOWS)
|
||||
DEPENDS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/indra.y
|
||||
)
|
||||
endif (WINDOWS)
|
||||
endif (WINDOWS AND NOT CYGWIN)
|
||||
|
||||
if (DARWIN)
|
||||
# Mac OS X 10.4 compatibility
|
||||
|
||||
@@ -53,9 +53,16 @@ void parse_string();
|
||||
#define ECHO do { } while (0)
|
||||
|
||||
#if defined(__cplusplus)
|
||||
extern "C" { int yylex( void ); }
|
||||
extern "C" { int yyparse( void ); }
|
||||
extern "C" { int yyerror(const char *fmt, ...); }
|
||||
extern "C" {
|
||||
#endif
|
||||
int yyerror(const char *fmt, ...);
|
||||
int yylex( void );
|
||||
// Windows defines this in indra.y.hpp, which is included above, and defines it differently.
|
||||
#ifndef LL_WINDOWS
|
||||
int yyparse( void );
|
||||
#endif
|
||||
#if defined(__cplusplus)
|
||||
}
|
||||
#endif
|
||||
|
||||
%}
|
||||
@@ -722,9 +729,6 @@ L?\"(\\.|[^\\"])*\" { parse_string(); count(); return(STRING_CONSTANT); }
|
||||
LLScriptAllocationManager *gAllocationManager;
|
||||
LLScriptScript *gScriptp;
|
||||
|
||||
// Prototype for the yacc parser entry point
|
||||
int yyparse(void);
|
||||
|
||||
int yyerror(const char *fmt, ...)
|
||||
{
|
||||
gErrorToText.writeError(yyout, gLine, gColumn, LSERROR_SYNTAX_ERROR);
|
||||
@@ -760,7 +764,13 @@ BOOL lscript_compile(const char* src_filename, const char* dst_filename,
|
||||
|
||||
yyrestart(yyin);
|
||||
|
||||
b_parse_ok = !yyparse();
|
||||
// TODO - Try to fix this, but for now, no compiling LSL for Windows in SL.
|
||||
// Actually, this seems to not actually be needed anymore?
|
||||
// I thought it was needed to support ancient pre Mono LSL scripts, which only work in SL anyway, but they still work fine. Perhaps SL fixed it server side?
|
||||
// If that's the case, we don't need any of this stuff.
|
||||
#ifndef LL_WINDOWS
|
||||
// b_parse_ok = !yyparse();
|
||||
#endif
|
||||
|
||||
if (b_parse_ok)
|
||||
{
|
||||
|
||||
@@ -809,16 +809,7 @@ void LLScriptExecute::runInstructions(BOOL b_print, const LLUUID &id,
|
||||
// is there a fault?
|
||||
// if yes, print out message and exit
|
||||
S32 value = getVersion();
|
||||
S32 major_version = 0;
|
||||
if (value == LSL2_VERSION1_END_NUMBER)
|
||||
{
|
||||
major_version = 1;
|
||||
}
|
||||
else if (value == LSL2_VERSION_NUMBER)
|
||||
{
|
||||
major_version = 2;
|
||||
}
|
||||
else
|
||||
if ((value != LSL2_VERSION1_END_NUMBER) && (value != LSL2_VERSION_NUMBER))
|
||||
{
|
||||
setFault(LSRF_VERSION_MISMATCH);
|
||||
}
|
||||
|
||||
@@ -150,7 +150,9 @@ void LLScriptLSOParse::printGlobals(LLFILE *fp)
|
||||
|
||||
// get offset to skip past name
|
||||
varoffset = global_v_offset;
|
||||
// FIXME: Not actually used, perhaps there's a skip function? Or perhaps we really do need to skip past a name as the above comment suggests?
|
||||
offset = bytestream2integer(mRawData, global_v_offset);
|
||||
offset = offset + 0;
|
||||
|
||||
// get typeexport
|
||||
type = *(mRawData + global_v_offset++);
|
||||
@@ -268,8 +270,6 @@ void LLScriptLSOParse::printGlobalFunctions(LLFILE *fp)
|
||||
fprintf(fp, "[Function #%d] [0x%X] %s\n", function_number, orig_function_offset, name);
|
||||
fprintf(fp, "\tReturn Type: %s\n", LSCRIPTTypeNames[type]);
|
||||
type = *(mRawData + function_offset++);
|
||||
S32 params;
|
||||
params = 0;
|
||||
S32 pcount = 0;
|
||||
while (type)
|
||||
{
|
||||
@@ -362,7 +362,9 @@ void LLScriptLSOParse::printStates(LLFILE *fp)
|
||||
if (event_handlers & LSCRIPTStateBitField[k])
|
||||
{
|
||||
temp_end = bytestream2integer(mRawData, read_ahead);
|
||||
// FIXME onefang: Dummy is not actually used, but perhaps this is here to stop a warning? We need to stop another warning now. Some sort of skip might be better.
|
||||
dummy = bytestream2integer(mRawData, read_ahead);
|
||||
dummy = dummy + 0;
|
||||
if ( (temp_end < opcode_end)
|
||||
&&(temp_end > event_offset))
|
||||
{
|
||||
|
||||
@@ -71,6 +71,6 @@ add_custom_command(
|
||||
-E
|
||||
copy_directory
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CrashReporter.nib
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mac-crash-logger.app/Contents/Resources/CrashReporter.nib
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/mac-crash-logger.app/Contents/Resources/CrashReporter.nib
|
||||
)
|
||||
|
||||
|
||||
@@ -74,6 +74,6 @@ add_custom_command(
|
||||
-E
|
||||
copy_directory
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/AutoUpdater.nib
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mac-updater.app/Contents/Resources/AutoUpdater.nib
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/mac-updater.app/Contents/Resources/AutoUpdater.nib
|
||||
)
|
||||
|
||||
|
||||
@@ -312,12 +312,9 @@ gst_slvideo_set_caps (GstBaseSink * bsink, GstCaps * caps)
|
||||
static gboolean
|
||||
gst_slvideo_start (GstBaseSink * bsink)
|
||||
{
|
||||
GstSLVideo *slvideo;
|
||||
gboolean ret = TRUE;
|
||||
|
||||
slvideo = GST_SLVIDEO(bsink);
|
||||
GST_SLVIDEO(bsink);
|
||||
|
||||
return ret;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean
|
||||
|
||||
@@ -112,8 +112,8 @@ if (DARWIN)
|
||||
# copy the webkit dylib to the build directory
|
||||
add_custom_command(
|
||||
TARGET media_plugin_webkit POST_BUILD
|
||||
# OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/libllqtwebkit.dylib
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/
|
||||
# OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/libllqtwebkit.dylib
|
||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/
|
||||
DEPENDS media_plugin_webkit ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib
|
||||
)
|
||||
|
||||
|
||||
@@ -92,7 +92,7 @@ set(viewer_SOURCE_FILES
|
||||
jcfloaterareasearch.cpp
|
||||
kokuastreamingaudio.cpp
|
||||
kowopenregionsettings.cpp
|
||||
lightshare.cpp
|
||||
llettherebelight.cpp
|
||||
llagent.cpp
|
||||
llagentaccess.cpp
|
||||
llagentdata.cpp
|
||||
@@ -274,6 +274,7 @@ set(viewer_SOURCE_FILES
|
||||
llmaniprotate.cpp
|
||||
llmanipscale.cpp
|
||||
llmaniptranslate.cpp
|
||||
llmediadataclient.cpp
|
||||
llmapresponders.cpp
|
||||
llmediaremotectrl.cpp
|
||||
llmemoryview.cpp
|
||||
@@ -506,6 +507,7 @@ set(viewer_SOURCE_FILES
|
||||
wlfloatermanager.cpp
|
||||
wlfloaterwindlightsend.cpp
|
||||
wlretrievesettings.cpp
|
||||
rcmoapradar.cpp
|
||||
)
|
||||
|
||||
set(VIEWER_BINARY_NAME "imprudence-bin" CACHE STRING
|
||||
@@ -529,7 +531,7 @@ set(viewer_HEADER_FILES
|
||||
CMakeLists.txt
|
||||
ViewerInstall.cmake
|
||||
aoremotectrl.h
|
||||
chatbar_as_cmdline.h
|
||||
chatbar_as_cmdline.h
|
||||
emeraldboobutils.h
|
||||
floaterao.h
|
||||
floaterbusy.h
|
||||
@@ -548,11 +550,11 @@ set(viewer_HEADER_FILES
|
||||
jcfloater_animation_list.h
|
||||
jcfloaterareasearch.h
|
||||
kokuastreamingaudio.h
|
||||
lightshare.h
|
||||
lggautocorrectfloater.h
|
||||
lggautocorrect.h
|
||||
lggdicdownload.h
|
||||
lgghunspell_wrapper.h
|
||||
llettherebelight.h
|
||||
lggautocorrectfloater.h
|
||||
lggautocorrect.h
|
||||
lggdicdownload.h
|
||||
lgghunspell_wrapper.h
|
||||
llagent.h
|
||||
llagentaccess.h
|
||||
llagentdata.h
|
||||
@@ -735,6 +737,7 @@ set(viewer_HEADER_FILES
|
||||
llmaniprotate.h
|
||||
llmanipscale.h
|
||||
llmaniptranslate.h
|
||||
llmediadataclient.h
|
||||
llmapresponders.h
|
||||
llmediaremotectrl.h
|
||||
llmemoryview.h
|
||||
@@ -978,6 +981,7 @@ set(viewer_HEADER_FILES
|
||||
wlfloatermanager.h
|
||||
wlfloaterwindlightsend.h
|
||||
wlretrievesettings.h
|
||||
rcmoapradar.h
|
||||
)
|
||||
|
||||
source_group("CMake Rules" FILES ViewerInstall.cmake)
|
||||
@@ -1197,19 +1201,15 @@ set(viewer_APPSETTINGS_FILES
|
||||
app_settings/cmd_line.xml
|
||||
app_settings/default_grids.xml
|
||||
app_settings/grass.xml
|
||||
app_settings/high_graphics.xml
|
||||
app_settings/keys.ini
|
||||
app_settings/keywords.ini
|
||||
app_settings/logcontrol.xml
|
||||
app_settings/low_graphics.xml
|
||||
app_settings/mid_graphics.xml
|
||||
app_settings/settings.xml
|
||||
app_settings/settings_crash_behavior.xml
|
||||
app_settings/settings_files.xml
|
||||
app_settings/settings_per_account.xml
|
||||
app_settings/std_bump.ini
|
||||
app_settings/trees.xml
|
||||
app_settings/ultra_graphics.xml
|
||||
app_settings/viewerart.xml
|
||||
${CMAKE_SOURCE_DIR}/../etc/message.xml
|
||||
${CMAKE_SOURCE_DIR}/../scripts/messages/message_template.msg
|
||||
@@ -1319,7 +1319,7 @@ if (WINDOWS)
|
||||
|
||||
# sets the 'working directory' for debugging from visual studio.
|
||||
if (NOT UNATTENDED)
|
||||
if (NOT self.using_express)
|
||||
if (USE_VSTOOL)
|
||||
add_custom_command(
|
||||
TARGET ${VIEWER_BINARY_NAME} PRE_BUILD
|
||||
COMMAND ${CMAKE_SOURCE_DIR}/tools/vstool/vstool.exe
|
||||
@@ -1331,7 +1331,7 @@ if (WINDOWS)
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
COMMENT "Setting the ${VIEWER_BINARY_NAME} working directory for debugging."
|
||||
)
|
||||
endif (NOT self.using_express)
|
||||
endif (USE_VSTOOL)
|
||||
endif (NOT UNATTENDED)
|
||||
|
||||
add_custom_command(
|
||||
@@ -1341,7 +1341,7 @@ if (WINDOWS)
|
||||
-E
|
||||
copy_if_different
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../scripts/messages/message_template.msg
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message_template.msg
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/app_settings/message_template.msg
|
||||
COMMENT "Copying message_template.msg to the runtime folder."
|
||||
)
|
||||
|
||||
@@ -1352,7 +1352,7 @@ if (WINDOWS)
|
||||
-E
|
||||
copy_if_different
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../../etc/message.xml
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings/message.xml
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/app_settings/message.xml
|
||||
COMMENT "Copying message.xml to the runtime folder."
|
||||
)
|
||||
|
||||
@@ -1363,11 +1363,11 @@ if (WINDOWS)
|
||||
endif (EXISTS ${CMAKE_SOURCE_DIR}/copy_win_scripts)
|
||||
|
||||
add_custom_command(
|
||||
OUTPUT ${CMAKE_CFG_INTDIR}/touched.bat
|
||||
OUTPUT ${VIEWER_CFG_INTDIR}/touched.bat
|
||||
COMMAND ${PYTHON_EXECUTABLE}
|
||||
ARGS
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
|
||||
--configuration=${CMAKE_CFG_INTDIR}
|
||||
--configuration=${VIEWER_CFG_INTDIR}
|
||||
--channel=${VIEWER_CHANNEL}
|
||||
--login_channel=${VIEWER_LOGIN_CHANNEL}
|
||||
--standalone=${STANDALONE}
|
||||
@@ -1376,15 +1376,15 @@ if (WINDOWS)
|
||||
--source=${CMAKE_CURRENT_SOURCE_DIR}
|
||||
--artwork=${ARTWORK_DIR}
|
||||
--build=${CMAKE_CURRENT_BINARY_DIR}
|
||||
--dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/package
|
||||
--touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat
|
||||
--dest=${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/package
|
||||
--touch=${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/touched.bat
|
||||
DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
|
||||
)
|
||||
|
||||
add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit media_plugin_gstreamer010)
|
||||
|
||||
if (PACKAGE)
|
||||
add_custom_target(package ALL DEPENDS ${CMAKE_CFG_INTDIR}/touched.bat)
|
||||
add_custom_target(package ALL DEPENDS ${VIEWER_CFG_INTDIR}/touched.bat)
|
||||
add_dependencies(package windows-updater windows-crash-logger)
|
||||
endif (PACKAGE)
|
||||
endif (WINDOWS)
|
||||
@@ -1519,8 +1519,8 @@ if (DARWIN)
|
||||
--artwork=${ARTWORK_DIR}
|
||||
--build=${CMAKE_CURRENT_BINARY_DIR}
|
||||
--buildtype=${CMAKE_BUILD_TYPE}
|
||||
--configuration=${CMAKE_CFG_INTDIR}
|
||||
--dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app
|
||||
--configuration=${VIEWER_CFG_INTDIR}
|
||||
--dest=${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/${product}.app
|
||||
--grid=${GRID}
|
||||
--source=${CMAKE_CURRENT_SOURCE_DIR}
|
||||
--standalone=${STANDALONE}
|
||||
@@ -1551,8 +1551,8 @@ if (WINDOWS)
|
||||
-E
|
||||
copy_if_different
|
||||
${BUILT_LLCOMMON}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
|
||||
COMMENT "Copying llcommon.dll to the runtime folder."
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}
|
||||
COMMENT "Copying llcommon.dll to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}."
|
||||
)
|
||||
|
||||
get_target_property(BUILT_SLPLUGIN SLPlugin LOCATION)
|
||||
@@ -1563,8 +1563,8 @@ if (WINDOWS)
|
||||
-E
|
||||
copy_if_different
|
||||
${BUILT_SLPLUGIN}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
|
||||
COMMENT "Copying SLPlugin executable to the runtime folder."
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}
|
||||
COMMENT "Copying SLPlugin executable to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}."
|
||||
)
|
||||
|
||||
get_target_property(BUILT_WEBKIT_PLUGIN media_plugin_webkit LOCATION)
|
||||
@@ -1575,8 +1575,8 @@ if (WINDOWS)
|
||||
-E
|
||||
copy_if_different
|
||||
${BUILT_WEBKIT_PLUGIN}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin
|
||||
COMMENT "Copying WebKit Plugin to the runtime folder."
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin
|
||||
COMMENT "Copying WebKit Plugin to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin."
|
||||
)
|
||||
|
||||
get_target_property(BUILT_GSTREAMER_PLUGIN media_plugin_gstreamer010 LOCATION)
|
||||
@@ -1587,8 +1587,8 @@ if (WINDOWS)
|
||||
-E
|
||||
copy_if_different
|
||||
${BUILT_GSTREAMER_PLUGIN}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin
|
||||
COMMENT "Copying Gstreamer Plugin to the runtime folder."
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin
|
||||
COMMENT "Copying Gstreamer Plugin to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin."
|
||||
)
|
||||
|
||||
get_target_property(BUILT_QUICKTIME_PLUGIN media_plugin_quicktime LOCATION)
|
||||
@@ -1599,13 +1599,13 @@ if (WINDOWS)
|
||||
-E
|
||||
copy_if_different
|
||||
${BUILT_QUICKTIME_PLUGIN}
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin
|
||||
COMMENT "Copying Quicktime Plugin to the runtime folder."
|
||||
${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin
|
||||
COMMENT "Copying Quicktime Plugin to the runtime folder ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin."
|
||||
)
|
||||
|
||||
# Copying the mime_types.xml file to app_settings
|
||||
set(mime_types_source "${CMAKE_SOURCE_DIR}/newview/skins/default/xui/en-us")
|
||||
set(mime_types_dest "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/app_settings")
|
||||
set(mime_types_dest "${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/app_settings")
|
||||
add_custom_command(
|
||||
TARGET ${VIEWER_BINARY_NAME} POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
@@ -1622,7 +1622,7 @@ endif (WINDOWS)
|
||||
if (DARWIN)
|
||||
# Don't do this here -- it's taken care of by viewer_manifest.py
|
||||
# add_custom_command(TARGET ${VIEWER_BINARY_NAME} POST_BUILD
|
||||
# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/llplugin/
|
||||
# COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib ${CMAKE_CURRENT_BINARY_DIR}/${VIEWER_CFG_INTDIR}/llplugin/
|
||||
# DEPENDS ${CMAKE_SOURCE_DIR}/../libraries/universal-darwin/lib_release/libllqtwebkit.dylib
|
||||
# )
|
||||
endif (DARWIN)
|
||||
|
||||
@@ -1,199 +1,285 @@
|
||||
<llsd>
|
||||
<array>
|
||||
<map>
|
||||
<key>default_grids_version</key><string>38</string>
|
||||
</map>
|
||||
|
||||
<!-- Second Life -->
|
||||
<map>
|
||||
<key>gridnick</key><string>secondlife</string>
|
||||
<key>gridname</key><string>Second Life</string>
|
||||
<key>platform</key><string>SecondLife</string>
|
||||
<key>loginuri</key><string>https://login.agni.lindenlab.com/cgi-bin/login.cgi</string>
|
||||
<key>loginpage</key><string>http://imprudenceviewer.org/app/splash/</string>
|
||||
<key>helperuri</key><string>https://secondlife.com/helpers/</string>
|
||||
<key>website</key><string>http://secondlife.com/</string>
|
||||
<key>support</key><string>http://secondlife.com/support/</string>
|
||||
<key>register</key><string>http://secondlife.com/registration/</string>
|
||||
<key>password</key><string>http://secondlife.com/account/request.php</string>
|
||||
<key>version</key><string>2</string>
|
||||
</map>
|
||||
|
||||
<!-- Second Life Beta -->
|
||||
<map>
|
||||
<key>gridnick</key><string>secondlifebeta</string>
|
||||
<key>gridname</key><string>Second Life Beta Grid</string>
|
||||
<key>platform</key><string>SecondLife</string>
|
||||
<key>loginuri</key><string>https://login.aditi.lindenlab.com/cgi-bin/login.cgi</string>
|
||||
<key>loginpage</key><string>http://imprudenceviewer.org/app/splash/</string>
|
||||
<key>helperuri</key><string>http://aditi-secondlife.webdev.lindenlab.com/helpers/</string>
|
||||
<key>website</key><string>http://secondlife.com/</string>
|
||||
<key>support</key><string>http://secondlife.com/support/</string>
|
||||
<key>register</key><string>http://secondlife.com/registration/</string>
|
||||
<key>password</key><string>http://secondlife.com/account/request.php</string>
|
||||
<key>version</key><string>3</string>
|
||||
</map>
|
||||
|
||||
<!-- Local Host -->
|
||||
<map>
|
||||
<key>gridnick</key><string>localhost</string>
|
||||
<key>gridname</key><string>Local Host</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>loginuri</key><string>http://127.0.0.1:9000/</string>
|
||||
<key>loginpage</key><string />
|
||||
<key>helperuri</key><string>http://127.0.0.1:9000/</string>
|
||||
<key>version</key><string>1</string>
|
||||
</map>
|
||||
|
||||
<!-- OSGrid -->
|
||||
<map>
|
||||
<key>gridnick</key><string>osgrid</string>
|
||||
<key>gridname</key><string>OSGrid</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>loginuri</key><string>http://login.osgrid.org/</string>
|
||||
<key>loginpage</key><string>http://www.osgrid.org/splash/</string>
|
||||
<key>helperuri</key><string>http://helper.osgrid.org/</string>
|
||||
<key>website</key><string>http://www.osgrid.org/</string>
|
||||
<key>support</key><string>http://www.osgrid.org/</string>
|
||||
<key>register</key>
|
||||
<string>http://www.osgrid.org/index.php/auth/register</string>
|
||||
<key>password</key>
|
||||
<string>http://www.osgrid.org/index.php/auth/forgot_password</string>
|
||||
<key>version</key><string>3</string>
|
||||
</map>
|
||||
|
||||
<!-- Your Alternative Life -->
|
||||
<map>
|
||||
<key>gridnick</key><string>youralternativelife</string>
|
||||
<key>gridname</key><string>Your Alternative Life</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>loginuri</key><string>http://grid01.from-ne.com:8002/</string>
|
||||
<key>loginpage</key><string>http://grid01.from-ne.com/tios/loginscreen3.php</string>
|
||||
<key>helperuri</key><string>http://grid01.from-ne.com/tios/services/</string>
|
||||
<key>website</key><string>http://www.youralternativelife.com</string>
|
||||
<key>support</key><string>http://www.youralternativelife.com</string>
|
||||
<key>register</key><string>http://www.youralternativelife.com</string>
|
||||
<key>password</key><string>http://www.youralternativelife.com</string>
|
||||
<key>version</key><string>0</string>
|
||||
|
||||
</map>
|
||||
|
||||
<!-- The New World Grid -->
|
||||
<map>
|
||||
<key>gridnick</key><string>thenewworldgrid</string>
|
||||
<key>gridname</key><string>The New World Grid</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>loginuri</key><string>http://grid.newworldgrid.com:8002/</string>
|
||||
<key>loginpage</key><string>http://account.newworldgrid.com/loginscreen.php</string>
|
||||
<key>helperuri</key><string>http://account.newworldgrid.com/</string>
|
||||
<key>website</key><string>http://www.newworldgrid.com/</string>
|
||||
<key>support</key><string>http://www.newworldgrid.com/</string>
|
||||
<key>register</key><string>http://www.newworldgrid.com/register</string>
|
||||
<key>password</key><string>http://account.newworldgrid.com/</string>
|
||||
<key>version</key><string>0</string>
|
||||
</map>
|
||||
|
||||
<!-- ReactionGrid -->
|
||||
<map>
|
||||
<key>gridnick</key><string>reactiongrid</string>
|
||||
<key>gridname</key><string>ReactionGrid</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>loginuri</key><string>http://reactiongrid.com:8008/</string>
|
||||
<key>loginpage</key><string>http://gsquared.info/portal</string>
|
||||
<key>website</key><string>http://reactiongrid.com/Default.aspx</string>
|
||||
<key>support</key><string>http://reactiongrid.com/Support.aspx</string>
|
||||
<key>register</key><string>http://reactiongrid.com/Register.aspx</string>
|
||||
<key>password</key><string>http://reactiongrid.com/Support/ResetPassword.aspx</string>
|
||||
<key>version</key><string>0</string>
|
||||
</map>
|
||||
|
||||
<!-- Craft (offspring of Cyberlandia) -->
|
||||
<map>
|
||||
<key>gridnick</key><string>craft</string>
|
||||
<key>gridname</key><string>Craft</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>loginuri</key><string>http://craft-world.org:8002/</string>
|
||||
<key>loginpage</key><string>http://www.craft-world.org/loginscreen.php</string>
|
||||
<key>helperuri</key><string>http://webapp.craft-world.org/</string>
|
||||
<key>website</key><string>http://www.craft-world.org/</string>
|
||||
<key>register</key><string>http://craft-world.org:8002/wifi/user/account/</string>
|
||||
<key>password</key><string>http://craft-world.org:8002/wifi/forgotpassword</string>
|
||||
<key>version</key><string>0</string>
|
||||
</map>
|
||||
|
||||
<!-- Role Play Worlds -->
|
||||
<map>
|
||||
<key>gridnick</key><string>roleplayworlds</string>
|
||||
<key>gridname</key><string>Role Play Worlds</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>loginuri</key><string>http://grid.roleplayworlds.net:8002/</string>
|
||||
<key>loginpage</key><string>http://roleplayworlds.net/loginscreen</string>
|
||||
<key>helperuri</key><string>http://grid.roleplayworlds.net/</string>
|
||||
<key>website</key><string>http://roleplayworlds.net/</string>
|
||||
<key>support</key><string>http://roleplayworlds.net/help</string>
|
||||
<key>register</key><string>http://roleplayworlds.net/register</string>
|
||||
<key>password</key><string>http://roleplayworlds.net/password</string>
|
||||
<key>version</key><string>1</string>
|
||||
</map>
|
||||
|
||||
<!-- GiantGrid -->
|
||||
<map>
|
||||
<key>gridnick</key><string>giantgrid</string>
|
||||
<key>gridname</key><string>GiantGrid</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>loginuri</key><string>http://giantgrid.no-ip.biz:8002/</string>
|
||||
<key>loginpage</key><string>http://www.giantgrid.nl</string>
|
||||
<key>helperuri</key><string>http://giantgrid.no-ip.biz/XoopCube/html/modules/xoopensim/helper/</string>
|
||||
<key>website</key><string>http://www.giantgrid.nl</string>
|
||||
<key>register</key><string>http://giantgrid.no-ip.biz:8002/wifi/user/account/</string>
|
||||
<key>password</key><string>http://giantgrid.no-ip.biz:8002/wifi/forgotpassword</string>
|
||||
<key>support</key><string>http://gianttest.no-ip.biz/ticket/</string>
|
||||
<key>version</key><string>1</string>
|
||||
<key>default_grids_version</key><string>39</string>
|
||||
</map>
|
||||
|
||||
<!-- 3rd Rock Grid -->
|
||||
<map>
|
||||
<key>gridnick</key><string>3rdrock</string>
|
||||
<key>gridname</key><string>3rd Rock Grid</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>loginuri</key><string>http://grid.3rdrockgrid.com:8002/</string>
|
||||
<key>loginpage</key><string>http://3rdrockgrid.com/startpage.php</string>
|
||||
<key>helperuri</key><string>http://grid.3rdrockgrid.com/money/</string>
|
||||
<key>website</key><string>http://3rdrockgrid.com/</string>
|
||||
<key>register</key><string>http://3rdrockgrid.com/</string>
|
||||
<key>password</key><string>http://3rdrockgrid.com/</string>
|
||||
<key>support</key><string>http://3rdrockgrid.com/</string>
|
||||
<key>version</key><string>1</string>
|
||||
<key>gridname</key><string>3rd Rock Grid</string>
|
||||
<key>gridnick</key><string>3rdRock</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>about</key><string>http://3rdrockgrid.com/</string>
|
||||
<key>help</key><string>http://3rdrockgrid.com/</string>
|
||||
<key>helperuri</key><string>http://grid.3rdrockgrid.com/3rg_money/</string>
|
||||
<key>loginuri</key><string>http://grid.3rdrockgrid.com:8002/</string>
|
||||
<key>loginpage</key><string>http://3rdrockgrid.com/startpage.php</string>
|
||||
<key>website</key><string>http://3rdrockgrid.com/</string>
|
||||
<key>register</key><string>http://3rdrockgrid.com/</string>
|
||||
<key>password</key><string>http://3rdrockgrid.com/</string>
|
||||
<key>support</key><string>http://3rdrockgrid.com/</string>
|
||||
<key>version</key><string>1</string>
|
||||
</map>
|
||||
|
||||
<!-- Avination -->
|
||||
<map>
|
||||
<key>gridname</key><string>Avination</string>
|
||||
<key>gridnick</key><string>Avination</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>about</key><string>http://login.avination.net</string>
|
||||
<key>helperuri</key><string>https://secure.3dhosting.de/</string>
|
||||
<key>loginpage</key><string>https://www.avination.com/welcome.php</string>
|
||||
<key>loginuri</key><string>https://login.avination.com</string>
|
||||
<key>name</key><string>login.avination.net</string>
|
||||
<key>password</key><string>https://www.avination.com/pwrecover.php</string>
|
||||
<key>register</key><string>https://www.avination.com/join.php</string>
|
||||
</map>
|
||||
|
||||
<!-- Craft (offspring of Cyberlandia) -->
|
||||
<map>
|
||||
<key>gridname</key><string>Craft - The Friendly World</string>
|
||||
<key>gridnick</key><string>Craft</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>about</key><string>http://www.craft-world.org/</string>
|
||||
<key>loginuri</key><string>http://craft-world.org:8002/</string>
|
||||
<key>loginpage</key><string>http://www.craft-world.org/loginscreen.php</string>
|
||||
<key>helperuri</key><string>http://webapp.craft-world.org/economy/</string>
|
||||
<key>website</key><string>http://www.craft-world.org/</string>
|
||||
<key>register</key><string>http://craft-world.org:8002/wifi/user/account/</string>
|
||||
<key>password</key><string>http://craft-world.org:8002/wifi/forgotpassword</string>
|
||||
<key>version</key><string>0</string>
|
||||
</map>
|
||||
|
||||
<!-- FrancoGrid -->
|
||||
<map>
|
||||
<key>gridname</key><string>Metavers Francophone FrancoGrid</string>
|
||||
<key>gridnick</key><string>francogrid</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>about</key><string>http://francogrid.org/</string>
|
||||
<key>help</key><string>http://francogrid.org/aide</string>
|
||||
<key>helperuri</key><string>http://helper.main.francogrid.org/</string>
|
||||
<key>loginpage</key><string>http://viewer.francogrid.org/</string>
|
||||
<key>loginuri</key><string>http://login.francogrid.org/</string>
|
||||
<key>name</key><string>login.francogrid.org</string>
|
||||
<key>password</key><string>http://francogrid.org/user/password</string>
|
||||
<key>register</key><string>http://francogrid.org/user/register</string>
|
||||
</map>
|
||||
|
||||
<!-- GiantGrid -->
|
||||
<map>
|
||||
<key>gridname</key><string>GiantGrid</string>
|
||||
<key>gridnick</key><string>GiantGrid</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>loginuri</key><string>http://giantgrid.no-ip.biz:8002/</string>
|
||||
<key>loginpage</key><string>http://www.giantgrid.nl</string>
|
||||
<key>helperuri</key><string>http://giantgrid.no-ip.biz/XoopCube/html/modules/xoopensim/helper/</string>
|
||||
<key>website</key><string>http://www.giantgrid.nl</string>
|
||||
<key>register</key><string>http://giantgrid.no-ip.biz:8002/wifi/user/account/</string>
|
||||
<key>password</key><string>http://giantgrid.no-ip.biz:8002/wifi/forgotpassword</string>
|
||||
<key>support</key><string>http://gianttest.no-ip.biz/ticket/</string>
|
||||
<key>version</key><string>1</string>
|
||||
</map>
|
||||
|
||||
<!-- InWorldz -->
|
||||
<map>
|
||||
<key>gridname</key> <string>InWorldz</string>
|
||||
<key>gridnick</key> <string>inworldz</string>
|
||||
<key>platform</key> <string>OpenSim</string>
|
||||
<key>loginuri</key> <string>http://inworldz.com:8002/</string>
|
||||
<key>loginpage</key> <string>http://inworldz.com/loginscreen.php</string>
|
||||
<key>helperuri</key> <string>http://inworldz.com/</string>
|
||||
<key>password</key> <string>http://inworldz.com/loginerror.php?error=2</string>
|
||||
<key>register</key> <string>http://inworldz.com/register.php</string>
|
||||
<key>support</key> <string>http://inworldz.com/support.php</string>
|
||||
<key>website</key> <string>http://inworldz.com/</string>
|
||||
<key>version</key> <string>2</string>
|
||||
</map>
|
||||
<key>gridname</key><string>InWorldz</string>
|
||||
<key>gridnick</key><string>InWorldz</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>about</key><string>http://inworldz.com/</string>
|
||||
<key>help</key><string>http://inworldz.com/faq.php</string>
|
||||
<key>loginuri</key><string>http://inworldz.com:8002/</string>
|
||||
<key>loginpage</key><string>http://inworldz.com/loginscreen.php</string>
|
||||
<key>helperuri</key><string>http://inworldz.com/</string>
|
||||
<key>password</key><string>http://inworldz.com/</string>
|
||||
<key>register</key><string>http://inworldz.com/register.php</string>
|
||||
<key>support</key><string>http://inworldz.com/support.php</string>
|
||||
<key>website</key><string>http://inworldz.com/</string>
|
||||
<key>version</key><string>2</string>
|
||||
</map>
|
||||
|
||||
<!-- Island Oasis -->
|
||||
<map>
|
||||
<key>gridname</key><string>Island Oasis</string>
|
||||
<key>gridnick</key><string>IslandOasis</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>about</key><string>http://www.islandoasis.biz/GridStats.aspx</string>
|
||||
<key>help</key><string>http://www.islandoasis.biz/Support.aspx</string>
|
||||
<key>helperuri</key><string>http://islandoasisgrid.biz:8020/OsCurrency/</string>
|
||||
<key>loginpage</key><string>http://www.islandoasis.biz/welcome.aspx</string>
|
||||
<key>loginuri</key><string>http://islandoasisgrid.biz:8002/</string>
|
||||
<key>name</key><string>islandoasisgrid.biz:8002</string>
|
||||
<key>password</key><string>http://www.islandoasis.biz/Login.aspx</string>
|
||||
<key>register</key><string>http://www.islandoasis.biz/verification.aspx</string>
|
||||
</map>
|
||||
|
||||
<!-- Local Host -->
|
||||
<map>
|
||||
<key>gridname</key><string>Localhost</string>
|
||||
<key>gridnick</key><string>LocalHost</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>loginuri</key><string>http://127.0.0.1:9000/</string>
|
||||
<key>loginpage</key><string />
|
||||
<key>helperuri</key><string>http://127.0.0.1:9000/</string>
|
||||
<key>version</key><string>1</string>
|
||||
</map>
|
||||
|
||||
<!-- local Sim-on-a-stick -->
|
||||
<map>
|
||||
<key>gridname</key><string>Sim-on-a-Stick</string>
|
||||
<key>gridnick</key><string>SimOnAStick</string>
|
||||
<key>loginpage</key><string>http://127.0.0.1:9100/wifi/welcome.html</string>
|
||||
<key>loginuri</key><string>http://localhost:9100</string>
|
||||
</map>
|
||||
|
||||
<!-- Metropolis Metaversum -->
|
||||
<map>
|
||||
<key>gridname</key><string>Metropolis Metaversum</string>
|
||||
<key>gridnick</key><string>Metropolis</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>about</key><string>http://www.hypergrid.org/metropolis/wiki</string>
|
||||
<key>help</key><string>http://metropolis.hypergrid.org</string>
|
||||
<key>helperuri</key><string>http://metropolis.hypergrid.org/currency/helper/</string>
|
||||
<key>loginpage</key><string>http://metropolis.hypergrid.org</string>
|
||||
<key>loginuri</key><string>http://hypergrid.org:8002/</string>
|
||||
<key>name</key><string>hypergrid.org:8002</string>
|
||||
<key>password</key><string>http://metropolis.hypergrid.org/oswi.php</string>
|
||||
<key>register</key><string>http://www.hypergrid.org/metropolis/metro_rg.php</string>
|
||||
</map>
|
||||
|
||||
<!-- New World Grid -->
|
||||
<map>
|
||||
<key>gridname</key><string>New World Grid</string>
|
||||
<key>gridnick</key><string>newworldgrid</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>loginuri</key><string>http://3d.newworldgrid.com:8002/</string>
|
||||
<key>loginpage</key><string>http://www.newworldgrid.com/loginpage/</string>
|
||||
<key>helperuri</key><string>http://3d.newworldgrid.com/services/helper/</string>
|
||||
<key>website</key><string>http://www.newworldgrid.com/</string>
|
||||
<key>support</key><string>http://www.newworldgrid.com/contact/</string>
|
||||
<key>register</key><string>http://www.newworldgrid.com/virreacentral/redirect.php?page=register</string>
|
||||
<key>password</key><string>http://www.newworldgrid.com/virreacentral/redirect.php?page=login</string>
|
||||
<key>version</key><string>0</string>
|
||||
</map>
|
||||
|
||||
<!-- OSGrid -->
|
||||
<map>
|
||||
<key>gridname</key><string>OSGrid</string>
|
||||
<key>gridnick</key><string>OSGrid</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>about</key><string>http://www.osgrid.org/</string>
|
||||
<key>help</key><string>http://www.osgrid.org/</string>
|
||||
<key>loginuri</key><string>http://login.osgrid.org/</string>
|
||||
<key>loginpage</key><string>http://www.osgrid.org/splash/</string>
|
||||
<key>helperuri</key><string>http://helper.osgrid.org/</string>
|
||||
<key>website</key><string>http://www.osgrid.org/</string>
|
||||
<key>support</key><string>http://www.osgrid.org/</string>
|
||||
<key>register</key><string>http://www.osgrid.org/</string>
|
||||
<key>password</key><string>http://www.osgrid.org/</string>
|
||||
<key>version</key><string>3</string>
|
||||
</map>
|
||||
|
||||
<!-- ReactionGrid -->
|
||||
<map>
|
||||
<key>gridname</key><string>ReactionGrid</string>
|
||||
<key>gridnick</key><string>ReactionGrid</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>about</key><string>http://reactiongrid.com/Default.aspx</string>
|
||||
<key>help</key><string>http://reactiongrid.com/Support.aspx</string>
|
||||
<key>loginuri</key><string>http://reactiongrid.com:8008/</string>
|
||||
<key>loginpage</key><string>http://gsquared.info/portal</string>
|
||||
<key>helperuri</key><string>http://reactiongrid.com:9000/</string>
|
||||
<key>website</key><string>http://reactiongrid.com/Default.aspx</string>
|
||||
<key>support</key><string>http://reactiongrid.com/Support.aspx</string>
|
||||
<key>register</key><string>http://reactiongrid.com/Register.aspx</string>
|
||||
<key>password</key><string>http://www.reactiongrid.com/Support/PasswordReset.aspx</string>
|
||||
<key>version</key><string>0</string>
|
||||
</map>
|
||||
|
||||
<!-- ScienceSim -->
|
||||
<map>
|
||||
<key>gridname</key> <string>IEEE/ACM ScienceSim Virtual World</string>
|
||||
<key>gridnick</key> <string>sciencesim</string>
|
||||
<key>platform</key> <string>OpenSim</string>
|
||||
<key>loginuri</key> <string>http://grid.sciencesim.com/</string>
|
||||
<key>loginpage</key> <string>http://island.sciencesim.com/scisim/loginscreen.php</string>
|
||||
<key>helperuri</key> <string></string>
|
||||
<key>password</key> <string>http://island.sciencesim.com/scisim</string>
|
||||
<key>register</key> <string>http://island.sciencesim.com/scisim</string>
|
||||
<key>support</key> <string>http://island.sciencesim.com/wiki</string>
|
||||
<key>website</key> <string>http://island.sciencesim.com/about/</string>
|
||||
<key>version</key> <string>0</string>
|
||||
<key>gridname</key><string>IEEE/ACM ScienceSim Virtual World</string>
|
||||
<key>gridnick</key><string>ScienceSim</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>loginuri</key><string>http://grid.sciencesim.com/</string>
|
||||
<key>loginpage</key><string>http://island.sciencesim.com/scisim/loginscreen.php</string>
|
||||
<key>helperuri</key><string></string>
|
||||
<key>password</key><string>http://island.sciencesim.com/scisim</string>
|
||||
<key>register</key><string>http://island.sciencesim.com/scisim</string>
|
||||
<key>support</key><string>http://island.sciencesim.com/wiki</string>
|
||||
<key>website</key><string>http://island.sciencesim.com/about/</string>
|
||||
<key>version</key><string>0</string>
|
||||
</map>
|
||||
|
||||
<!-- Second Life -->
|
||||
<map>
|
||||
<key>gridname</key><string>Second Life</string>
|
||||
<key>gridnick</key><string>SL</string>
|
||||
<key>platform</key><string>SecondLife</string>
|
||||
<key>loginuri</key><string>https://login.agni.lindenlab.com/cgi-bin/login.cgi</string>
|
||||
<key>loginpage</key><string>http://viewer-login.agni.lindenlab.com/</string>
|
||||
<key>helperuri</key><string>https://secondlife.com/helpers/</string>
|
||||
<key>website</key><string>http://secondlife.com/</string>
|
||||
<key>support</key><string>http://secondlife.com/support/</string>
|
||||
<key>register</key><string>http://secondlife.com/registration/</string>
|
||||
<key>password</key><string>http://secondlife.com/account/request.php</string>
|
||||
<key>version</key><string>2</string>
|
||||
</map>
|
||||
|
||||
<!-- Second Life Beta -->
|
||||
<map>
|
||||
<key>gridname</key><string>Second Life Beta Grid</string>
|
||||
<key>gridnick</key><string>SLBeta</string>
|
||||
<key>platform</key><string>SecondLife</string>
|
||||
<key>loginuri</key><string>https://login.aditi.lindenlab.com/cgi-bin/login.cgi</string>
|
||||
<key>loginpage</key><string>http://viewer-login.agni.lindenlab.com</string>
|
||||
<key>helperuri</key><string>http://aditi-secondlife.webdev.lindenlab.com/helpers/</string>
|
||||
<key>website</key><string>http://secondlife.com/</string>
|
||||
<key>support</key><string>http://secondlife.com/support/</string>
|
||||
<key>register</key><string>http://secondlife.com/registration/</string>
|
||||
<key>password</key><string>http://secondlife.com/account/request.php</string>
|
||||
<key>version</key><string>3</string>
|
||||
</map>
|
||||
|
||||
<!-- Virtual Highway -->
|
||||
<map>
|
||||
<key>gridname</key><string>Virtual Highway</string>
|
||||
<key>gridnick</key><string>VirtualHighway</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>about</key><string>http://www.virtualhighway.us/about.php</string>
|
||||
<key>helperuri</key><string>http://www.virtualhighway.us/griddal/</string>
|
||||
<key>loginpage</key><string>http://www.virtualhighway.us/welcome.php</string>
|
||||
<key>loginuri</key><string>http://login.virtualhighway.us:8002/</string>
|
||||
<key>name</key><string>login.virtualhighway.us:8002</string>
|
||||
<key>password</key><string>http://www.virtualhighway.us/users/lostPassword</string>
|
||||
<key>register</key><string>http://www.virtualhighway.us/users/register</string>
|
||||
</map>
|
||||
|
||||
<!-- virtyou -->
|
||||
<map>
|
||||
<key>gridname</key><string>virtyou MainGrid</string>
|
||||
<key>gridnick</key><string>virtyou</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>help</key><string>http://virtyou.com/q/howto/</string>
|
||||
<key>loginpage</key><string>http://virtyou.com/welcome/</string>
|
||||
<key>loginuri</key><string>http://go.virtyou.com</string>
|
||||
<key>password</key><string>http://virtyou.com/user/forgotten.html</string>
|
||||
<key>register</key><string>http://virtyou.com/user/</string>
|
||||
</map>
|
||||
|
||||
<!-- Your Alternative Life -->
|
||||
<map>
|
||||
<key>gridname</key><string>Your Alternative Life</string>
|
||||
<key>gridnick</key><string>YourAlternativeLife</string>
|
||||
<key>platform</key><string>OpenSim</string>
|
||||
<key>about</key><string>http://www.youralternativelife.com</string>
|
||||
<key>loginuri</key><string>http://grid01.from-ne.com:8002/</string>
|
||||
<key>loginpage</key><string>http://grid01.from-ne.com/tios/loginscreen3.php</string>
|
||||
<key>helperuri</key><string>http://grid01.from-ne.com/tios/services/</string>
|
||||
<key>website</key><string>http://www.youralternativelife.com</string>
|
||||
<key>support</key><string>http://www.youralternativelife.com</string>
|
||||
<key>register</key><string>http://www.youralternativelife.com</string>
|
||||
<key>password</key><string>http://www.youralternativelife.com</string>
|
||||
<key>version</key><string>0</string>
|
||||
</map>
|
||||
|
||||
</array>
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<settings version = "101">
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarCloth value="FALSE"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarLODFactor value="1.0"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarVP value="TRUE"/>
|
||||
<!--Short Range-->
|
||||
<RenderFarClip value="128"/>
|
||||
<!--Default for now-->
|
||||
<RenderFlexTimeFactor value="1"/>
|
||||
<!--256... but they don't use this-->
|
||||
<RenderGlowResolutionPow value="9"/>
|
||||
<!--Sun/Moon only-->
|
||||
<RenderLightingDetail value="1"/>
|
||||
<!--Low number-->
|
||||
<RenderMaxPartCount value="4096"/>
|
||||
<!--bump okay-->
|
||||
<RenderObjectBump value="TRUE"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderReflectionDetail value="2"/>
|
||||
<!--Simple-->
|
||||
<RenderTerrainDetail value="1"/>
|
||||
<!--Default for now-->
|
||||
<RenderTerrainLODFactor value="2"/>
|
||||
<!--Default for now-->
|
||||
<RenderTreeLODFactor value="0.5"/>
|
||||
<!--Try Impostors-->
|
||||
<RenderUseImpostors value="TRUE"/>
|
||||
<!--Default for now-->
|
||||
<RenderVolumeLODFactor value="1.125"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderWaterReflections value="FALSE"/>
|
||||
<!--NO SHADERS-->
|
||||
<VertexShaderEnable value="TRUE"/>
|
||||
<!--NO SHADERS-->
|
||||
<WindLightUseAtmosShaders value="TRUE"/>
|
||||
</settings>
|
||||
@@ -1,39 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<settings version = "101">
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarCloth value="FALSE"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarLODFactor value="0.5"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarVP value="FALSE"/>
|
||||
<!--Short Range-->
|
||||
<RenderFarClip value="64"/>
|
||||
<!--Default for now-->
|
||||
<RenderFlexTimeFactor value="0.5"/>
|
||||
<!--256... but they don't use this-->
|
||||
<RenderGlowResolutionPow value="8"/>
|
||||
<!--Sun/Moon only-->
|
||||
<RenderLightingDetail value="0"/>
|
||||
<!--Low number-->
|
||||
<RenderMaxPartCount value="1024"/>
|
||||
<!--bump okay-->
|
||||
<RenderObjectBump value="FALSE"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderReflectionDetail value="0"/>
|
||||
<!--Simple-->
|
||||
<RenderTerrainDetail value="0"/>
|
||||
<!--Default for now-->
|
||||
<RenderTerrainLODFactor value="1.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderTreeLODFactor value="0.5"/>
|
||||
<!--Try Impostors-->
|
||||
<RenderUseImpostors value="TRUE"/>
|
||||
<!--Default for now-->
|
||||
<RenderVolumeLODFactor value="1.125"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderWaterReflections value="FALSE"/>
|
||||
<!--NO SHADERS-->
|
||||
<VertexShaderEnable value="FALSE"/>
|
||||
<!--NO SHADERS-->
|
||||
<WindLightUseAtmosShaders value="FALSE"/>
|
||||
</settings>
|
||||
@@ -1,39 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<settings version = "101">
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarCloth value="FALSE"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarLODFactor value="0.5"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarVP value="TRUE"/>
|
||||
<!--Short Range-->
|
||||
<RenderFarClip value="96"/>
|
||||
<!--Default for now-->
|
||||
<RenderFlexTimeFactor value="1"/>
|
||||
<!--256... but they don't use this-->
|
||||
<RenderGlowResolutionPow value="8"/>
|
||||
<!--Sun/Moon only-->
|
||||
<RenderLightingDetail value="1"/>
|
||||
<!--Low number-->
|
||||
<RenderMaxPartCount value="2048"/>
|
||||
<!--bump okay-->
|
||||
<RenderObjectBump value="TRUE"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderReflectionDetail value="0"/>
|
||||
<!--Simple-->
|
||||
<RenderTerrainDetail value="1"/>
|
||||
<!--Default for now-->
|
||||
<RenderTerrainLODFactor value="1.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderTreeLODFactor value="0.5"/>
|
||||
<!--Try Impostors-->
|
||||
<RenderUseImpostors value="TRUE"/>
|
||||
<!--Default for now-->
|
||||
<RenderVolumeLODFactor value="1.125"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderWaterReflections value="FALSE"/>
|
||||
<!--NO SHADERS-->
|
||||
<VertexShaderEnable value="TRUE"/>
|
||||
<!--NO SHADERS-->
|
||||
<WindLightUseAtmosShaders value="FALSE"/>
|
||||
</settings>
|
||||
@@ -2,6 +2,123 @@
|
||||
<llsd>
|
||||
<map>
|
||||
|
||||
<!-- begin RC hacking -->
|
||||
<key>PrimMediaMasterEnabled</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Whether or not Media on a Prim is enabled.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
<key>PrimMediaMaxRetries</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Maximum number of retries for media queries.</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>4</integer>
|
||||
</map>
|
||||
<key>PrimMediaRequestQueueDelay</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Timer delay for fetching media from the queue (in seconds).</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>1.0</real>
|
||||
</map>
|
||||
<key>PrimMediaRetryTimerDelay</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Timer delay for retrying on media queries (in seconds).</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>F32</string>
|
||||
<key>Value</key>
|
||||
<real>5.0</real>
|
||||
</map>
|
||||
<key>PrimMediaMaxSortedQueueSize</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Maximum number of objects the viewer will load media for initially</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>100000</integer>
|
||||
</map>
|
||||
<key>PrimMediaMaxRoundRobinQueueSize</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Maximum number of objects the viewer will continuously update media for</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>100000</integer>
|
||||
</map>
|
||||
<key>ShowMOAPRadar</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Show the MOAP radar</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>FloaterMOAPRadarRect</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Rectangle for MOAP Radar</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Rect</string>
|
||||
<key>Value</key>
|
||||
<array>
|
||||
<integer>0</integer>
|
||||
<integer>400</integer>
|
||||
<integer>200</integer>
|
||||
<integer>0</integer>
|
||||
</array>
|
||||
</map>
|
||||
<key>MOAPRadarKeepOpen</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Keeps MOAP radar updates running in background</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>MOAPRadarUpdateRate</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>MOAP Radar update rate (0 = high, 1 = medium, 2 = low)</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>U32</string>
|
||||
<key>Value</key>
|
||||
<integer>1</integer>
|
||||
</map>
|
||||
|
||||
<!-- BEGIN IMPRUDENCE-SPECIFIC SETTINGS -->
|
||||
|
||||
<!-- begin Aurora-specific settings -->
|
||||
@@ -14645,6 +14762,17 @@
|
||||
<real>1.0</real>
|
||||
</array>
|
||||
</map>
|
||||
<key>moapbeacon</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
<string>Beacon / Highlight MOAP sources</string>
|
||||
<key>Persist</key>
|
||||
<integer>1</integer>
|
||||
<key>Type</key>
|
||||
<string>Boolean</string>
|
||||
<key>Value</key>
|
||||
<integer>0</integer>
|
||||
</map>
|
||||
<key>particlesbeacon</key>
|
||||
<map>
|
||||
<key>Comment</key>
|
||||
|
||||
@@ -1,39 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
|
||||
<settings version = "101">
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarCloth value="TRUE"/>
|
||||
<!--Default for now-->
|
||||
<RenderAvatarLODFactor value="1.0"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderAvatarVP value="TRUE"/>
|
||||
<!--Short Range-->
|
||||
<RenderFarClip value="256"/>
|
||||
<!--Default for now-->
|
||||
<RenderFlexTimeFactor value="1"/>
|
||||
<!--256... but they don't use this-->
|
||||
<RenderGlowResolutionPow value="9"/>
|
||||
<!--Sun/Moon only-->
|
||||
<RenderLightingDetail value="1"/>
|
||||
<!--Low number-->
|
||||
<RenderMaxPartCount value="4096"/>
|
||||
<!--bump okay-->
|
||||
<RenderObjectBump value="TRUE"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderReflectionDetail value="3"/>
|
||||
<!--Simple-->
|
||||
<RenderTerrainDetail value="1"/>
|
||||
<!--Default for now-->
|
||||
<RenderTerrainLODFactor value="2.0"/>
|
||||
<!--Default for now-->
|
||||
<RenderTreeLODFactor value="1.0"/>
|
||||
<!--Try Impostors-->
|
||||
<RenderUseImpostors value="TRUE"/>
|
||||
<!--Default for now-->
|
||||
<RenderVolumeLODFactor value="2.0"/>
|
||||
<!--NO SHADERS-->
|
||||
<RenderWaterReflections value="TRUE"/>
|
||||
<!--NO SHADERS-->
|
||||
<VertexShaderEnable value="TRUE"/>
|
||||
<!--NO SHADERS-->
|
||||
<WindLightUseAtmosShaders value="TRUE"/>
|
||||
</settings>
|
||||
@@ -302,7 +302,6 @@ bool cmd_line_chat(std::string revised_text, EChatType type)
|
||||
{
|
||||
if (i >> z)
|
||||
{
|
||||
LLVector3 agentPos = gAgent.getPositionAgent();
|
||||
LLViewerRegion* agentRegionp = gAgent.getRegion();
|
||||
if(agentRegionp)
|
||||
{
|
||||
|
||||
@@ -28,7 +28,7 @@ RenderAvatarCloth 1 1
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarVP 1 1
|
||||
RenderCubeMap 1 1
|
||||
RenderFarClip 1 256
|
||||
RenderFarClip 1 1024
|
||||
RenderFlexTimeFactor 1 1.0
|
||||
RenderFogRatio 1 4.0
|
||||
RenderGamma 1 0
|
||||
@@ -41,10 +41,10 @@ RenderObjectBump 1 1
|
||||
RenderReflectionDetail 1 3
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderTreeLODFactor 1 12.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVBOEnable 1 1
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderVolumeLODFactor 1 4.0
|
||||
RenderWaterReflections 1 1
|
||||
UseStartScreen 1 1
|
||||
UseOcclusion 1 1
|
||||
@@ -54,8 +54,6 @@ WLSkyDetail 1 128
|
||||
Disregard128DefaultDrawDistance 1 1
|
||||
Disregard96DefaultDrawDistance 1 1
|
||||
RenderTextureMemoryMultiple 1 1.0
|
||||
RenderShaderLightingMaxLevel 1 3
|
||||
|
||||
|
||||
//
|
||||
// Low Graphics Settings
|
||||
@@ -74,7 +72,7 @@ RenderObjectBump 1 0
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTerrainDetail 1 0
|
||||
RenderTerrainLODFactor 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderTreeLODFactor 1 2.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
RenderWaterReflections 1 0
|
||||
@@ -90,7 +88,7 @@ RenderAnisotropic 1 0
|
||||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 0.5
|
||||
RenderAvatarVP 1 1
|
||||
RenderFarClip 1 96
|
||||
RenderFarClip 1 128
|
||||
RenderFlexTimeFactor 1 1.0
|
||||
RenderGlowResolutionPow 1 8
|
||||
RenderLightingDetail 1 1
|
||||
@@ -99,7 +97,7 @@ RenderObjectBump 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 1.0
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderTreeLODFactor 1 4.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
RenderWaterReflections 1 0
|
||||
@@ -115,7 +113,7 @@ RenderAnisotropic 1 1
|
||||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarVP 1 1
|
||||
RenderFarClip 1 128
|
||||
RenderFarClip 1 256
|
||||
RenderFlexTimeFactor 1 1.0
|
||||
RenderGlowResolutionPow 1 9
|
||||
RenderLightingDetail 1 1
|
||||
@@ -124,9 +122,9 @@ RenderObjectBump 1 1
|
||||
RenderReflectionDetail 1 2
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderTreeLODFactor 1 8.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderWaterReflections 1 0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
@@ -140,7 +138,7 @@ RenderAnisotropic 1 1
|
||||
RenderAvatarCloth 1 1
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarVP 1 1
|
||||
RenderFarClip 1 256
|
||||
RenderFarClip 1 1024
|
||||
RenderFlexTimeFactor 1 1.0
|
||||
RenderGlowResolutionPow 1 9
|
||||
RenderLightingDetail 1 1
|
||||
@@ -149,9 +147,9 @@ RenderObjectBump 1 1
|
||||
RenderReflectionDetail 1 3
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderTreeLODFactor 1 12.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderVolumeLODFactor 1 4.0
|
||||
RenderWaterReflections 1 1
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
||||
@@ -28,7 +28,7 @@ RenderAvatarCloth 1 1
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarVP 1 1
|
||||
RenderCubeMap 1 1
|
||||
RenderFarClip 1 256
|
||||
RenderFarClip 1 1024
|
||||
RenderFlexTimeFactor 1 1.0
|
||||
RenderFogRatio 1 4.0
|
||||
RenderGamma 1 0
|
||||
@@ -41,10 +41,10 @@ RenderObjectBump 1 1
|
||||
RenderReflectionDetail 1 3
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderTreeLODFactor 1 12.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVBOEnable 1 1
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderVolumeLODFactor 1 4.0
|
||||
RenderWaterReflections 1 1
|
||||
UseStartScreen 1 1
|
||||
UseOcclusion 1 1
|
||||
@@ -72,7 +72,7 @@ RenderObjectBump 1 0
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTerrainDetail 1 0
|
||||
RenderTerrainLODFactor 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderTreeLODFactor 1 2.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
RenderWaterReflections 1 0
|
||||
@@ -88,7 +88,7 @@ RenderAnisotropic 1 0
|
||||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 0.5
|
||||
RenderAvatarVP 1 1
|
||||
RenderFarClip 1 96
|
||||
RenderFarClip 1 128
|
||||
RenderFlexTimeFactor 1 1.0
|
||||
RenderGlowResolutionPow 1 8
|
||||
RenderLightingDetail 1 1
|
||||
@@ -97,7 +97,7 @@ RenderObjectBump 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 1.0
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderTreeLODFactor 1 4.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
RenderWaterReflections 1 0
|
||||
@@ -113,7 +113,7 @@ RenderAnisotropic 1 1
|
||||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarVP 1 1
|
||||
RenderFarClip 1 128
|
||||
RenderFarClip 1 256
|
||||
RenderFlexTimeFactor 1 1.0
|
||||
RenderGlowResolutionPow 1 9
|
||||
RenderLightingDetail 1 1
|
||||
@@ -122,9 +122,9 @@ RenderObjectBump 1 1
|
||||
RenderReflectionDetail 1 2
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderTreeLODFactor 1 8.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderWaterReflections 1 0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
@@ -138,7 +138,7 @@ RenderAnisotropic 1 1
|
||||
RenderAvatarCloth 1 1
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarVP 1 1
|
||||
RenderFarClip 1 256
|
||||
RenderFarClip 1 1024
|
||||
RenderFlexTimeFactor 1 1.0
|
||||
RenderGlowResolutionPow 1 9
|
||||
RenderLightingDetail 1 1
|
||||
@@ -147,9 +147,9 @@ RenderObjectBump 1 1
|
||||
RenderReflectionDetail 1 3
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderTreeLODFactor 1 12.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderVolumeLODFactor 1 4.0
|
||||
RenderWaterReflections 1 1
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
||||
@@ -23,39 +23,37 @@ version 20
|
||||
// NOTE: All settings are set to the MIN of applied values, including 'all'!
|
||||
//
|
||||
list all
|
||||
RenderAnisotropic 1 0
|
||||
RenderAvatarCloth 0 0
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarVP 1 0
|
||||
RenderCubeMap 1 1
|
||||
RenderFarClip 1 256
|
||||
RenderFlexTimeFactor 1 1.0
|
||||
RenderFogRatio 1 4.0
|
||||
RenderGamma 1 0
|
||||
RenderGlowResolutionPow 1 9
|
||||
RenderGround 1 1
|
||||
RenderLightingDetail 1 1
|
||||
RenderMaxPartCount 1 8192
|
||||
RenderNightBrightness 1 1.0
|
||||
RenderObjectBump 1 1
|
||||
RenderReflectionDetail 1 3
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVBOEnable 1 1
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderWaterReflections 1 1
|
||||
UseOcclusion 1 1
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
WLSkyDetail 1 128
|
||||
RenderUseCleverUI 1 1
|
||||
Disregard128DefaultDrawDistance 1 1
|
||||
Disregard96DefaultDrawDistance 1 1
|
||||
RenderTextureMemoryMultiple 1 0.5
|
||||
RenderAnisotropic 1 0
|
||||
RenderAvatarCloth 1 1
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarVP 1 1
|
||||
RenderCubeMap 1 1
|
||||
RenderFarClip 1 1024
|
||||
RenderFlexTimeFactor 1 1.0
|
||||
RenderFogRatio 1 4.0
|
||||
RenderGamma 1 0
|
||||
RenderGlowResolutionPow 1 9
|
||||
RenderGround 1 1
|
||||
RenderLightingDetail 1 1
|
||||
RenderMaxPartCount 1 8192
|
||||
RenderNightBrightness 1 1.0
|
||||
RenderObjectBump 1 1
|
||||
RenderReflectionDetail 1 3
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTreeLODFactor 1 12.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVBOEnable 1 1
|
||||
RenderVolumeLODFactor 1 4.0
|
||||
RenderWaterReflections 1 1
|
||||
UseStartScreen 1 1
|
||||
UseOcclusion 1 1
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
WLSkyDetail 1 128
|
||||
Disregard128DefaultDrawDistance 1 1
|
||||
Disregard96DefaultDrawDistance 1 1
|
||||
RenderTextureMemoryMultiple 1 1.0
|
||||
|
||||
//
|
||||
// Low Graphics Settings
|
||||
@@ -74,7 +72,7 @@ RenderObjectBump 1 0
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTerrainDetail 1 0
|
||||
RenderTerrainLODFactor 1 1
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderTreeLODFactor 1 2.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
RenderWaterReflections 1 0
|
||||
@@ -90,7 +88,7 @@ RenderAnisotropic 1 0
|
||||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 0.5
|
||||
RenderAvatarVP 1 1
|
||||
RenderFarClip 1 96
|
||||
RenderFarClip 1 128
|
||||
RenderFlexTimeFactor 1 1.0
|
||||
RenderGlowResolutionPow 1 8
|
||||
RenderLightingDetail 1 1
|
||||
@@ -99,7 +97,7 @@ RenderObjectBump 1 1
|
||||
RenderReflectionDetail 1 0
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 1.0
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderTreeLODFactor 1 4.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
RenderWaterReflections 1 0
|
||||
@@ -115,7 +113,7 @@ RenderAnisotropic 1 1
|
||||
RenderAvatarCloth 1 0
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarVP 1 1
|
||||
RenderFarClip 1 128
|
||||
RenderFarClip 1 256
|
||||
RenderFlexTimeFactor 1 1.0
|
||||
RenderGlowResolutionPow 1 9
|
||||
RenderLightingDetail 1 1
|
||||
@@ -124,9 +122,9 @@ RenderObjectBump 1 1
|
||||
RenderReflectionDetail 1 2
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTreeLODFactor 1 0.5
|
||||
RenderTreeLODFactor 1 8.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 1.125
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderWaterReflections 1 0
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
@@ -140,7 +138,7 @@ RenderAnisotropic 1 1
|
||||
RenderAvatarCloth 1 1
|
||||
RenderAvatarLODFactor 1 1.0
|
||||
RenderAvatarVP 1 1
|
||||
RenderFarClip 1 256
|
||||
RenderFarClip 1 1024
|
||||
RenderFlexTimeFactor 1 1.0
|
||||
RenderGlowResolutionPow 1 9
|
||||
RenderLightingDetail 1 1
|
||||
@@ -149,9 +147,9 @@ RenderObjectBump 1 1
|
||||
RenderReflectionDetail 1 3
|
||||
RenderTerrainDetail 1 1
|
||||
RenderTerrainLODFactor 1 2.0
|
||||
RenderTreeLODFactor 1 1.0
|
||||
RenderTreeLODFactor 1 12.0
|
||||
RenderUseImpostors 1 1
|
||||
RenderVolumeLODFactor 1 2.0
|
||||
RenderVolumeLODFactor 1 4.0
|
||||
RenderWaterReflections 1 1
|
||||
VertexShaderEnable 1 1
|
||||
WindLightUseAtmosShaders 1 1
|
||||
|
||||
+6
-6
@@ -9,15 +9,15 @@
|
||||
; These will change
|
||||
AppId={{1B3E68BC-13EB-4277-9439-CB5FF9259460}
|
||||
AppName=Imprudence Viewer Experimental
|
||||
AppVerName=Imprudence Viewer 1.4.0 beta 1.5 windows test release
|
||||
AppVerName=Imprudence Viewer 1.4.0.3 exp 1 windows test release
|
||||
DefaultDirName={pf}\ImprudenceExperimental
|
||||
DefaultGroupName=Imprudence Viewer Experimental
|
||||
VersionInfoProductName=Imprudence Viewer Experimental
|
||||
OutputBaseFilename=Imprudence-1.4.0-beta-1.5-windows-test
|
||||
VersionInfoVersion=1.4.0
|
||||
VersionInfoTextVersion=1.4.0
|
||||
VersionInfoProductVersion=1.4.0
|
||||
AppVersion=1.4.0
|
||||
OutputBaseFilename=Imprudence-1.4.0.3-exp-1-windows-test
|
||||
VersionInfoVersion=1.4.0.3
|
||||
VersionInfoTextVersion=1.4.0.3
|
||||
VersionInfoProductVersion=1.4.0.3
|
||||
AppVersion=1.4.0.3
|
||||
VersionInfoCopyright=2011
|
||||
|
||||
; These won't change
|
||||
|
||||
@@ -8,16 +8,16 @@
|
||||
; Imp Experimental ID: 1B3E68BC-13EB-4277-9439-CB5FF9259460
|
||||
|
||||
; These will change
|
||||
AppId={{D7736EE8-AFCE-4735-BBE3-652CDFBBFCA8}
|
||||
AppId={{1B3E68BC-13EB-4277-9439-CB5FF9259460}
|
||||
AppName=%%APPNAME%%
|
||||
AppVerName=%%APPVERNAME%%
|
||||
DefaultDirName={pf}\Imprudence
|
||||
DefaultGroupName=Imprudence Viewer
|
||||
VersionInfoProductName=%%APPNAME%%
|
||||
OutputBaseFilename=%%INSTALLERFILENAME%%
|
||||
VersionInfoVersion=%%VERSION%%
|
||||
VersionInfoVersion=%%VERSIONNUMBER%%
|
||||
VersionInfoTextVersion=%%VERSION%%
|
||||
VersionInfoProductVersion=%%VERSION%%
|
||||
VersionInfoProductVersion=%%VERSIONNUMBER%%
|
||||
AppVersion=%%VERSION%%
|
||||
VersionInfoCopyright=2011
|
||||
|
||||
@@ -307,7 +307,7 @@ begin
|
||||
Success := RegQueryDWordValue(HKLM64, 'SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86', 'Installed', V);
|
||||
end else begin
|
||||
Success := RegQueryDWordValue(HKLM, 'SOFTWARE\Microsoft\VisualStudio\10.0\VC\VCRedist\x86', 'Installed', V);
|
||||
end
|
||||
end;
|
||||
|
||||
if Success = TRUE then begin
|
||||
if V = 1 then begin
|
||||
|
||||
@@ -22,13 +22,12 @@ else
|
||||
fi
|
||||
|
||||
# Register handler for KDE-aware apps
|
||||
if [ -z "$KDEHOME" ]; then
|
||||
KDEHOME=~/.kde
|
||||
fi
|
||||
LLKDEPROTDIR=${KDEHOME}/share/services
|
||||
if [ -d "$LLKDEPROTDIR" ]; then
|
||||
LLKDEPROTFILE=${LLKDEPROTDIR}/secondlife.protocol
|
||||
cat > ${LLKDEPROTFILE} <<EOF || echo Warning: Did not register secondlife:// handler with KDE: Could not write ${LLKDEPROTFILE}
|
||||
for LLKDECONFIG in kde-config kde4-config; do
|
||||
if [ `which $LLKDECONFIG` ]; then
|
||||
LLKDEPROTODIR=`$LLKDECONFIG --path services | cut -d ':' -f 1`
|
||||
if [ -d "$LLKDEPROTODIR" ]; then
|
||||
LLKDEPROTOFILE=${LLKDEPROTODIR}/secondlife.protocol
|
||||
cat > ${LLKDEPROTOFILE} <<EOF || echo Warning: Did not register secondlife:// handler with KDE: Could not write ${LLKDEPROTOFILE}
|
||||
[Protocol]
|
||||
exec=${HANDLER} '%u'
|
||||
protocol=secondlife
|
||||
@@ -41,6 +40,8 @@ writing=false
|
||||
makedir=false
|
||||
deleting=false
|
||||
EOF
|
||||
else
|
||||
echo Info: Did not register secondlife:// handler with KDE: Directory $LLKDEPROTDIR does not exist. You can safely ignore this if you are not using KDE.
|
||||
fi
|
||||
else
|
||||
echo Warning: Did not register secondlife:// handler with KDE: Directory $LLKDEPROTODIR does not exist.
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
@@ -1613,8 +1613,6 @@ BOOL LLAgent::calcCameraMinDistance(F32 &obj_min_distance)
|
||||
abs_target_offset.abs();
|
||||
|
||||
LLVector3 target_offset_dir = target_offset_origin;
|
||||
F32 object_radius = mFocusObject->getVObjRadius();
|
||||
|
||||
BOOL target_outside_object_extents = FALSE;
|
||||
|
||||
for (U32 i = VX; i <= VZ; i++)
|
||||
@@ -1708,18 +1706,6 @@ BOOL LLAgent::calcCameraMinDistance(F32 &obj_min_distance)
|
||||
|
||||
LLVector3 camera_offset_object(getCameraPositionAgent() - mFocusObject->getPositionAgent());
|
||||
|
||||
// length projected orthogonal to target offset
|
||||
F32 camera_offset_dist = (camera_offset_object - target_offset_dir * (camera_offset_object * target_offset_dir)).magVec();
|
||||
|
||||
// calculate whether the target point would be "visible" if it were outside the bounding box
|
||||
// on the opposite of the splitting plane defined by object_split_axis;
|
||||
BOOL exterior_target_visible = FALSE;
|
||||
if (camera_offset_dist > object_radius)
|
||||
{
|
||||
// target is visible from camera, so turn off fov zoom
|
||||
exterior_target_visible = TRUE;
|
||||
}
|
||||
|
||||
F32 camera_offset_clip = camera_offset_object * object_split_axis;
|
||||
F32 target_offset_clip = target_offset_dir * object_split_axis;
|
||||
|
||||
@@ -2538,12 +2524,10 @@ void LLAgent::autoPilot(F32 *delta_yaw)
|
||||
*delta_yaw = yaw;
|
||||
|
||||
// Compute when to start slowing down and when to stop
|
||||
F32 stop_distance = mAutoPilotStopDistance;
|
||||
F32 slow_distance;
|
||||
if (getFlying())
|
||||
{
|
||||
slow_distance = llmax(6.f, mAutoPilotStopDistance + 5.f);
|
||||
stop_distance = llmax(2.f, mAutoPilotStopDistance);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -3719,7 +3703,6 @@ F32 LLAgent::calcCameraFOVZoomFactor()
|
||||
else if (mFocusObject.notNull() && !mFocusObject->isAvatar())
|
||||
{
|
||||
// don't FOV zoom on mostly transparent objects
|
||||
LLVector3 focus_offset = mFocusObjectOffset;
|
||||
F32 obj_min_dist = 0.f;
|
||||
if (!gSavedSettings.getBOOL("DisableMinZoomDist"))
|
||||
calcCameraMinDistance(obj_min_dist);
|
||||
@@ -3746,9 +3729,8 @@ LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit)
|
||||
// Compute base camera position and look-at points.
|
||||
F32 camera_land_height;
|
||||
LLVector3d frame_center_global = mAvatarObject.isNull() ? getPositionGlobal()
|
||||
: getPosGlobalFromAgent(mAvatarObject->mRoot.getWorldPosition());
|
||||
|
||||
LLVector3 upAxis = getUpAxis();
|
||||
: getPosGlobalFromAgent(mAvatarObject->mRoot.getWorldPosition());
|
||||
|
||||
BOOL isConstrained = FALSE;
|
||||
LLVector3d head_offset;
|
||||
head_offset.setVec(mThirdPersonHeadOffset);
|
||||
@@ -3883,7 +3865,6 @@ LLVector3d LLAgent::calcCameraPositionTargetGlobal(BOOL *hit_limit)
|
||||
// set the global camera position
|
||||
LLVector3d camera_offset;
|
||||
|
||||
LLVector3 av_pos = mAvatarObject.isNull() ? LLVector3::zero : mAvatarObject->getRenderPosition();
|
||||
camera_offset.setVec( local_camera_offset );
|
||||
camera_position_global = frame_center_global + head_offset + camera_offset;
|
||||
|
||||
|
||||
@@ -494,7 +494,6 @@ F32 LLDrawable::updateXform(BOOL undamped)
|
||||
//scaling
|
||||
LLVector3 target_scale = mVObjp->getScale();
|
||||
LLVector3 old_scale = mCurrentScale;
|
||||
LLVector3 dest_scale = target_scale;
|
||||
|
||||
// Damping
|
||||
F32 dist_squared = 0.f;
|
||||
@@ -834,7 +833,6 @@ const LLVector3* LLDrawable::getSpatialExtents() const
|
||||
|
||||
void LLDrawable::setSpatialExtents(LLVector3 min, LLVector3 max)
|
||||
{
|
||||
LLVector3 size = max - min;
|
||||
mExtents[0] = min;
|
||||
mExtents[1] = max;
|
||||
}
|
||||
@@ -1098,7 +1096,6 @@ LLCamera LLSpatialBridge::transformCamera(LLCamera& camera)
|
||||
LLCamera ret = camera;
|
||||
LLXformMatrix* mat = mDrawable->getXform();
|
||||
LLVector3 center = LLVector3(0,0,0) * mat->getWorldMatrix();
|
||||
LLQuaternion rotation = LLQuaternion(mat->getWorldMatrix());
|
||||
|
||||
LLVector3 delta = ret.getOrigin() - center;
|
||||
LLQuaternion rot = ~mat->getRotation();
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @file lightshare.cpp
|
||||
* @file llettherebelight.cpp
|
||||
* @brief Handler for Meta7 Lightshare (region-side Windlight settings), and other methods of sharing WindLight.
|
||||
*
|
||||
* Copyright (c) 2010, Tom Grimshaw (Tom Meta)
|
||||
@@ -38,7 +38,7 @@
|
||||
#include "message.h"
|
||||
#include "meta7windlight.h"
|
||||
|
||||
#include "lightshare.h"
|
||||
#include "llettherebelight.h"
|
||||
|
||||
#include "llagent.h"
|
||||
#include "llworld.h"
|
||||
@@ -1,5 +1,5 @@
|
||||
/**
|
||||
* @file lightshare.h
|
||||
* @file llettherebelight.h
|
||||
* @brief WindlightMessage class definition.
|
||||
*
|
||||
* Copyright (c) 2010, Jacek Antonelli
|
||||
@@ -233,9 +233,6 @@ void LLVolumeImplFlexible::setAttributesOfAllSections(LLVector3* inScale)
|
||||
mSection[0].mVelocity.setVec(0,0,0);
|
||||
mSection[0].mAxisRotation.setQuat(begin_rot,0,0,1);
|
||||
|
||||
LLVector3 parentSectionPosition = mSection[0].mPosition;
|
||||
LLVector3 last_direction = mSection[0].mDirection;
|
||||
|
||||
remapSections(mSection, mInitializedRes, mSection, mSimulateRes);
|
||||
mInitializedRes = mSimulateRes;
|
||||
|
||||
|
||||
@@ -1010,7 +1010,7 @@ void LLSpeakerMgr::update(BOOL resort_ok)
|
||||
LLUUID speaker_id = speaker_it->first;
|
||||
LLSpeaker* speakerp = speaker_it->second;
|
||||
|
||||
speaker_map_t::iterator cur_speaker_it = speaker_it++;
|
||||
speaker_it++;
|
||||
|
||||
if (voice_channel_active && gVoiceClient->getVoiceEnabled(speaker_id))
|
||||
{
|
||||
|
||||
@@ -54,6 +54,7 @@ LLFloaterBeacons::LLFloaterBeacons(const LLSD& seed)
|
||||
LLPipeline::setRenderScriptedTouchBeacons(gSavedSettings.getBOOL("scripttouchbeacon"));
|
||||
LLPipeline::setRenderScriptedBeacons( gSavedSettings.getBOOL("scriptsbeacon"));
|
||||
LLPipeline::setRenderPhysicalBeacons( gSavedSettings.getBOOL("physicalbeacon"));
|
||||
LLPipeline::setRenderMOAPBeacons( gSavedSettings.getBOOL("moapbeacon"));
|
||||
LLPipeline::setRenderSoundBeacons( gSavedSettings.getBOOL("soundsbeacon"));
|
||||
LLPipeline::setRenderParticleBeacons( gSavedSettings.getBOOL("particlesbeacon"));
|
||||
LLPipeline::setRenderHighlights( gSavedSettings.getBOOL("renderhighlights"));
|
||||
@@ -67,6 +68,7 @@ BOOL LLFloaterBeacons::postBuild()
|
||||
childSetCommitCallback("physical", onClickUICheck, this);
|
||||
childSetCommitCallback("sounds", onClickUICheck, this);
|
||||
childSetCommitCallback("particles", onClickUICheck, this);
|
||||
childSetCommitCallback("moap", onClickUICheck, this);
|
||||
childSetCommitCallback("highlights", onClickUICheck, this);
|
||||
childSetCommitCallback("beacons", onClickUICheck, this);
|
||||
return TRUE;
|
||||
@@ -132,6 +134,7 @@ void LLFloaterBeacons::onClickUICheck(LLUICtrl *ctrl, void* data)
|
||||
else if(name == "physical") LLPipeline::setRenderPhysicalBeacons(check->get());
|
||||
else if(name == "sounds") LLPipeline::setRenderSoundBeacons(check->get());
|
||||
else if(name == "particles") LLPipeline::setRenderParticleBeacons(check->get());
|
||||
else if(name == "moap") LLPipeline::setRenderMOAPBeacons(check->get());
|
||||
else if(name == "highlights")
|
||||
{
|
||||
LLPipeline::toggleRenderHighlights(NULL);
|
||||
|
||||
@@ -115,6 +115,9 @@ BOOL LLFloaterBuildOptions::postBuild()
|
||||
getChild<LLTextureCtrl>("texture control")->setImageAssetID(LLUUID(gSavedPerAccountSettings.getString("BuildPrefs_Texture")));
|
||||
|
||||
childSetValue("BuildPrefsRenderHighlight_toggle", gSavedSettings.getBOOL("RenderHighlightSelections") );
|
||||
childSetValue("BuildPrefsRenderHidden_toggle", gSavedSettings.getBOOL("RenderHiddenSelections") );
|
||||
childSetValue("BuildPrefsRenderLightRadius_toggle", gSavedSettings.getBOOL("RenderLightRadius") );
|
||||
childSetValue("BuildPrefsShowSelectionBeam_toggle", gSavedSettings.getBOOL("ShowSelectionBeam") );
|
||||
childSetValue("grouplandrez", gSavedSettings.getBOOL("RezWithLandGroup") );
|
||||
childSetValue("GridSubUnit", gSavedSettings.getBOOL("GridSubUnit") );
|
||||
childSetValue("GridCrossSection", gSavedSettings.getBOOL("GridCrossSections") );
|
||||
@@ -293,6 +296,17 @@ void LLFloaterBuildOptions::apply()
|
||||
LLSelectMgr::sRenderSelectionHighlights = !LLSelectMgr::sRenderSelectionHighlights;
|
||||
gSavedSettings.setBOOL("RenderHighlightSelections", LLSelectMgr::sRenderSelectionHighlights);
|
||||
}
|
||||
if (gSavedSettings.getBOOL("RenderHiddenSelections") != (BOOL)(childGetValue("BuildPrefsRenderHidden_toggle").asBoolean()))
|
||||
{
|
||||
LLSelectMgr::sRenderHiddenSelections = !LLSelectMgr::sRenderHiddenSelections;
|
||||
gSavedSettings.setBOOL("RenderHiddenSelections", LLSelectMgr::sRenderHiddenSelections);
|
||||
}
|
||||
if (gSavedSettings.getBOOL("RenderLightRadius") != (BOOL)(childGetValue("BuildPrefsRenderLightRadius_toggle").asBoolean()))
|
||||
{
|
||||
LLSelectMgr::sRenderLightRadius = !LLSelectMgr::sRenderLightRadius;
|
||||
gSavedSettings.setBOOL("RenderLightRadius", LLSelectMgr::sRenderLightRadius);
|
||||
}
|
||||
gSavedSettings.setBOOL("ShowSelectionBeam", childGetValue("BuildPrefsShowSelectionBeam_toggle").asBoolean() );
|
||||
|
||||
gSavedSettings.setBOOL("RezWithLandGroup", childGetValue("grouplandrez").asBoolean() );
|
||||
gSavedSettings.setBOOL("GridSubUnit", childGetValue("GridSubUnit").asBoolean() );
|
||||
@@ -340,6 +354,9 @@ void LLFloaterBuildOptions::reset()
|
||||
mBuildTextureUUID = (LLUUID)gSavedPerAccountSettings.getControl("BuildPrefs_Texture")->getDefault().asString();
|
||||
|
||||
childSetValue("BuildPrefsRenderHighlight_toggle", gSavedSettings.getControl("RenderHighlightSelections")->getDefault() );
|
||||
childSetValue("BuildPrefsRenderHidden_toggle", gSavedSettings.getControl("RenderHiddenSelections")->getDefault() );
|
||||
childSetValue("BuildPrefsRenderLightRadius_toggle", gSavedSettings.getControl("RenderLightRadius")->getDefault() );
|
||||
childSetValue("BuildPrefsShowSelectionBeam_toggle", gSavedSettings.getControl("ShowSelectionBeam")->getDefault() );
|
||||
childSetValue("grouplandrez", gSavedSettings.getControl("RezWithLandGroup")->getDefault() );
|
||||
childSetValue("GridSubUnit", gSavedSettings.getControl("GridSubUnit")->getDefault() );
|
||||
childSetValue("GridCrossSection", gSavedSettings.getControl("GridCrossSections")->getDefault() );
|
||||
|
||||
@@ -364,7 +364,7 @@ void LLFloaterChat::addChatHistory(const LLChat& chat, bool log_to_file)
|
||||
{
|
||||
// desaturate muted chat
|
||||
LLColor4 muted_color = lerp(color, LLColor4::grey, 0.5f);
|
||||
add_timestamped_line(history_editor_with_mute, chat, color);
|
||||
add_timestamped_line(history_editor_with_mute, chat, muted_color);
|
||||
}
|
||||
|
||||
// add objects as transient speakers that can be muted
|
||||
|
||||
@@ -100,7 +100,6 @@ BOOL LLFloaterJoystick::postBuild()
|
||||
if (child)
|
||||
{
|
||||
LLRect r = child->getRect();
|
||||
LLRect f = getRect();
|
||||
rect = LLRect(350, r.mTop, r.mRight + 200, 0);
|
||||
}
|
||||
|
||||
|
||||
@@ -393,6 +393,7 @@ BOOL LLFloaterTools::postBuild()
|
||||
mStatusText["rotate"] = getString("status_rotate");
|
||||
mStatusText["scale"] = getString("status_scale");
|
||||
mStatusText["move"] = getString("status_move");
|
||||
mStatusText["selectface"] = getString("status_selectface");
|
||||
mStatusText["align"] = getString("status_align");
|
||||
mStatusText["modifyland"] = getString("status_modifyland");
|
||||
mStatusText["camera"] = getString("status_camera");
|
||||
|
||||
@@ -761,13 +761,11 @@ bool LLFloaterWater::deleteAlertCallback(const LLSD& notification, const LLSD& r
|
||||
LLComboBox* combo_box = sWaterMenu->getChild<LLComboBox>("WaterPresetsCombo");
|
||||
LLFloaterDayCycle* day_cycle = NULL;
|
||||
LLComboBox* key_combo = NULL;
|
||||
LLMultiSliderCtrl* mult_sldr = NULL;
|
||||
|
||||
if(LLFloaterDayCycle::isOpen())
|
||||
{
|
||||
day_cycle = LLFloaterDayCycle::instance();
|
||||
key_combo = day_cycle->getChild<LLComboBox>("WaterKeyPresets");
|
||||
mult_sldr = day_cycle->getChild<LLMultiSliderCtrl>("WaterDayCycleKeys");
|
||||
}
|
||||
|
||||
std::string name = combo_box->getSelectedValue().asString();
|
||||
|
||||
@@ -973,14 +973,12 @@ bool LLFloaterWindLight::deleteAlertCallback(const LLSD& notification, const LLS
|
||||
"WLPresetsCombo");
|
||||
LLFloaterDayCycle* day_cycle = NULL;
|
||||
LLComboBox* key_combo = NULL;
|
||||
LLMultiSliderCtrl* mult_sldr = NULL;
|
||||
|
||||
if(LLFloaterDayCycle::isOpen())
|
||||
{
|
||||
day_cycle = LLFloaterDayCycle::instance();
|
||||
key_combo = day_cycle->getChild<LLComboBox>(
|
||||
"WLKeyPresets");
|
||||
mult_sldr = day_cycle->getChild<LLMultiSliderCtrl>("WLDayCycleKeys");
|
||||
}
|
||||
|
||||
std::string name(combo_box->getSelectedValue().asString());
|
||||
|
||||
@@ -3767,12 +3767,6 @@ BOOL LLFolderView::handleKeyHere( KEY key, MASK mask )
|
||||
LLMenuGL::sMenuContainer->hideMenus();
|
||||
}
|
||||
|
||||
LLView *item = NULL;
|
||||
if (getChildCount() > 0)
|
||||
{
|
||||
item = *(getChildList()->begin());
|
||||
}
|
||||
|
||||
switch( key )
|
||||
{
|
||||
case KEY_F2:
|
||||
|
||||
@@ -531,7 +531,6 @@ BOOL LLGestureManager::triggerAndReviseString(const std::string &utf8str, std::s
|
||||
gesture = NULL;
|
||||
}
|
||||
|
||||
|
||||
if (matching.size() > 0)
|
||||
{
|
||||
// choose one at random
|
||||
@@ -565,246 +564,8 @@ BOOL LLGestureManager::triggerAndReviseString(const std::string &utf8str, std::s
|
||||
found_gestures = TRUE;
|
||||
}
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhaseasteregg", cur_token) == 0 ||
|
||||
LLStringUtil::compareInsensitive("/icanhaseastereggs", cur_token) == 0)
|
||||
{
|
||||
LLViewerImage* kitteh = gImageList.getImageFromFile("easteregg.png", TRUE, TRUE);
|
||||
if (kitteh)
|
||||
{
|
||||
S32 left, top;
|
||||
gFloaterView->getNewFloaterPosition(&left, &top);
|
||||
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
|
||||
rect.translate(left - rect.mLeft, top - rect.mTop);
|
||||
|
||||
LLPreviewTexture* preview;
|
||||
preview = new LLPreviewTexture(rect, "Easter Egg!", kitteh);
|
||||
preview->setSourceID(LLUUID::generateNewID());
|
||||
preview->setFocus(TRUE);
|
||||
preview->center();
|
||||
gFloaterView->adjustToFitScreen(preview, FALSE);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhascookie", cur_token) == 0 ||
|
||||
LLStringUtil::compareInsensitive("/icanhascookies", cur_token) == 0)
|
||||
{
|
||||
LLChat chat;
|
||||
chat.mText = "I made you a cookie but I eated it :(";
|
||||
chat.mSourceType = CHAT_SOURCE_SYSTEM;
|
||||
LLFloaterChat::addChat(chat);
|
||||
if (revised_string)
|
||||
{
|
||||
revised_string->assign(LLStringUtil::null);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhasfailbook", cur_token) == 0)
|
||||
{
|
||||
LLWeb::loadURLInternal("http://failbook.failblog.org/");
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhaszombie", cur_token) == 0 ||
|
||||
LLStringUtil::compareInsensitive("/icanhaszombies", cur_token) == 0)
|
||||
{
|
||||
LLViewerImage* kitteh = gImageList.getImageFromFile("zombiecat.png", TRUE, TRUE);
|
||||
if (kitteh)
|
||||
{
|
||||
S32 left, top;
|
||||
gFloaterView->getNewFloaterPosition(&left, &top);
|
||||
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
|
||||
rect.translate(left - rect.mLeft, top - rect.mTop);
|
||||
|
||||
LLPreviewTexture* preview;
|
||||
preview = new LLPreviewTexture(rect, "Zombiecat!", kitteh);
|
||||
preview->setSourceID(LLUUID::generateNewID());
|
||||
preview->setFocus(TRUE);
|
||||
preview->center();
|
||||
gFloaterView->adjustToFitScreen(preview, FALSE);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhassupport", cur_token) == 0 ||
|
||||
LLStringUtil::compareInsensitive("/icanhashelp", cur_token) == 0 ||
|
||||
LLStringUtil::compareInsensitive("/icanhashalp", cur_token) == 0)
|
||||
{
|
||||
LLWeb::loadURLInternal("http://support.kokuaviewer.org/");
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhasblog", cur_token) == 0)
|
||||
{
|
||||
LLWeb::loadURLInternal("http://kokuaviewer.org/");
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhascodie", cur_token) == 0)
|
||||
{
|
||||
LLChat chat;
|
||||
chat.mText = "All work and no play makes Codie a dull girl. All work and no play...";
|
||||
chat.mSourceType = CHAT_SOURCE_SYSTEM;
|
||||
LLFloaterChat::addChat(chat);
|
||||
if (revised_string)
|
||||
{
|
||||
revised_string->assign(LLStringUtil::null);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhasfail", cur_token) == 0)
|
||||
{
|
||||
LLWeb::loadURLInternal("http://www.failblog.org/");
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhasdownload", cur_token) == 0 ||
|
||||
LLStringUtil::compareInsensitive("/icanhasdownloads", cur_token) == 0 ||
|
||||
LLStringUtil::compareInsensitive("/icanhasupdate", cur_token) == 0 ||
|
||||
LLStringUtil::compareInsensitive("/icanhasupdates", cur_token) == 0 )
|
||||
{
|
||||
LLWeb::loadURLInternal("http://wiki.kokuaviewer.org/wiki/Imprudence:Downloads");
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhasfeatures", cur_token) == 0)
|
||||
{
|
||||
LLWeb::loadURLInternal("http://wiki.kokuaviewer.org/wiki/Imprudence:Features");
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhaswiki", cur_token) == 0)
|
||||
{
|
||||
LLWeb::loadURLInternal("http://wiki.kokuaviewer.org/wiki/");
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhasbugs", cur_token) == 0 ||
|
||||
LLStringUtil::compareInsensitive("/icanhasbug", cur_token) == 0 )
|
||||
{
|
||||
LLWeb::loadURLInternal("http://redmine.kokuaviewer.org/");
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhasgit", cur_token) == 0)
|
||||
{
|
||||
LLWeb::loadURLInternal("http://github.com/imprudence/imprudence/");
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhasplurk", cur_token) == 0)
|
||||
{
|
||||
LLWeb::loadURLInternal("http://plurk.com/imprudence");
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhastwitter", cur_token) == 0)
|
||||
{
|
||||
LLWeb::loadURLInternal("http://twitter.com/ImpViewer");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
else if (LLStringUtil::compareInsensitive("/icanhasimprudence", cur_token) == 0)
|
||||
{
|
||||
LLChat chat;
|
||||
chat.mText = "You are using it right now, silly!...";
|
||||
chat.mSourceType = CHAT_SOURCE_SYSTEM;
|
||||
LLFloaterChat::addChat(chat);
|
||||
if (revised_string)
|
||||
{
|
||||
revised_string->assign(LLStringUtil::null);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhasnoms", cur_token) == 0 ||
|
||||
LLStringUtil::compareInsensitive("/icanhasnom", cur_token) == 0)
|
||||
{
|
||||
LLViewerImage* kitteh = gImageList.getImageFromFile("nomnom.png", TRUE, TRUE);
|
||||
if (kitteh)
|
||||
{
|
||||
S32 left, top;
|
||||
gFloaterView->getNewFloaterPosition(&left, &top);
|
||||
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
|
||||
rect.translate(left - rect.mLeft, top - rect.mTop);
|
||||
|
||||
LLPreviewTexture* preview;
|
||||
preview = new LLPreviewTexture(rect, "Om nom nom!", kitteh);
|
||||
preview->setSourceID(LLUUID::generateNewID());
|
||||
preview->setFocus(TRUE);
|
||||
preview->center();
|
||||
gFloaterView->adjustToFitScreen(preview, FALSE);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhasceilingcat", cur_token) == 0 ||
|
||||
LLStringUtil::compareInsensitive("/icanhascielingcat", cur_token) == 0)
|
||||
{
|
||||
LLViewerImage* kitteh = gImageList.getImageFromFile("ceilingcat.png", TRUE, TRUE);
|
||||
if (kitteh)
|
||||
{
|
||||
S32 left, top;
|
||||
gFloaterView->getNewFloaterPosition(&left, &top);
|
||||
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
|
||||
rect.translate(left - rect.mLeft, top - rect.mTop);
|
||||
|
||||
LLPreviewTexture* preview;
|
||||
preview = new LLPreviewTexture(rect, "Ceiling Cat is watching you!", kitteh);
|
||||
preview->setSourceID(LLUUID::generateNewID());
|
||||
preview->setFocus(TRUE);
|
||||
preview->center();
|
||||
gFloaterView->adjustToFitScreen(preview, FALSE);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhascake", cur_token) == 0 )
|
||||
{
|
||||
LLViewerImage* kitteh = gImageList.getImageFromFile("cakeisalie.png", TRUE, TRUE);
|
||||
if (kitteh)
|
||||
{
|
||||
S32 left, top;
|
||||
gFloaterView->getNewFloaterPosition(&left, &top);
|
||||
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
|
||||
rect.translate(left - rect.mLeft, top - rect.mTop);
|
||||
|
||||
LLPreviewTexture* preview;
|
||||
preview = new LLPreviewTexture(rect, "THE CAKE IS A LIE!", kitteh);
|
||||
preview->setSourceID(LLUUID::generateNewID());
|
||||
preview->setFocus(TRUE);
|
||||
preview->center();
|
||||
gFloaterView->adjustToFitScreen(preview, FALSE);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhastentacles", cur_token) == 0 )
|
||||
{
|
||||
LLViewerImage* kitteh = gImageList.getImageFromFile("octopus.png", TRUE, TRUE);
|
||||
if (kitteh)
|
||||
{
|
||||
S32 left, top;
|
||||
gFloaterView->getNewFloaterPosition(&left, &top);
|
||||
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
|
||||
rect.translate(left - rect.mLeft, top - rect.mTop);
|
||||
|
||||
LLPreviewTexture* preview;
|
||||
preview = new LLPreviewTexture(rect, "All hail the mighty octopus!", kitteh);
|
||||
preview->setSourceID(LLUUID::generateNewID());
|
||||
preview->setFocus(TRUE);
|
||||
preview->center();
|
||||
gFloaterView->adjustToFitScreen(preview, FALSE);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
else if (LLStringUtil::compareInsensitive("/icanhashugs", cur_token) == 0 ||
|
||||
LLStringUtil::compareInsensitive("/icanhashug", cur_token) == 0)
|
||||
{
|
||||
LLViewerImage* kitteh = gImageList.getImageFromFile("hugs.png", TRUE, TRUE);
|
||||
if (kitteh)
|
||||
{
|
||||
S32 left, top;
|
||||
gFloaterView->getNewFloaterPosition(&left, &top);
|
||||
LLRect rect = gSavedSettings.getRect("PreviewTextureRect");
|
||||
rect.translate(left - rect.mLeft, top - rect.mTop);
|
||||
|
||||
LLPreviewTexture* preview;
|
||||
preview = new LLPreviewTexture(rect, "Yes, you can has hugs!", kitteh);
|
||||
preview->setSourceID(LLUUID::generateNewID());
|
||||
preview->setFocus(TRUE);
|
||||
preview->center();
|
||||
gFloaterView->adjustToFitScreen(preview, FALSE);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
if(!gesture)
|
||||
{
|
||||
// This token doesn't match a gesture. Pass it through to the output.
|
||||
|
||||
@@ -546,14 +546,15 @@ void LLHoverView::updateText()
|
||||
|
||||
LLParcel* hover_parcel = LLViewerParcelMgr::getInstance()->getHoverParcel();
|
||||
LLUUID owner;
|
||||
S32 width = 0;
|
||||
S32 height = 0;
|
||||
// Their use is commented out below. No doubt both will get deleted on a later clean up pass.
|
||||
//S32 width = 0;
|
||||
//S32 height = 0;
|
||||
|
||||
if ( hover_parcel )
|
||||
{
|
||||
owner = hover_parcel->getOwnerID();
|
||||
width = S32(LLViewerParcelMgr::getInstance()->getHoverParcelWidth());
|
||||
height = S32(LLViewerParcelMgr::getInstance()->getHoverParcelHeight());
|
||||
// width = S32(LLViewerParcelMgr::getInstance()->getHoverParcelWidth());
|
||||
// height = S32(LLViewerParcelMgr::getInstance()->getHoverParcelHeight());
|
||||
}
|
||||
|
||||
// Line: "Land"
|
||||
|
||||
@@ -1439,7 +1439,6 @@ BOOL move_inv_category_world_to_agent(const LLUUID& object_id,
|
||||
if(drop && accept)
|
||||
{
|
||||
it = inventory_objects.begin();
|
||||
InventoryObjectList::iterator first_it = inventory_objects.begin();
|
||||
LLMoveInv* move_inv = new LLMoveInv;
|
||||
move_inv->mObjectID = object_id;
|
||||
move_inv->mCategoryID = category_id;
|
||||
@@ -1922,24 +1921,11 @@ void LLFolderBridge::pasteFromClipboard()
|
||||
item = model->getItem(objects.get(i));
|
||||
if (item)
|
||||
{
|
||||
copy_inventory_item(
|
||||
gAgent.getID(),
|
||||
item->getPermissions().getOwner(),
|
||||
item->getUUID(),
|
||||
parent_id,
|
||||
std::string(),
|
||||
LLPointer<LLInventoryCallback>(NULL));
|
||||
LLInventoryCategory* cat = model->getCategory(item->getUUID());
|
||||
if(cat)
|
||||
{
|
||||
model->purgeDescendentsOf(mUUID);
|
||||
}
|
||||
LLInventoryObject* obj = model->getObject(item->getUUID());
|
||||
if(!obj) return;
|
||||
obj->removeFromServer();
|
||||
LLPreview::hide(item->getUUID());
|
||||
model->deleteObject(item->getUUID());
|
||||
model->notifyObservers();
|
||||
LLInvFVBridge::changeItemParent(
|
||||
model,
|
||||
(LLViewerInventoryItem*)item,
|
||||
mUUID,
|
||||
FALSE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -455,8 +455,6 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
|
||||
void (*callback)(const LLSD&, void*),
|
||||
void* user_data)
|
||||
{
|
||||
llassert_always(NULL != callback);
|
||||
|
||||
LLUUID id;
|
||||
|
||||
if(!isInventoryUsable())
|
||||
@@ -464,7 +462,8 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
|
||||
llwarns << "Inventory is broken." << llendl;
|
||||
LLSD result;
|
||||
result["failure"] = true;
|
||||
callback(result, user_data);
|
||||
if (callback)
|
||||
callback(result, user_data);
|
||||
}
|
||||
|
||||
|
||||
@@ -473,7 +472,8 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
|
||||
LL_DEBUGS("Inventory") << "Attempt to create simstate category." << LL_ENDL;
|
||||
LLSD result;
|
||||
result["failure"] = true;
|
||||
callback(result, user_data);
|
||||
if (callback)
|
||||
callback(result, user_data);
|
||||
}
|
||||
|
||||
id.generate();
|
||||
@@ -492,10 +492,8 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
|
||||
name.assign(NEW_CATEGORY_NAME);
|
||||
}
|
||||
|
||||
if (user_data) // callback required for acked message.
|
||||
if ((NULL != callback) && (NULL != user_data)) // callback required for acked message.
|
||||
{
|
||||
|
||||
|
||||
LLViewerRegion* viewer_region = gAgent.getRegion();
|
||||
|
||||
if (!viewer_region->capabilitiesReceived())
|
||||
@@ -537,7 +535,10 @@ LLUUID LLInventoryModel::createNewCategory(const LLUUID& parent_id,
|
||||
{
|
||||
// user_data is a LLCategoryCreate object instantiated in the calling
|
||||
// function - bug (or low memory - any leaks?).
|
||||
llwarns << "NULL user_data" << llendl;
|
||||
// Or, it might just be no problem, since passing the callback in the first place is optional.
|
||||
// It's really up to the calling function to know what it passed to pass back to the callback.
|
||||
if (callback)
|
||||
llwarns << "NULL user_data" << llendl;
|
||||
}
|
||||
|
||||
// Add the category to the internal representation
|
||||
@@ -1211,7 +1212,6 @@ void LLInventoryModel::fetchInventoryResponder::result(const LLSD& content)
|
||||
item_array_t items;
|
||||
update_map_t update;
|
||||
S32 count = content["items"].size();
|
||||
bool all_one_folder = true;
|
||||
LLUUID folder_id;
|
||||
// Does this loop ever execute more than once?
|
||||
for(S32 i = 0; i < count; ++i)
|
||||
@@ -1244,10 +1244,6 @@ void LLInventoryModel::fetchInventoryResponder::result(const LLSD& content)
|
||||
{
|
||||
folder_id = titem->getParentUUID();
|
||||
}
|
||||
else
|
||||
{
|
||||
all_one_folder = false;
|
||||
}
|
||||
}
|
||||
|
||||
U32 changes = 0x0;
|
||||
@@ -2960,7 +2956,6 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account)
|
||||
item_array_t items;
|
||||
update_map_t update;
|
||||
S32 count = msg->getNumberOfBlocksFast(_PREHASH_InventoryData);
|
||||
bool all_one_folder = true;
|
||||
LLUUID folder_id;
|
||||
// Does this loop ever execute more than once?
|
||||
for(S32 i = 0; i < count; ++i)
|
||||
@@ -2992,10 +2987,6 @@ bool LLInventoryModel::messageUpdateCore(LLMessageSystem* msg, bool account)
|
||||
{
|
||||
folder_id = titem->getParentUUID();
|
||||
}
|
||||
else
|
||||
{
|
||||
all_one_folder = false;
|
||||
}
|
||||
}
|
||||
if(account)
|
||||
{
|
||||
|
||||
@@ -1652,7 +1652,6 @@ void LLManipRotate::highlightManipulators( S32 x, S32 y )
|
||||
return;
|
||||
}
|
||||
|
||||
LLQuaternion object_rot = first_object->getRenderRotation();
|
||||
LLVector3 rotation_center = gAgent.getPosAgentFromGlobal(mRotationCenter);
|
||||
LLVector3 mouse_dir_x;
|
||||
LLVector3 mouse_dir_y;
|
||||
|
||||
@@ -1172,9 +1172,6 @@ void LLManipScale::dragFace( S32 x, S32 y )
|
||||
mInSnapRegime = FALSE;
|
||||
}
|
||||
|
||||
BOOL send_scale_update = FALSE;
|
||||
BOOL send_position_update = FALSE;
|
||||
|
||||
LLVector3 dir_agent;
|
||||
if( part_dir_local.mV[VX] )
|
||||
{
|
||||
@@ -1191,8 +1188,6 @@ void LLManipScale::dragFace( S32 x, S32 y )
|
||||
stretchFace(
|
||||
projected_vec(drag_start_dir_f, dir_agent) + drag_start_center_agent,
|
||||
projected_vec(drag_delta, dir_agent));
|
||||
send_position_update = TRUE;
|
||||
send_scale_update = TRUE;
|
||||
|
||||
mDragPointGlobal = drag_point_global;
|
||||
}
|
||||
|
||||
@@ -487,9 +487,6 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
|
||||
}
|
||||
}
|
||||
|
||||
// Throttle updates to 10 per second.
|
||||
BOOL send_update = FALSE;
|
||||
|
||||
LLVector3 axis_f;
|
||||
LLVector3d axis_d;
|
||||
|
||||
@@ -701,10 +698,7 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
|
||||
LLVector3 new_position_local = selectNode->mSavedPositionLocal + (clamped_relative_move_f * objWorldRotation);
|
||||
|
||||
// move and clamp root object first, before adjusting children
|
||||
if (new_position_local != old_position_local)
|
||||
{
|
||||
send_update = TRUE;
|
||||
}
|
||||
|
||||
//RN: I forget, but we need to do this because of snapping which doesn't often result
|
||||
// in position changes even when the mouse moves
|
||||
object->setPosition(new_position_local);
|
||||
@@ -714,8 +708,6 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
|
||||
|
||||
if (selectNode->mIndividualSelection)
|
||||
{
|
||||
send_update = FALSE;
|
||||
|
||||
// counter-translate child objects if we are moving the root as an individual
|
||||
object->resetChildrenPosition(old_position_local - new_position_local, TRUE) ;
|
||||
}
|
||||
@@ -752,7 +744,6 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
|
||||
}
|
||||
|
||||
// PR: Only update if changed
|
||||
LLVector3d old_position_global = object->getPositionGlobal();
|
||||
LLVector3 old_position_agent = object->getPositionAgent();
|
||||
LLVector3 new_position_agent = gAgent.getPosAgentFromGlobal(new_position_global);
|
||||
if (object->isRootEdit())
|
||||
@@ -774,11 +765,6 @@ BOOL LLManipTranslate::handleHover(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
// counter-translate child objects if we are moving the root as an individual
|
||||
object->resetChildrenPosition(old_position_agent - new_position_agent, TRUE) ;
|
||||
send_update = FALSE;
|
||||
}
|
||||
else if (old_position_global != new_position_global)
|
||||
{
|
||||
send_update = TRUE;
|
||||
}
|
||||
}
|
||||
selectNode->mLastPositionLocal = object->getPosition();
|
||||
@@ -1302,7 +1288,7 @@ void LLManipTranslate::renderSnapGuides()
|
||||
// add in off-axis offset
|
||||
tick_start += (mSnapOffsetAxis * mSnapOffsetMeters);
|
||||
|
||||
BOOL is_sub_tick = FALSE;
|
||||
// BOOL is_sub_tick = FALSE;
|
||||
F32 tick_scale = 1.f;
|
||||
for (F32 division_level = max_subdivisions; division_level >= sGridMinSubdivisionLevel; division_level /= 2.f)
|
||||
{
|
||||
@@ -1311,7 +1297,7 @@ void LLManipTranslate::renderSnapGuides()
|
||||
break;
|
||||
}
|
||||
tick_scale *= 0.7f;
|
||||
is_sub_tick = TRUE;
|
||||
// is_sub_tick = TRUE;
|
||||
}
|
||||
|
||||
// S32 num_ticks_to_fade = is_sub_tick ? num_ticks_per_side / 2 : num_ticks_per_side;
|
||||
@@ -1533,7 +1519,6 @@ void LLManipTranslate::renderSnapGuides()
|
||||
|
||||
float a = line_alpha;
|
||||
|
||||
LLColor4 col = gColors.getColor("SilhouetteChildColor");
|
||||
{
|
||||
//draw grid behind objects
|
||||
LLGLDepthTest gls_depth(GL_TRUE, GL_FALSE);
|
||||
|
||||
@@ -0,0 +1,813 @@
|
||||
/**
|
||||
* @file llmediadataclient.cpp
|
||||
* @brief class for queueing up requests for media data
|
||||
*
|
||||
* $LicenseInfo:firstyear=2001&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2001-2010, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlife.com/developers/opensource/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlife.com/developers/opensource/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*
|
||||
*/
|
||||
|
||||
#include "llviewerprecompiledheaders.h"
|
||||
|
||||
#include "llmediadataclient.h"
|
||||
|
||||
#if LL_MSVC
|
||||
// disable boost::lexical_cast warning
|
||||
#pragma warning (disable:4702)
|
||||
#endif
|
||||
|
||||
#include <boost/lexical_cast.hpp>
|
||||
|
||||
#include "llhttpstatuscodes.h"
|
||||
#include "llsdutil.h"
|
||||
#include "llmediaentry.h"
|
||||
#include "lltextureentry.h"
|
||||
#include "llviewerregion.h"
|
||||
|
||||
//
|
||||
// When making a request
|
||||
// - obtain the "overall interest score" of the object.
|
||||
// This would be the sum of the impls' interest scores.
|
||||
// - put the request onto a queue sorted by this score
|
||||
// (highest score at the front of the queue)
|
||||
// - On a timer, once a second, pull off the head of the queue and send
|
||||
// the request.
|
||||
// - Any request that gets a 503 still goes through the retry logic
|
||||
//
|
||||
|
||||
//
|
||||
// Forward decls
|
||||
//
|
||||
const F32 LLMediaDataClient::QUEUE_TIMER_DELAY = 1.0; // seconds(s)
|
||||
const F32 LLMediaDataClient::UNAVAILABLE_RETRY_TIMER_DELAY = 10.0; // secs
|
||||
const U32 LLMediaDataClient::MAX_RETRIES = 10;
|
||||
const U32 LLMediaDataClient::MAX_SORTED_QUEUE_SIZE = 10000;
|
||||
const U32 LLMediaDataClient::MAX_ROUND_ROBIN_QUEUE_SIZE = 10000;
|
||||
|
||||
// << operators
|
||||
std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue_t &q);
|
||||
std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::Request &q);
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// LLMediaDataClient
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
LLMediaDataClient::LLMediaDataClient(F32 queue_timer_delay,
|
||||
F32 retry_timer_delay,
|
||||
U32 max_retries,
|
||||
U32 max_sorted_queue_size,
|
||||
U32 max_round_robin_queue_size)
|
||||
: mQueueTimerDelay(queue_timer_delay),
|
||||
mRetryTimerDelay(retry_timer_delay),
|
||||
mMaxNumRetries(max_retries),
|
||||
mMaxSortedQueueSize(max_sorted_queue_size),
|
||||
mMaxRoundRobinQueueSize(max_round_robin_queue_size),
|
||||
mQueueTimerIsRunning(false),
|
||||
mCurrentQueueIsTheSortedQueue(true)
|
||||
{
|
||||
}
|
||||
|
||||
LLMediaDataClient::~LLMediaDataClient()
|
||||
{
|
||||
stopQueueTimer();
|
||||
|
||||
// This should clear the queue, and hopefully call all the destructors.
|
||||
LL_DEBUGS("LLMediaDataClient") << "~LLMediaDataClient destructor: queue: " <<
|
||||
(isEmpty() ? "<empty> " : "<not empty> ") << LL_ENDL;
|
||||
|
||||
mSortedQueue.clear();
|
||||
mRoundRobinQueue.clear();
|
||||
}
|
||||
|
||||
bool LLMediaDataClient::isEmpty() const
|
||||
{
|
||||
return mSortedQueue.empty() && mRoundRobinQueue.empty();
|
||||
}
|
||||
|
||||
bool LLMediaDataClient::isInQueue(const LLMediaDataClientObject::ptr_t &object)
|
||||
{
|
||||
return (LLMediaDataClient::findOrRemove(mSortedQueue, object, false/*remove*/, LLMediaDataClient::Request::ANY).notNull()
|
||||
|| (LLMediaDataClient::findOrRemove(mRoundRobinQueue, object, false/*remove*/, LLMediaDataClient::Request::ANY).notNull()));
|
||||
}
|
||||
|
||||
bool LLMediaDataClient::removeFromQueue(const LLMediaDataClientObject::ptr_t &object)
|
||||
{
|
||||
bool removedFromSortedQueue = LLMediaDataClient::findOrRemove(mSortedQueue, object, true/*remove*/, LLMediaDataClient::Request::ANY).notNull();
|
||||
bool removedFromRoundRobinQueue = LLMediaDataClient::findOrRemove(mRoundRobinQueue, object, true/*remove*/, LLMediaDataClient::Request::ANY).notNull();
|
||||
return removedFromSortedQueue || removedFromRoundRobinQueue;
|
||||
}
|
||||
|
||||
//static
|
||||
LLMediaDataClient::request_ptr_t LLMediaDataClient::findOrRemove(request_queue_t &queue, const LLMediaDataClientObject::ptr_t &obj, bool remove, LLMediaDataClient::Request::Type type)
|
||||
{
|
||||
request_ptr_t result;
|
||||
request_queue_t::iterator iter = queue.begin();
|
||||
request_queue_t::iterator end = queue.end();
|
||||
while (iter != end)
|
||||
{
|
||||
if (obj->getID() == (*iter)->getObject()->getID() && (type == LLMediaDataClient::Request::ANY || type == (*iter)->getType()))
|
||||
{
|
||||
result = *iter;
|
||||
if (remove) queue.erase(iter);
|
||||
break;
|
||||
}
|
||||
iter++;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void LLMediaDataClient::request(const LLMediaDataClientObject::ptr_t &object, const LLSD &payload)
|
||||
{
|
||||
if (object.isNull() || ! object->hasMedia()) return;
|
||||
|
||||
// Push the object on the queue
|
||||
enqueue(new Request(getCapabilityName(), payload, object, this));
|
||||
}
|
||||
|
||||
void LLMediaDataClient::enqueue(const Request *request)
|
||||
{
|
||||
if (request->isNew())
|
||||
{
|
||||
// Add to sorted queue
|
||||
if (LLMediaDataClient::findOrRemove(mSortedQueue, request->getObject(), true/*remove*/, request->getType()).notNull())
|
||||
{
|
||||
LL_DEBUGS("LLMediaDataClient") << "REMOVING OLD request for " << *request << " ALREADY THERE!" << LL_ENDL;
|
||||
}
|
||||
|
||||
LL_DEBUGS("LLMediaDataClient") << "Queuing SORTED request for " << *request << LL_ENDL;
|
||||
|
||||
// Sadly, we have to const-cast because items put into the queue are not const
|
||||
mSortedQueue.push_back(const_cast<LLMediaDataClient::Request*>(request));
|
||||
|
||||
LL_DEBUGS("LLMediaDataClientQueue") << "SORTED queue:" << mSortedQueue << LL_ENDL;
|
||||
}
|
||||
else {
|
||||
if (mRoundRobinQueue.size() > mMaxRoundRobinQueueSize)
|
||||
{
|
||||
LL_INFOS_ONCE("LLMediaDataClient") << "RR QUEUE MAXED OUT!!!" << LL_ENDL;
|
||||
LL_DEBUGS("LLMediaDataClient") << "Not queuing " << *request << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
// ROUND ROBIN: if it is there, and it is a GET request, leave it. If not, put at front!
|
||||
request_ptr_t existing_request;
|
||||
if (request->getType() == Request::GET)
|
||||
{
|
||||
existing_request = LLMediaDataClient::findOrRemove(mRoundRobinQueue, request->getObject(), false/*remove*/, request->getType());
|
||||
}
|
||||
if (existing_request.isNull())
|
||||
{
|
||||
LL_DEBUGS("LLMediaDataClient") << "Queuing RR request for " << *request << LL_ENDL;
|
||||
// Push the request on the pending queue
|
||||
// Sadly, we have to const-cast because items put into the queue are not const
|
||||
mRoundRobinQueue.push_front(const_cast<LLMediaDataClient::Request*>(request));
|
||||
|
||||
LL_DEBUGS("LLMediaDataClientQueue") << "RR queue:" << mRoundRobinQueue << LL_ENDL;
|
||||
}
|
||||
else
|
||||
{
|
||||
LL_DEBUGS("LLMediaDataClient") << "ALREADY THERE: NOT Queuing request for " << *request << LL_ENDL;
|
||||
|
||||
existing_request->markSent(false);
|
||||
}
|
||||
}
|
||||
// Start the timer if not already running
|
||||
startQueueTimer();
|
||||
}
|
||||
|
||||
void LLMediaDataClient::startQueueTimer()
|
||||
{
|
||||
if (! mQueueTimerIsRunning)
|
||||
{
|
||||
LL_DEBUGS("LLMediaDataClient") << "starting queue timer (delay=" << mQueueTimerDelay << " seconds)" << LL_ENDL;
|
||||
// LLEventTimer automagically takes care of the lifetime of this object
|
||||
new QueueTimer(mQueueTimerDelay, this);
|
||||
}
|
||||
else {
|
||||
LL_DEBUGS("LLMediaDataClient") << "not starting queue timer (it's already running, right???)" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
void LLMediaDataClient::stopQueueTimer()
|
||||
{
|
||||
mQueueTimerIsRunning = false;
|
||||
}
|
||||
|
||||
bool LLMediaDataClient::processQueueTimer()
|
||||
{
|
||||
sortQueue();
|
||||
|
||||
if(!isEmpty())
|
||||
{
|
||||
LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() started, SORTED queue size is: " << mSortedQueue.size()
|
||||
<< ", RR queue size is: " << mRoundRobinQueue.size() << LL_ENDL;
|
||||
LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() started, SORTED queue is: " << mSortedQueue << LL_ENDL;
|
||||
LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() started, RR queue is: " << mRoundRobinQueue << LL_ENDL;
|
||||
}
|
||||
|
||||
serviceQueue();
|
||||
|
||||
LL_DEBUGS("LLMediaDataClient") << "QueueTimer::tick() finished, SORTED queue size is: " << mSortedQueue.size()
|
||||
<< ", RR queue size is: " << mRoundRobinQueue.size() << LL_ENDL;
|
||||
LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() finished, SORTED queue is: " << mSortedQueue << LL_ENDL;
|
||||
LL_DEBUGS("LLMediaDataClientQueue") << "QueueTimer::tick() finished, RR queue is: " << mRoundRobinQueue << LL_ENDL;
|
||||
|
||||
return isEmpty();
|
||||
}
|
||||
|
||||
void LLMediaDataClient::sortQueue()
|
||||
{
|
||||
if(!mSortedQueue.empty())
|
||||
{
|
||||
// Score all items first
|
||||
request_queue_t::iterator iter = mSortedQueue.begin();
|
||||
request_queue_t::iterator end = mSortedQueue.end();
|
||||
while (iter != end)
|
||||
{
|
||||
(*iter)->updateScore();
|
||||
iter++;
|
||||
}
|
||||
|
||||
// Re-sort the list...
|
||||
// NOTE: should this be a stable_sort? If so we need to change to using a vector.
|
||||
mSortedQueue.sort(LLMediaDataClient::compareRequests);
|
||||
|
||||
// ...then cull items over the max
|
||||
U32 size = mSortedQueue.size();
|
||||
if (size > mMaxSortedQueueSize)
|
||||
{
|
||||
U32 num_to_cull = (size - mMaxSortedQueueSize);
|
||||
LL_INFOS_ONCE("LLMediaDataClient") << "sorted queue MAXED OUT! Culling "
|
||||
<< num_to_cull << " items" << LL_ENDL;
|
||||
while (num_to_cull-- > 0)
|
||||
{
|
||||
mSortedQueue.pop_back();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// static
|
||||
bool LLMediaDataClient::compareRequests(const request_ptr_t &o1, const request_ptr_t &o2)
|
||||
{
|
||||
if (o2.isNull()) return true;
|
||||
if (o1.isNull()) return false;
|
||||
return ( o1->getScore() > o2->getScore() );
|
||||
}
|
||||
|
||||
void LLMediaDataClient::serviceQueue()
|
||||
{
|
||||
request_queue_t *queue_p = getCurrentQueue();
|
||||
|
||||
// quick retry loop for cases where we shouldn't wait for the next timer tick
|
||||
while(true)
|
||||
{
|
||||
if (queue_p->empty())
|
||||
{
|
||||
LL_DEBUGS("LLMediaDataClient") << "queue empty: " << (*queue_p) << LL_ENDL;
|
||||
break;
|
||||
}
|
||||
|
||||
// Peel one off of the items from the queue, and execute request
|
||||
request_ptr_t request = queue_p->front();
|
||||
llassert(!request.isNull());
|
||||
const LLMediaDataClientObject *object = (request.isNull()) ? NULL : request->getObject();
|
||||
llassert(NULL != object);
|
||||
|
||||
// Check for conditions that would make us just pop and rapidly loop through
|
||||
// the queue.
|
||||
if(request.isNull() ||
|
||||
request->isMarkedSent() ||
|
||||
NULL == object ||
|
||||
object->isDead() ||
|
||||
!object->hasMedia())
|
||||
{
|
||||
if (request.isNull())
|
||||
{
|
||||
LL_WARNS("LLMediaDataClient") << "Skipping NULL request" << LL_ENDL;
|
||||
}
|
||||
else {
|
||||
LL_INFOS("LLMediaDataClient") << "Skipping : " << *request << " "
|
||||
<< ((request->isMarkedSent()) ? " request is marked sent" :
|
||||
((NULL == object) ? " object is NULL " :
|
||||
((object->isDead()) ? "object is dead" :
|
||||
((!object->hasMedia()) ? "object has no media!" : "BADNESS!")))) << LL_ENDL;
|
||||
}
|
||||
queue_p->pop_front();
|
||||
continue; // jump back to the start of the quick retry loop
|
||||
}
|
||||
|
||||
// Next, ask if this is "interesting enough" to fetch. If not, just stop
|
||||
// and wait for the next timer go-round. Only do this for the sorted
|
||||
// queue.
|
||||
if (mCurrentQueueIsTheSortedQueue && !object->isInterestingEnough())
|
||||
{
|
||||
LL_DEBUGS("LLMediaDataClient") << "Not fetching " << *request << ": not interesting enough" << LL_ENDL;
|
||||
break;
|
||||
}
|
||||
|
||||
// Finally, try to send the HTTP message to the cap url
|
||||
std::string url = request->getCapability();
|
||||
bool maybe_retry = false;
|
||||
if (!url.empty())
|
||||
{
|
||||
const LLSD &sd_payload = request->getPayload();
|
||||
LL_INFOS("LLMediaDataClient") << "Sending request for " << *request << LL_ENDL;
|
||||
|
||||
// Call the subclass for creating the responder
|
||||
LLHTTPClient::post(url, sd_payload, createResponder(request));
|
||||
}
|
||||
else {
|
||||
LL_INFOS("LLMediaDataClient") << "NOT Sending request for " << *request << ": empty cap url!" << LL_ENDL;
|
||||
maybe_retry = true;
|
||||
}
|
||||
|
||||
bool exceeded_retries = request->getRetryCount() > mMaxNumRetries;
|
||||
if (maybe_retry && ! exceeded_retries) // Try N times before giving up
|
||||
{
|
||||
// We got an empty cap, but in that case we will retry again next
|
||||
// timer fire.
|
||||
request->incRetryCount();
|
||||
}
|
||||
else {
|
||||
if (exceeded_retries)
|
||||
{
|
||||
LL_WARNS("LLMediaDataClient") << "Could not send request " << *request << " for "
|
||||
<< mMaxNumRetries << " tries...popping object id " << object->getID() << LL_ENDL;
|
||||
// XXX Should we bring up a warning dialog??
|
||||
}
|
||||
|
||||
queue_p->pop_front();
|
||||
|
||||
if (! mCurrentQueueIsTheSortedQueue) {
|
||||
// Round robin
|
||||
request->markSent(true);
|
||||
mRoundRobinQueue.push_back(request);
|
||||
}
|
||||
}
|
||||
|
||||
// end of quick loop -- any cases where we want to loop will use 'continue' to jump back to the start.
|
||||
break;
|
||||
}
|
||||
|
||||
swapCurrentQueue();
|
||||
}
|
||||
|
||||
void LLMediaDataClient::swapCurrentQueue()
|
||||
{
|
||||
// Swap
|
||||
mCurrentQueueIsTheSortedQueue = !mCurrentQueueIsTheSortedQueue;
|
||||
// If its empty, swap back
|
||||
if (getCurrentQueue()->empty())
|
||||
{
|
||||
mCurrentQueueIsTheSortedQueue = !mCurrentQueueIsTheSortedQueue;
|
||||
}
|
||||
}
|
||||
|
||||
LLMediaDataClient::request_queue_t *LLMediaDataClient::getCurrentQueue()
|
||||
{
|
||||
return (mCurrentQueueIsTheSortedQueue) ? &mSortedQueue : &mRoundRobinQueue;
|
||||
}
|
||||
|
||||
// dump the queue
|
||||
std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::request_queue_t &q)
|
||||
{
|
||||
int i = 0;
|
||||
LLMediaDataClient::request_queue_t::const_iterator iter = q.begin();
|
||||
LLMediaDataClient::request_queue_t::const_iterator end = q.end();
|
||||
while (iter != end)
|
||||
{
|
||||
s << "\t" << i << "]: " << (*iter)->getObject()->getID().asString() << "(" << (*iter)->getObject()->getMediaInterest() << ")";
|
||||
iter++;
|
||||
i++;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// LLMediaDataClient::QueueTimer
|
||||
// Queue of LLMediaDataClientObject smart pointers to request media for.
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
LLMediaDataClient::QueueTimer::QueueTimer(F32 time, LLMediaDataClient *mdc)
|
||||
: LLEventTimer(time), mMDC(mdc)
|
||||
{
|
||||
mMDC->setIsRunning(true);
|
||||
}
|
||||
|
||||
LLMediaDataClient::QueueTimer::~QueueTimer()
|
||||
{
|
||||
LL_DEBUGS("LLMediaDataClient") << "~QueueTimer" << LL_ENDL;
|
||||
mMDC->setIsRunning(false);
|
||||
mMDC = NULL;
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLMediaDataClient::QueueTimer::tick()
|
||||
{
|
||||
if (mMDC.isNull()) return TRUE;
|
||||
return mMDC->processQueueTimer();
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// LLMediaDataClient::Responder::RetryTimer
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
LLMediaDataClient::Responder::RetryTimer::RetryTimer(F32 time, Responder *mdr)
|
||||
: LLEventTimer(time), mResponder(mdr)
|
||||
{
|
||||
}
|
||||
|
||||
// virtual
|
||||
LLMediaDataClient::Responder::RetryTimer::~RetryTimer()
|
||||
{
|
||||
LL_DEBUGS("LLMediaDataClient") << "~RetryTimer" << *(mResponder->getRequest()) << LL_ENDL;
|
||||
|
||||
// XXX This is weird: Instead of doing the work in tick() (which re-schedules
|
||||
// a timer, which might be risky), do it here, in the destructor. Yes, it is very odd.
|
||||
// Instead of retrying, we just put the request back onto the queue
|
||||
LL_INFOS("LLMediaDataClient") << "RetryTimer fired for: " << *(mResponder->getRequest()) << " retrying" << LL_ENDL;
|
||||
mResponder->getRequest()->reEnqueue();
|
||||
|
||||
// Release the ref to the responder.
|
||||
mResponder = NULL;
|
||||
}
|
||||
|
||||
// virtual
|
||||
BOOL LLMediaDataClient::Responder::RetryTimer::tick()
|
||||
{
|
||||
// Don't fire again
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// LLMediaDataClient::Request
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
/*static*/U32 LLMediaDataClient::Request::sNum = 0;
|
||||
|
||||
LLMediaDataClient::Request::Request(const char *cap_name,
|
||||
const LLSD& sd_payload,
|
||||
LLMediaDataClientObject *obj,
|
||||
LLMediaDataClient *mdc)
|
||||
: mCapName(cap_name),
|
||||
mPayload(sd_payload),
|
||||
mObject(obj),
|
||||
mNum(++sNum),
|
||||
mRetryCount(0),
|
||||
mMDC(mdc),
|
||||
mMarkedSent(false),
|
||||
mScore((F64)0.0)
|
||||
{
|
||||
}
|
||||
|
||||
LLMediaDataClient::Request::~Request()
|
||||
{
|
||||
LL_DEBUGS("LLMediaDataClient") << "~Request" << (*this) << LL_ENDL;
|
||||
mMDC = NULL;
|
||||
mObject = NULL;
|
||||
}
|
||||
|
||||
|
||||
std::string LLMediaDataClient::Request::getCapability() const
|
||||
{
|
||||
return getObject()->getCapabilityUrl(getCapName());
|
||||
}
|
||||
|
||||
// Helper function to get the "type" of request, which just pokes around to
|
||||
// discover it.
|
||||
LLMediaDataClient::Request::Type LLMediaDataClient::Request::getType() const
|
||||
{
|
||||
if (0 == strcmp(mCapName, "ObjectMediaNavigate"))
|
||||
{
|
||||
return NAVIGATE;
|
||||
}
|
||||
else if (0 == strcmp(mCapName, "ObjectMedia"))
|
||||
{
|
||||
const std::string &verb = mPayload["verb"];
|
||||
if (verb == "GET")
|
||||
{
|
||||
return GET;
|
||||
}
|
||||
else if (verb == "UPDATE")
|
||||
{
|
||||
return UPDATE;
|
||||
}
|
||||
}
|
||||
llassert(false);
|
||||
return GET;
|
||||
}
|
||||
|
||||
const char *LLMediaDataClient::Request::getTypeAsString() const
|
||||
{
|
||||
Type t = getType();
|
||||
switch (t)
|
||||
{
|
||||
case GET:
|
||||
return "GET";
|
||||
break;
|
||||
case UPDATE:
|
||||
return "UPDATE";
|
||||
break;
|
||||
case NAVIGATE:
|
||||
return "NAVIGATE";
|
||||
break;
|
||||
case ANY:
|
||||
return "ANY";
|
||||
break;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
void LLMediaDataClient::Request::reEnqueue() const
|
||||
{
|
||||
// I sure hope this doesn't deref a bad pointer:
|
||||
mMDC->enqueue(this);
|
||||
}
|
||||
|
||||
F32 LLMediaDataClient::Request::getRetryTimerDelay() const
|
||||
{
|
||||
return (mMDC == NULL) ? LLMediaDataClient::UNAVAILABLE_RETRY_TIMER_DELAY :
|
||||
mMDC->mRetryTimerDelay;
|
||||
}
|
||||
|
||||
U32 LLMediaDataClient::Request::getMaxNumRetries() const
|
||||
{
|
||||
return (mMDC == NULL) ? LLMediaDataClient::MAX_RETRIES : mMDC->mMaxNumRetries;
|
||||
}
|
||||
|
||||
void LLMediaDataClient::Request::markSent(bool flag)
|
||||
{
|
||||
if (mMarkedSent != flag)
|
||||
{
|
||||
mMarkedSent = flag;
|
||||
if (!mMarkedSent)
|
||||
{
|
||||
mNum = ++sNum;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void LLMediaDataClient::Request::updateScore()
|
||||
{
|
||||
F64 tmp = mObject->getMediaInterest();
|
||||
if (tmp != mScore)
|
||||
{
|
||||
LL_DEBUGS("LLMediaDataClient") << "Score for " << mObject->getID() << " changed from " << mScore << " to " << tmp << LL_ENDL;
|
||||
mScore = tmp;
|
||||
}
|
||||
}
|
||||
|
||||
std::ostream& operator<<(std::ostream &s, const LLMediaDataClient::Request &r)
|
||||
{
|
||||
s << "request: num=" << r.getNum()
|
||||
<< " type=" << r.getTypeAsString()
|
||||
<< " ID=" << r.getObject()->getID()
|
||||
<< " #retries=" << r.getRetryCount();
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// LLMediaDataClient::Responder
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
LLMediaDataClient::Responder::Responder(const request_ptr_t &request)
|
||||
: mRequest(request)
|
||||
{
|
||||
}
|
||||
|
||||
LLMediaDataClient::Responder::~Responder()
|
||||
{
|
||||
LL_DEBUGS("LLMediaDataClient") << "~Responder" << *(getRequest()) << LL_ENDL;
|
||||
mRequest = NULL;
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLMediaDataClient::Responder::error(U32 status, const std::string& reason)
|
||||
{
|
||||
if (status == HTTP_SERVICE_UNAVAILABLE)
|
||||
{
|
||||
F32 retry_timeout = mRequest->getRetryTimerDelay();
|
||||
|
||||
mRequest->incRetryCount();
|
||||
|
||||
if (mRequest->getRetryCount() < mRequest->getMaxNumRetries())
|
||||
{
|
||||
LL_INFOS("LLMediaDataClient") << *mRequest << " got SERVICE_UNAVAILABLE...retrying in " << retry_timeout << " seconds" << LL_ENDL;
|
||||
|
||||
// Start timer (instances are automagically tracked by
|
||||
// InstanceTracker<> and LLEventTimer)
|
||||
new RetryTimer(F32(retry_timeout/*secs*/), this);
|
||||
}
|
||||
else {
|
||||
LL_INFOS("LLMediaDataClient") << *mRequest << " got SERVICE_UNAVAILABLE...retry count "
|
||||
<< mRequest->getRetryCount() << " exceeds " << mRequest->getMaxNumRetries() << ", not retrying" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
else {
|
||||
std::string msg = boost::lexical_cast<std::string>(status) + ": " + reason;
|
||||
LL_WARNS("LLMediaDataClient") << *mRequest << " http error(" << msg << ")" << LL_ENDL;
|
||||
}
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLMediaDataClient::Responder::result(const LLSD& content)
|
||||
{
|
||||
LL_DEBUGS("LLMediaDataClientResponse") << *mRequest << " result : " << ll_print_sd(content) << LL_ENDL;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// LLObjectMediaDataClient
|
||||
// Subclass of LLMediaDataClient for the ObjectMedia cap
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
LLMediaDataClient::Responder *LLObjectMediaDataClient::createResponder(const request_ptr_t &request) const
|
||||
{
|
||||
return new LLObjectMediaDataClient::Responder(request);
|
||||
}
|
||||
|
||||
const char *LLObjectMediaDataClient::getCapabilityName() const
|
||||
{
|
||||
return "ObjectMedia";
|
||||
}
|
||||
|
||||
void LLObjectMediaDataClient::fetchMedia(LLMediaDataClientObject *object)
|
||||
{
|
||||
LLSD sd_payload;
|
||||
sd_payload["verb"] = "GET";
|
||||
sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID();
|
||||
request(object, sd_payload);
|
||||
}
|
||||
|
||||
void LLObjectMediaDataClient::updateMedia(LLMediaDataClientObject *object)
|
||||
{
|
||||
LLSD sd_payload;
|
||||
sd_payload["verb"] = "UPDATE";
|
||||
sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID();
|
||||
LLSD object_media_data;
|
||||
int i = 0;
|
||||
int end = object->getMediaDataCount();
|
||||
for ( ; i < end ; ++i)
|
||||
{
|
||||
object_media_data.append(object->getMediaDataLLSD(i));
|
||||
}
|
||||
sd_payload[LLTextureEntry::OBJECT_MEDIA_DATA_KEY] = object_media_data;
|
||||
|
||||
LL_DEBUGS("LLMediaDataClient") << "update media data: " << object->getID() << " " << ll_print_sd(sd_payload) << LL_ENDL;
|
||||
|
||||
request(object, sd_payload);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLObjectMediaDataClient::Responder::result(const LLSD& content)
|
||||
{
|
||||
const LLMediaDataClient::Request::Type type = getRequest()->getType();
|
||||
llassert(type == LLMediaDataClient::Request::GET || type == LLMediaDataClient::Request::UPDATE)
|
||||
if (type == LLMediaDataClient::Request::GET)
|
||||
{
|
||||
LL_DEBUGS("LLMediaDataClientResponse") << *(getRequest()) << " GET returned: " << ll_print_sd(content) << LL_ENDL;
|
||||
|
||||
// Look for an error
|
||||
if (content.has("error"))
|
||||
{
|
||||
const LLSD &error = content["error"];
|
||||
LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error getting media data for object: code=" <<
|
||||
error["code"].asString() << ": " << error["message"].asString() << LL_ENDL;
|
||||
|
||||
// XXX Warn user?
|
||||
}
|
||||
else {
|
||||
// Check the data
|
||||
const LLUUID &object_id = content[LLTextureEntry::OBJECT_ID_KEY];
|
||||
if (object_id != getRequest()->getObject()->getID())
|
||||
{
|
||||
// NOT good, wrong object id!!
|
||||
LL_WARNS("LLMediaDataClient") << *(getRequest()) << " DROPPING response with wrong object id (" << object_id << ")" << LL_ENDL;
|
||||
return;
|
||||
}
|
||||
|
||||
// Otherwise, update with object media data
|
||||
getRequest()->getObject()->updateObjectMediaData(content[LLTextureEntry::OBJECT_MEDIA_DATA_KEY],
|
||||
content[LLTextureEntry::MEDIA_VERSION_KEY]);
|
||||
}
|
||||
}
|
||||
else if (type == LLMediaDataClient::Request::UPDATE)
|
||||
{
|
||||
// just do what our superclass does
|
||||
LLMediaDataClient::Responder::result(content);
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// LLObjectMediaNavigateClient
|
||||
// Subclass of LLMediaDataClient for the ObjectMediaNavigate cap
|
||||
//
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
LLMediaDataClient::Responder *LLObjectMediaNavigateClient::createResponder(const request_ptr_t &request) const
|
||||
{
|
||||
return new LLObjectMediaNavigateClient::Responder(request);
|
||||
}
|
||||
|
||||
const char *LLObjectMediaNavigateClient::getCapabilityName() const
|
||||
{
|
||||
return "ObjectMediaNavigate";
|
||||
}
|
||||
|
||||
void LLObjectMediaNavigateClient::navigate(LLMediaDataClientObject *object, U8 texture_index, const std::string &url)
|
||||
{
|
||||
LLSD sd_payload;
|
||||
sd_payload[LLTextureEntry::OBJECT_ID_KEY] = object->getID();
|
||||
sd_payload[LLMediaEntry::CURRENT_URL_KEY] = url;
|
||||
sd_payload[LLTextureEntry::TEXTURE_INDEX_KEY] = (LLSD::Integer)texture_index;
|
||||
|
||||
LL_INFOS("LLMediaDataClient") << "navigate() initiated: " << ll_print_sd(sd_payload) << LL_ENDL;
|
||||
|
||||
request(object, sd_payload);
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLObjectMediaNavigateClient::Responder::error(U32 status, const std::string& reason)
|
||||
{
|
||||
// Bounce back (unless HTTP_SERVICE_UNAVAILABLE, in which case call base
|
||||
// class
|
||||
if (status == HTTP_SERVICE_UNAVAILABLE)
|
||||
{
|
||||
LLMediaDataClient::Responder::error(status, reason);
|
||||
}
|
||||
else {
|
||||
// bounce the face back
|
||||
LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error navigating: http code=" << status << LL_ENDL;
|
||||
const LLSD &payload = getRequest()->getPayload();
|
||||
// bounce the face back
|
||||
getRequest()->getObject()->mediaNavigateBounceBack((LLSD::Integer)payload[LLTextureEntry::TEXTURE_INDEX_KEY]);
|
||||
}
|
||||
}
|
||||
|
||||
/*virtual*/
|
||||
void LLObjectMediaNavigateClient::Responder::result(const LLSD& content)
|
||||
{
|
||||
LL_INFOS("LLMediaDataClient") << *(getRequest()) << " NAVIGATE returned " << ll_print_sd(content) << LL_ENDL;
|
||||
|
||||
if (content.has("error"))
|
||||
{
|
||||
const LLSD &error = content["error"];
|
||||
int error_code = error["code"];
|
||||
|
||||
if (ERROR_PERMISSION_DENIED_CODE == error_code)
|
||||
{
|
||||
LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Navigation denied: bounce back" << LL_ENDL;
|
||||
const LLSD &payload = getRequest()->getPayload();
|
||||
// bounce the face back
|
||||
getRequest()->getObject()->mediaNavigateBounceBack((LLSD::Integer)payload[LLTextureEntry::TEXTURE_INDEX_KEY]);
|
||||
}
|
||||
else {
|
||||
LL_WARNS("LLMediaDataClient") << *(getRequest()) << " Error navigating: code=" <<
|
||||
error["code"].asString() << ": " << error["message"].asString() << LL_ENDL;
|
||||
}
|
||||
// XXX Warn user?
|
||||
}
|
||||
else {
|
||||
// just do what our superclass does
|
||||
LLMediaDataClient::Responder::result(content);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,341 @@
|
||||
/**
|
||||
* @file llmediadataclient.h
|
||||
* @brief class for queueing up requests to the media service
|
||||
*
|
||||
* $LicenseInfo:firstyear=2007&license=viewergpl$
|
||||
*
|
||||
* Copyright (c) 2007-2010, Linden Research, Inc.
|
||||
*
|
||||
* Second Life Viewer Source Code
|
||||
* The source code in this file ("Source Code") is provided by Linden Lab
|
||||
* to you under the terms of the GNU General Public License, version 2.0
|
||||
* ("GPL"), unless you have obtained a separate licensing agreement
|
||||
* ("Other License"), formally executed by you and Linden Lab. Terms of
|
||||
* the GPL can be found in doc/GPL-license.txt in this distribution, or
|
||||
* online at http://secondlife.com/developers/opensource/gplv2
|
||||
*
|
||||
* There are special exceptions to the terms and conditions of the GPL as
|
||||
* it is applied to this Source Code. View the full text of the exception
|
||||
* in the file doc/FLOSS-exception.txt in this software distribution, or
|
||||
* online at
|
||||
* http://secondlife.com/developers/opensource/flossexception
|
||||
*
|
||||
* By copying, modifying or distributing this software, you acknowledge
|
||||
* that you have read and understood your obligations described above,
|
||||
* and agree to abide by those obligations.
|
||||
*
|
||||
* ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
|
||||
* WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
|
||||
* COMPLETENESS OR PERFORMANCE.
|
||||
* $/LicenseInfo$
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef LL_LLMEDIADATACLIENT_H
|
||||
#define LL_LLMEDIADATACLIENT_H
|
||||
|
||||
#include "llhttpclient.h"
|
||||
#include <queue>
|
||||
//#include "llrefcount.h"
|
||||
//#include "llpointer.h"
|
||||
//#include "lleventtimer.h"
|
||||
|
||||
|
||||
// Link seam for LLVOVolume
|
||||
class LLMediaDataClientObject : public LLRefCount
|
||||
{
|
||||
public:
|
||||
// Get the number of media data items
|
||||
virtual U8 getMediaDataCount() const = 0;
|
||||
// Get the media data at index, as an LLSD
|
||||
virtual LLSD getMediaDataLLSD(U8 index) const = 0;
|
||||
// Get this object's UUID
|
||||
virtual LLUUID getID() const = 0;
|
||||
// Navigate back to previous URL
|
||||
virtual void mediaNavigateBounceBack(U8 index) = 0;
|
||||
// Does this object have media?
|
||||
virtual bool hasMedia() const = 0;
|
||||
// Update the object's media data to the given array
|
||||
virtual void updateObjectMediaData(LLSD const &media_data_array, const std::string &version_string) = 0;
|
||||
// Return the total "interest" of the media (on-screen area)
|
||||
virtual F64 getMediaInterest() const = 0;
|
||||
// Return the given cap url
|
||||
virtual std::string getCapabilityUrl(const std::string &name) const = 0;
|
||||
// Return whether the object has been marked dead
|
||||
virtual bool isDead() const = 0;
|
||||
// Returns a media version number for the object
|
||||
virtual U32 getMediaVersion() const = 0;
|
||||
// Returns whether the object is "interesting enough" to fetch
|
||||
virtual bool isInterestingEnough() const = 0;
|
||||
// Returns whether we've seen this object yet or not
|
||||
virtual bool isNew() const = 0;
|
||||
|
||||
// smart pointer
|
||||
typedef LLPointer<LLMediaDataClientObject> ptr_t;
|
||||
};
|
||||
|
||||
// This object creates a priority queue for requests.
|
||||
// Abstracts the Cap URL, the request, and the responder
|
||||
class LLMediaDataClient : public LLRefCount
|
||||
{
|
||||
public:
|
||||
LOG_CLASS(LLMediaDataClient);
|
||||
|
||||
const static F32 QUEUE_TIMER_DELAY;// = 1.0; // seconds(s)
|
||||
const static F32 UNAVAILABLE_RETRY_TIMER_DELAY;// = 5.0; // secs
|
||||
const static U32 MAX_RETRIES;// = 4;
|
||||
const static U32 MAX_SORTED_QUEUE_SIZE;// = 10000;
|
||||
const static U32 MAX_ROUND_ROBIN_QUEUE_SIZE;// = 10000;
|
||||
|
||||
// Constructor
|
||||
LLMediaDataClient(F32 queue_timer_delay = QUEUE_TIMER_DELAY,
|
||||
F32 retry_timer_delay = UNAVAILABLE_RETRY_TIMER_DELAY,
|
||||
U32 max_retries = MAX_RETRIES,
|
||||
U32 max_sorted_queue_size = MAX_SORTED_QUEUE_SIZE,
|
||||
U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE);
|
||||
|
||||
// Make the request
|
||||
void request(const LLMediaDataClientObject::ptr_t &object, const LLSD &payload);
|
||||
|
||||
F32 getRetryTimerDelay() const { return mRetryTimerDelay; }
|
||||
|
||||
// Returns true iff the queue is empty
|
||||
bool isEmpty() const;
|
||||
|
||||
// Returns true iff the given object is in the queue
|
||||
bool isInQueue(const LLMediaDataClientObject::ptr_t &object);
|
||||
|
||||
// Remove the given object from the queue. Returns true iff the given object is removed.
|
||||
bool removeFromQueue(const LLMediaDataClientObject::ptr_t &object);
|
||||
|
||||
// Called only by the Queue timer and tests (potentially)
|
||||
bool processQueueTimer();
|
||||
|
||||
protected:
|
||||
// Destructor
|
||||
virtual ~LLMediaDataClient(); // use unref
|
||||
|
||||
// Request
|
||||
class Request : public LLRefCount
|
||||
{
|
||||
public:
|
||||
enum Type {
|
||||
GET,
|
||||
UPDATE,
|
||||
NAVIGATE,
|
||||
ANY
|
||||
};
|
||||
|
||||
Request(const char *cap_name, const LLSD& sd_payload, LLMediaDataClientObject *obj, LLMediaDataClient *mdc);
|
||||
const char *getCapName() const { return mCapName; }
|
||||
const LLSD &getPayload() const { return mPayload; }
|
||||
LLMediaDataClientObject *getObject() const { return mObject; }
|
||||
|
||||
U32 getNum() const { return mNum; }
|
||||
|
||||
U32 getRetryCount() const { return mRetryCount; }
|
||||
void incRetryCount() { mRetryCount++; }
|
||||
|
||||
// Note: may return empty string!
|
||||
std::string getCapability() const;
|
||||
|
||||
Type getType() const;
|
||||
const char *getTypeAsString() const;
|
||||
|
||||
// Re-enqueue thyself
|
||||
void reEnqueue() const;
|
||||
|
||||
F32 getRetryTimerDelay() const;
|
||||
U32 getMaxNumRetries() const;
|
||||
|
||||
bool isNew() const { return mObject.notNull() ? mObject->isNew() : false; }
|
||||
void markSent(bool flag);
|
||||
bool isMarkedSent() const { return mMarkedSent; }
|
||||
void updateScore();
|
||||
F64 getScore() const { return mScore; }
|
||||
|
||||
public:
|
||||
friend std::ostream& operator<<(std::ostream &s, const Request &q);
|
||||
|
||||
protected:
|
||||
virtual ~Request(); // use unref();
|
||||
|
||||
private:
|
||||
const char *mCapName;
|
||||
LLSD mPayload;
|
||||
LLMediaDataClientObject::ptr_t mObject;
|
||||
// Simple tracking
|
||||
U32 mNum;
|
||||
static U32 sNum;
|
||||
U32 mRetryCount;
|
||||
F64 mScore;
|
||||
bool mMarkedSent;
|
||||
|
||||
// Back pointer to the MDC...not a ref!
|
||||
LLMediaDataClient *mMDC;
|
||||
};
|
||||
typedef LLPointer<Request> request_ptr_t;
|
||||
|
||||
// Responder
|
||||
class Responder : public LLHTTPClient::Responder
|
||||
{
|
||||
public:
|
||||
Responder(const request_ptr_t &request);
|
||||
//If we get back an error (not found, etc...), handle it here
|
||||
virtual void error(U32 status, const std::string& reason);
|
||||
//If we get back a normal response, handle it here. Default just logs it.
|
||||
virtual void result(const LLSD& content);
|
||||
|
||||
const request_ptr_t &getRequest() const { return mRequest; }
|
||||
|
||||
protected:
|
||||
virtual ~Responder();
|
||||
|
||||
private:
|
||||
|
||||
class RetryTimer : public LLEventTimer
|
||||
{
|
||||
public:
|
||||
RetryTimer(F32 time, Responder *);
|
||||
virtual ~RetryTimer();
|
||||
virtual BOOL tick();
|
||||
private:
|
||||
// back-pointer
|
||||
boost::intrusive_ptr<Responder> mResponder;
|
||||
};
|
||||
|
||||
request_ptr_t mRequest;
|
||||
};
|
||||
|
||||
protected:
|
||||
|
||||
// Subclasses must override this factory method to return a new responder
|
||||
virtual Responder *createResponder(const request_ptr_t &request) const = 0;
|
||||
|
||||
// Subclasses must override to return a cap name
|
||||
virtual const char *getCapabilityName() const = 0;
|
||||
|
||||
virtual void sortQueue();
|
||||
virtual void serviceQueue();
|
||||
|
||||
private:
|
||||
typedef std::list<request_ptr_t> request_queue_t;
|
||||
|
||||
void enqueue(const Request*);
|
||||
|
||||
// Return whether the given object is/was in the queue
|
||||
static LLMediaDataClient::request_ptr_t findOrRemove(request_queue_t &queue, const LLMediaDataClientObject::ptr_t &obj, bool remove, Request::Type type);
|
||||
|
||||
// Comparator for sorting
|
||||
static bool compareRequests(const request_ptr_t &o1, const request_ptr_t &o2);
|
||||
static F64 getObjectScore(const LLMediaDataClientObject::ptr_t &obj);
|
||||
|
||||
friend std::ostream& operator<<(std::ostream &s, const Request &q);
|
||||
friend std::ostream& operator<<(std::ostream &s, const request_queue_t &q);
|
||||
|
||||
class QueueTimer : public LLEventTimer
|
||||
{
|
||||
public:
|
||||
QueueTimer(F32 time, LLMediaDataClient *mdc);
|
||||
virtual BOOL tick();
|
||||
protected:
|
||||
virtual ~QueueTimer();
|
||||
private:
|
||||
// back-pointer
|
||||
LLPointer<LLMediaDataClient> mMDC;
|
||||
};
|
||||
|
||||
void startQueueTimer();
|
||||
void stopQueueTimer();
|
||||
void setIsRunning(bool val) { mQueueTimerIsRunning = val; }
|
||||
|
||||
void swapCurrentQueue();
|
||||
request_queue_t *getCurrentQueue();
|
||||
|
||||
const F32 mQueueTimerDelay;
|
||||
const F32 mRetryTimerDelay;
|
||||
const U32 mMaxNumRetries;
|
||||
const U32 mMaxSortedQueueSize;
|
||||
const U32 mMaxRoundRobinQueueSize;
|
||||
|
||||
bool mQueueTimerIsRunning;
|
||||
|
||||
request_queue_t mSortedQueue;
|
||||
request_queue_t mRoundRobinQueue;
|
||||
bool mCurrentQueueIsTheSortedQueue;
|
||||
};
|
||||
|
||||
|
||||
// MediaDataClient specific for the ObjectMedia cap
|
||||
class LLObjectMediaDataClient : public LLMediaDataClient
|
||||
{
|
||||
public:
|
||||
LLObjectMediaDataClient(F32 queue_timer_delay = QUEUE_TIMER_DELAY,
|
||||
F32 retry_timer_delay = UNAVAILABLE_RETRY_TIMER_DELAY,
|
||||
U32 max_retries = MAX_RETRIES,
|
||||
U32 max_sorted_queue_size = MAX_SORTED_QUEUE_SIZE,
|
||||
U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE)
|
||||
: LLMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries)
|
||||
{}
|
||||
virtual ~LLObjectMediaDataClient() {}
|
||||
|
||||
void fetchMedia(LLMediaDataClientObject *object);
|
||||
void updateMedia(LLMediaDataClientObject *object);
|
||||
|
||||
protected:
|
||||
// Subclasses must override this factory method to return a new responder
|
||||
virtual Responder *createResponder(const request_ptr_t &request) const;
|
||||
|
||||
// Subclasses must override to return a cap name
|
||||
virtual const char *getCapabilityName() const;
|
||||
|
||||
class Responder : public LLMediaDataClient::Responder
|
||||
{
|
||||
public:
|
||||
Responder(const request_ptr_t &request)
|
||||
: LLMediaDataClient::Responder(request) {}
|
||||
virtual void result(const LLSD &content);
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
// MediaDataClient specific for the ObjectMediaNavigate cap
|
||||
class LLObjectMediaNavigateClient : public LLMediaDataClient
|
||||
{
|
||||
public:
|
||||
// NOTE: from llmediaservice.h
|
||||
static const int ERROR_PERMISSION_DENIED_CODE = 8002;
|
||||
|
||||
LLObjectMediaNavigateClient(F32 queue_timer_delay = QUEUE_TIMER_DELAY,
|
||||
F32 retry_timer_delay = UNAVAILABLE_RETRY_TIMER_DELAY,
|
||||
U32 max_retries = MAX_RETRIES,
|
||||
U32 max_sorted_queue_size = MAX_SORTED_QUEUE_SIZE,
|
||||
U32 max_round_robin_queue_size = MAX_ROUND_ROBIN_QUEUE_SIZE)
|
||||
: LLMediaDataClient(queue_timer_delay, retry_timer_delay, max_retries)
|
||||
{}
|
||||
virtual ~LLObjectMediaNavigateClient() {}
|
||||
|
||||
void navigate(LLMediaDataClientObject *object, U8 texture_index, const std::string &url);
|
||||
|
||||
protected:
|
||||
// Subclasses must override this factory method to return a new responder
|
||||
virtual Responder *createResponder(const request_ptr_t &request) const;
|
||||
|
||||
// Subclasses must override to return a cap name
|
||||
virtual const char *getCapabilityName() const;
|
||||
|
||||
class Responder : public LLMediaDataClient::Responder
|
||||
{
|
||||
public:
|
||||
Responder(const request_ptr_t &request)
|
||||
: LLMediaDataClient::Responder(request) {}
|
||||
virtual void error(U32 status, const std::string& reason);
|
||||
virtual void result(const LLSD &content);
|
||||
private:
|
||||
void mediaNavigateBounceBack();
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // LL_LLMEDIADATACLIENT_H
|
||||
@@ -1321,11 +1321,11 @@ void LLPanelAvatar::setAvatarID(const LLUUID &avatar_id, const std::string &name
|
||||
{
|
||||
if (avatar_id.isNull()) return;
|
||||
|
||||
BOOL avatar_changed = FALSE;
|
||||
if (avatar_id != mAvatarID)
|
||||
{
|
||||
avatar_changed = TRUE;
|
||||
}
|
||||
// BOOL avatar_changed = FALSE;
|
||||
// if (avatar_id != mAvatarID)
|
||||
// {
|
||||
// avatar_changed = TRUE;
|
||||
// }
|
||||
mAvatarID = avatar_id;
|
||||
|
||||
// Determine if we have their calling card.
|
||||
|
||||
@@ -83,8 +83,6 @@
|
||||
|
||||
BOOL LLPanelContents::postBuild()
|
||||
{
|
||||
LLRect rect = this->getRect();
|
||||
|
||||
setMouseOpaque(FALSE);
|
||||
|
||||
childSetAction("button new script",&LLPanelContents::onClickNewScript, this);
|
||||
|
||||
@@ -74,7 +74,6 @@
|
||||
|
||||
BOOL LLPanelFace::postBuild()
|
||||
{
|
||||
LLRect rect = this->getRect();
|
||||
LLTextureCtrl* mTextureCtrl;
|
||||
LLColorSwatchCtrl* mColorSwatch;
|
||||
|
||||
|
||||
@@ -1390,13 +1390,11 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,
|
||||
S32 cur_land_tax;
|
||||
S32 cur_group_tax;
|
||||
S32 cur_parcel_dir_fee;
|
||||
S32 cur_total_tax;
|
||||
S32 proj_object_tax;
|
||||
S32 proj_light_tax;
|
||||
S32 proj_land_tax;
|
||||
S32 proj_group_tax;
|
||||
S32 proj_parcel_dir_fee;
|
||||
S32 proj_total_tax;
|
||||
S32 non_exempt_members;
|
||||
|
||||
msg->getS32Fast(_PREHASH_MoneyData, _PREHASH_IntervalDays, interval_days );
|
||||
@@ -1420,9 +1418,6 @@ void LLGroupMoneyPlanningTabEventHandler::processReply(LLMessageSystem* msg,
|
||||
msg->getStringFast(_PREHASH_MoneyData, _PREHASH_LastTaxDate, last_stipend_date);
|
||||
msg->getStringFast(_PREHASH_MoneyData, _PREHASH_TaxDate, next_stipend_date);
|
||||
|
||||
cur_total_tax = cur_object_tax + cur_light_tax + cur_land_tax + cur_group_tax + cur_parcel_dir_fee;
|
||||
proj_total_tax = proj_object_tax + proj_light_tax + proj_land_tax + proj_group_tax + proj_parcel_dir_fee;
|
||||
|
||||
if (interval_days != mImplementationp->mIntervalLength ||
|
||||
current_interval != mImplementationp->mCurrentInterval)
|
||||
{
|
||||
|
||||
@@ -602,18 +602,17 @@ void LLPanelLogin::addServer(const std::string& server)
|
||||
const std::string &defaultGrid = gHippoGridManager->getDefaultGridNick();
|
||||
|
||||
LLComboBox *grids = sInstance->getChild<LLComboBox>("server_combo");
|
||||
S32 selectIndex = -1, i = 0;
|
||||
S32 i = 0;
|
||||
grids->removeall();
|
||||
if (defaultGrid != "") {
|
||||
grids->add(defaultGrid);
|
||||
selectIndex = i++;
|
||||
i++;
|
||||
}
|
||||
HippoGridManager::GridIterator it, end = gHippoGridManager->endGrid();
|
||||
for (it = gHippoGridManager->beginGrid(); it != end; ++it) {
|
||||
const std::string &grid = it->second->getGridNick();
|
||||
if (grid != defaultGrid) {
|
||||
grids->add(grid);
|
||||
//if (grid == mCurGrid) selectIndex = i;
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -356,7 +356,6 @@ void LLPanelMediaHUD::updateShape()
|
||||
media_hud_rect.mRight += getRect().getWidth() - media_region->getRect().mRight;
|
||||
|
||||
|
||||
LLRect old_hud_rect = media_hud_rect;
|
||||
// keep all parts of HUD on-screen
|
||||
media_hud_rect.intersectWith(getParent()->getLocalRect());
|
||||
|
||||
|
||||
@@ -520,10 +520,10 @@ void LLPanelObject::getState( )
|
||||
mBtnPasteRot->setEnabled( enable_rotate );
|
||||
mBtnPasteRotClip->setEnabled( enable_rotate );
|
||||
|
||||
BOOL owners_identical;
|
||||
LLUUID owner_id;
|
||||
std::string owner_name;
|
||||
owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
|
||||
// This is still needed for the side effects, though the result is not.
|
||||
LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
|
||||
|
||||
// BUG? Check for all objects being editable?
|
||||
S32 roots_selected = LLSelectMgr::getInstance()->getSelection()->getRootObjectCount();
|
||||
|
||||
@@ -541,7 +541,7 @@ void LLPanelPermissions::refresh()
|
||||
// TODO: Creator permissions
|
||||
|
||||
BOOL valid_base_perms = FALSE;
|
||||
BOOL valid_owner_perms = FALSE;
|
||||
//BOOL valid_owner_perms = FALSE;
|
||||
BOOL valid_group_perms = FALSE;
|
||||
BOOL valid_everyone_perms = FALSE;
|
||||
BOOL valid_next_perms = FALSE;
|
||||
@@ -561,7 +561,8 @@ void LLPanelPermissions::refresh()
|
||||
&base_mask_on,
|
||||
&base_mask_off);
|
||||
|
||||
valid_owner_perms = LLSelectMgr::getInstance()->selectGetPerm(PERM_OWNER,
|
||||
// TODO - seems odd, but this is not actually used, except to set owner_mask_*.
|
||||
/*valid_owner_perms =*/ LLSelectMgr::getInstance()->selectGetPerm(PERM_OWNER,
|
||||
&owner_mask_on,
|
||||
&owner_mask_off);
|
||||
|
||||
|
||||
@@ -181,10 +181,10 @@ void LLPanelVolume::getState( )
|
||||
return;
|
||||
}
|
||||
|
||||
BOOL owners_identical;
|
||||
LLUUID owner_id;
|
||||
std::string owner_name;
|
||||
owners_identical = LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
|
||||
// This is still needed for the side effects, though the result is not.
|
||||
LLSelectMgr::getInstance()->selectGetOwner(owner_id, owner_name);
|
||||
|
||||
// BUG? Check for all objects being editable?
|
||||
BOOL editable = root_objectp->permModify();
|
||||
|
||||
@@ -1072,7 +1072,6 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 &
|
||||
if (mGridMode == GRID_MODE_LOCAL && mSelectedObjects->getObjectCount())
|
||||
{
|
||||
//LLViewerObject* root = getSelectedParentObject(mSelectedObjects->getFirstObject());
|
||||
LLBBox bbox = mSavedSelectionBBox;
|
||||
mGridOrigin = mSavedSelectionBBox.getCenterAgent();
|
||||
mGridScale = mSavedSelectionBBox.getExtentLocal() * 0.5f;
|
||||
|
||||
@@ -1090,7 +1089,6 @@ void LLSelectMgr::getGrid(LLVector3& origin, LLQuaternion &rotation, LLVector3 &
|
||||
else if (mGridMode == GRID_MODE_REF_OBJECT && first_grid_object && first_grid_object->mDrawable.notNull())
|
||||
{
|
||||
mGridRotation = first_grid_object->getRenderRotation();
|
||||
LLVector3 first_grid_obj_pos = first_grid_object->getRenderPosition();
|
||||
|
||||
LLVector3 min_extents(F32_MAX, F32_MAX, F32_MAX);
|
||||
LLVector3 max_extents(-F32_MAX, -F32_MAX, -F32_MAX);
|
||||
|
||||
@@ -2617,9 +2617,6 @@ public:
|
||||
return;
|
||||
}
|
||||
|
||||
LLVector3 nodeCenter = group->mBounds[0];
|
||||
LLVector3 octCenter = LLVector3(group->mOctreeNode->getCenter());
|
||||
|
||||
for (LLSpatialGroup::OctreeNode::const_element_iter i = branch->getData().begin(); i != branch->getData().end(); ++i)
|
||||
{
|
||||
LLDrawable* drawable = *i;
|
||||
@@ -2860,9 +2857,6 @@ public:
|
||||
|
||||
virtual bool check(LLDrawable* drawable)
|
||||
{
|
||||
LLVector3 local_start = mStart;
|
||||
LLVector3 local_end = mEnd;
|
||||
|
||||
if (!gPipeline.hasRenderType(drawable->getRenderType()) || !drawable->isVisible())
|
||||
{
|
||||
return false;
|
||||
|
||||
@@ -206,6 +206,8 @@
|
||||
#include "rlvhandler.h"
|
||||
// [/RLVa:KB]
|
||||
|
||||
#include "rcmoapradar.h"
|
||||
|
||||
#if LL_WINDOWS
|
||||
#include "llwindebug.h"
|
||||
#include "lldxhardware.h"
|
||||
@@ -346,7 +348,6 @@ bool idle_startup()
|
||||
const F32 TIMEOUT_SECONDS = 10.f; // changed from 5 to 10 seconds for OpenSim lag -- MC
|
||||
const S32 MAX_TIMEOUT_COUNT = 3;
|
||||
static LLTimer timeout;
|
||||
static S32 timeout_count = 0;
|
||||
|
||||
static LLTimer login_time;
|
||||
static LLTimer connecting_region_timer;
|
||||
@@ -378,11 +379,10 @@ bool idle_startup()
|
||||
|
||||
// last location by default
|
||||
static S32 agent_location_id = START_LOCATION_ID_LAST;
|
||||
static S32 location_which = START_LOCATION_ID_LAST;
|
||||
|
||||
static bool show_connect_box = true;
|
||||
|
||||
static bool stipend_since_login = false;
|
||||
//static bool stipend_since_login = false;
|
||||
|
||||
static bool samename = false;
|
||||
|
||||
@@ -797,8 +797,6 @@ bool idle_startup()
|
||||
|
||||
gViewerWindow->getWindow()->setCursor(UI_CURSOR_ARROW);
|
||||
|
||||
timeout_count = 0;
|
||||
|
||||
if (LLStartUp::shouldAutoLogin())
|
||||
{
|
||||
show_connect_box = false;
|
||||
@@ -1111,7 +1109,6 @@ bool idle_startup()
|
||||
{
|
||||
// Force login at the last location
|
||||
agent_location_id = START_LOCATION_ID_LAST;
|
||||
location_which = START_LOCATION_ID_LAST;
|
||||
gSavedSettings.setBOOL("LoginLastLocation", FALSE);
|
||||
|
||||
// Clear some things that would cause us to divert to a user-specified location
|
||||
@@ -1123,21 +1120,14 @@ bool idle_startup()
|
||||
{
|
||||
// a startup URL was specified
|
||||
agent_location_id = START_LOCATION_ID_URL;
|
||||
|
||||
// doesn't really matter what location_which is, since
|
||||
// agent_start_look_at will be overwritten when the
|
||||
// UserLoginLocationReply arrives
|
||||
location_which = START_LOCATION_ID_LAST;
|
||||
}
|
||||
else if (gSavedSettings.getBOOL("LoginLastLocation"))
|
||||
{
|
||||
agent_location_id = START_LOCATION_ID_LAST; // last location
|
||||
location_which = START_LOCATION_ID_LAST;
|
||||
}
|
||||
else
|
||||
{
|
||||
agent_location_id = START_LOCATION_ID_HOME; // home
|
||||
location_which = START_LOCATION_ID_HOME;
|
||||
}
|
||||
|
||||
gViewerWindow->getWindow()->setCursor(UI_CURSOR_WAIT);
|
||||
@@ -1783,11 +1773,11 @@ bool idle_startup()
|
||||
if((*it).second == "N") gAgent.setFirstLogin(TRUE);
|
||||
else gAgent.setFirstLogin(FALSE);
|
||||
}
|
||||
it = options[0].find("stipend_since_login");
|
||||
if(it != no_flag)
|
||||
{
|
||||
if((*it).second == "Y") stipend_since_login = true;
|
||||
}
|
||||
//it = options[0].find("stipend_since_login");
|
||||
//if(it != no_flag)
|
||||
//{
|
||||
// if((*it).second == "Y") stipend_since_login = true;
|
||||
//}
|
||||
it = options[0].find("gendered");
|
||||
if(it != no_flag)
|
||||
{
|
||||
@@ -2079,6 +2069,16 @@ bool idle_startup()
|
||||
LLRect window(0, gViewerWindow->getWindowHeight(), gViewerWindow->getWindowWidth(), 0);
|
||||
gViewerWindow->adjustControlRectanglesForFirstUse(window);
|
||||
|
||||
if (gSavedSettings.getBOOL("ShowRadar"))
|
||||
{
|
||||
LLFloaterAvatarList::showInstance();
|
||||
}
|
||||
|
||||
if (gSavedSettings.getBOOL("ShowMOAPRadar"))
|
||||
{
|
||||
LLFloaterMOAPRadar::showInstance();
|
||||
}
|
||||
|
||||
if(gSavedSettings.getBOOL("ShowMiniMap"))
|
||||
{
|
||||
LLFloaterMap::showInstance();
|
||||
|
||||
@@ -1262,8 +1262,6 @@ BOOL LLSurface::generateWaterTexture(const F32 x, const F32 y,
|
||||
y_end = tex_width;
|
||||
}
|
||||
|
||||
LLVector3d origin_global = from_region_handle(getRegion()->getHandle());
|
||||
|
||||
// OK, for now, just have the composition value equal the height at the point.
|
||||
LLVector3 location;
|
||||
LLColor4U coloru;
|
||||
|
||||
@@ -40,10 +40,12 @@
|
||||
|
||||
#include "llviewerwindow.h"
|
||||
#include "lltoolcomp.h"
|
||||
#include "lltoolface.h"
|
||||
#include "lltoolfocus.h"
|
||||
#include "llfocusmgr.h"
|
||||
#include "llagent.h"
|
||||
#include "llviewerjoystick.h"
|
||||
#include "qtoolalign.h"
|
||||
|
||||
extern BOOL gDebugClicks;
|
||||
|
||||
@@ -187,7 +189,7 @@ LLTool* LLTool::getOverrideTool(MASK mask)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
if (mask & MASK_ALT)
|
||||
else if (mask & MASK_ALT)
|
||||
{
|
||||
return LLToolCamera::getInstance();
|
||||
}
|
||||
|
||||
@@ -43,6 +43,7 @@
|
||||
#include "llmaniptranslate.h"
|
||||
#include "llmenugl.h" // for right-click menu hack
|
||||
#include "llselectmgr.h"
|
||||
#include "lltoolface.h"
|
||||
#include "lltoolfocus.h"
|
||||
#include "lltoolgrab.h"
|
||||
#include "lltoolgun.h"
|
||||
@@ -131,6 +132,36 @@ void LLToolComposite::handleSelect()
|
||||
mSelected = TRUE;
|
||||
}
|
||||
|
||||
|
||||
LLTool* LLToolComposite::getOverrideTool(MASK mask)
|
||||
{
|
||||
if (gKeyboard->getKeyDown('M') &&
|
||||
((mask == (MASK_ALT | MASK_CONTROL)) || (mask == (MASK_ALT | MASK_CONTROL | MASK_SHIFT))))
|
||||
{
|
||||
return QToolAlign::getInstance();
|
||||
}
|
||||
else if (gKeyboard->getKeyDown('P') &&
|
||||
(mask == (MASK_CONTROL | MASK_SHIFT)))
|
||||
{
|
||||
return LLToolCompTranslate::getInstance();
|
||||
}
|
||||
else if (gKeyboard->getKeyDown('F') &&
|
||||
(mask == (MASK_ALT | MASK_CONTROL)))
|
||||
{
|
||||
return LLToolFace::getInstance();
|
||||
}
|
||||
else if (mask == (MASK_CONTROL | MASK_SHIFT))
|
||||
{
|
||||
return LLToolCompScale::getInstance();
|
||||
}
|
||||
else if (mask == MASK_CONTROL)
|
||||
{
|
||||
return LLToolCompRotate::getInstance();
|
||||
}
|
||||
return LLTool::getOverrideTool(mask);
|
||||
}
|
||||
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
// LLToolCompInspect
|
||||
//----------------------------------------------------------------------------
|
||||
@@ -277,24 +308,6 @@ BOOL LLToolCompTranslate::handleMouseUp(S32 x, S32 y, MASK mask)
|
||||
return LLToolComposite::handleMouseUp(x, y, mask);
|
||||
}
|
||||
|
||||
LLTool* LLToolCompTranslate::getOverrideTool(MASK mask)
|
||||
{
|
||||
if (gKeyboard->getKeyDown('A') &&
|
||||
((mask & MASK_CONTROL) || (mask == (MASK_CONTROL | MASK_SHIFT))))
|
||||
{
|
||||
return QToolAlign::getInstance();
|
||||
}
|
||||
else if (mask == MASK_CONTROL)
|
||||
{
|
||||
return LLToolCompRotate::getInstance();
|
||||
}
|
||||
else if (mask == (MASK_CONTROL | MASK_SHIFT))
|
||||
{
|
||||
return LLToolCompScale::getInstance();
|
||||
}
|
||||
return LLToolComposite::getOverrideTool(mask);
|
||||
}
|
||||
|
||||
BOOL LLToolCompTranslate::handleDoubleClick(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
if (mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART)
|
||||
@@ -401,22 +414,6 @@ BOOL LLToolCompScale::handleMouseUp(S32 x, S32 y, MASK mask)
|
||||
return LLToolComposite::handleMouseUp(x, y, mask);
|
||||
}
|
||||
|
||||
LLTool* LLToolCompScale::getOverrideTool(MASK mask)
|
||||
{
|
||||
if (gKeyboard->getKeyDown('A') &&
|
||||
((mask & MASK_CONTROL) || (mask == (MASK_CONTROL | MASK_SHIFT))))
|
||||
{
|
||||
return QToolAlign::getInstance();
|
||||
}
|
||||
else if (mask == MASK_CONTROL)
|
||||
{
|
||||
return LLToolCompRotate::getInstance();
|
||||
}
|
||||
|
||||
return LLToolComposite::getOverrideTool(mask);
|
||||
}
|
||||
|
||||
|
||||
BOOL LLToolCompScale::handleDoubleClick(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART)
|
||||
@@ -471,18 +468,16 @@ LLToolCompCreate::~LLToolCompCreate()
|
||||
|
||||
BOOL LLToolCompCreate::handleMouseDown(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
BOOL handled = FALSE;
|
||||
mMouseDown = TRUE;
|
||||
|
||||
if ( (mask == MASK_SHIFT) || (mask == MASK_CONTROL) )
|
||||
{
|
||||
gViewerWindow->pickAsync(x, y, mask, pickCallback);
|
||||
handled = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
setCurrentTool( mPlacer );
|
||||
handled = mPlacer->placeObject( x, y, mask );
|
||||
mPlacer->placeObject( x, y, mask );
|
||||
}
|
||||
|
||||
mObjectPlacedOnMouseDown = TRUE;
|
||||
@@ -606,20 +601,6 @@ BOOL LLToolCompRotate::handleMouseUp(S32 x, S32 y, MASK mask)
|
||||
return LLToolComposite::handleMouseUp(x, y, mask);
|
||||
}
|
||||
|
||||
LLTool* LLToolCompRotate::getOverrideTool(MASK mask)
|
||||
{
|
||||
if (gKeyboard->getKeyDown('A') &&
|
||||
((mask & MASK_CONTROL) || (mask == (MASK_CONTROL | MASK_SHIFT))))
|
||||
{
|
||||
return QToolAlign::getInstance();
|
||||
}
|
||||
else if (mask == (MASK_CONTROL | MASK_SHIFT))
|
||||
{
|
||||
return LLToolCompScale::getInstance();
|
||||
}
|
||||
return LLToolComposite::getOverrideTool(mask);
|
||||
}
|
||||
|
||||
BOOL LLToolCompRotate::handleDoubleClick(S32 x, S32 y, MASK mask)
|
||||
{
|
||||
if (!mManip->getSelection()->isEmpty() && mManip->getHighlightedPart() == LLManip::LL_NO_PART)
|
||||
|
||||
@@ -84,6 +84,9 @@ public:
|
||||
{ mCur->localPointToScreen(local_x, local_y, screen_x, screen_y); }
|
||||
|
||||
BOOL isSelecting();
|
||||
|
||||
virtual LLTool* getOverrideTool(MASK mask);
|
||||
|
||||
protected:
|
||||
void setCurrentTool( LLTool* new_tool );
|
||||
LLTool* getCurrentTool() { return mCur; }
|
||||
@@ -113,8 +116,8 @@ public:
|
||||
virtual ~LLToolCompInspect();
|
||||
|
||||
// Overridden from LLToolComposite
|
||||
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
|
||||
|
||||
static void pickCallback(const LLPickInfo& pick_info);
|
||||
};
|
||||
@@ -135,8 +138,6 @@ public:
|
||||
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool
|
||||
virtual void render();
|
||||
|
||||
virtual LLTool* getOverrideTool(MASK mask);
|
||||
|
||||
static void pickCallback(const LLPickInfo& pick_info);
|
||||
};
|
||||
|
||||
@@ -150,14 +151,12 @@ public:
|
||||
virtual ~LLToolCompScale();
|
||||
|
||||
// Overridden from LLToolComposite
|
||||
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask); // Returns to the default tool
|
||||
virtual void render();
|
||||
|
||||
virtual LLTool* getOverrideTool(MASK mask);
|
||||
|
||||
static void pickCallback(const LLPickInfo& pick_info);
|
||||
};
|
||||
|
||||
@@ -172,17 +171,13 @@ public:
|
||||
virtual ~LLToolCompRotate();
|
||||
|
||||
// Overridden from LLToolComposite
|
||||
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
|
||||
virtual void render();
|
||||
|
||||
virtual LLTool* getOverrideTool(MASK mask);
|
||||
|
||||
static void pickCallback(const LLPickInfo& pick_info);
|
||||
|
||||
protected:
|
||||
};
|
||||
|
||||
//-----------------------------------------------------------------------
|
||||
@@ -195,14 +190,14 @@ public:
|
||||
virtual ~LLToolCompCreate();
|
||||
|
||||
// Overridden from LLToolComposite
|
||||
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleMouseUp(S32 x, S32 y, MASK mask);
|
||||
|
||||
static void pickCallback(const LLPickInfo& pick_info);
|
||||
protected:
|
||||
LLToolPlacer* mPlacer;
|
||||
BOOL mObjectPlacedOnMouseDown;
|
||||
BOOL mObjectPlacedOnMouseDown;
|
||||
};
|
||||
|
||||
|
||||
@@ -220,7 +215,7 @@ public:
|
||||
virtual ~LLToolCompGun();
|
||||
|
||||
// Overridden from LLToolComposite
|
||||
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleHover(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleMouseDown(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleDoubleClick(S32 x, S32 y, MASK mask);
|
||||
virtual BOOL handleRightMouseDown(S32 x, S32 y, MASK mask);
|
||||
|
||||
@@ -1521,18 +1521,6 @@ void LLToolDragAndDrop::dropInventory(LLViewerObject* hit_obj,
|
||||
gFloaterTools->dirty();
|
||||
}
|
||||
|
||||
struct LLGiveInventoryInfo
|
||||
{
|
||||
LLUUID mToAgentID;
|
||||
LLUUID mInventoryObjectID;
|
||||
LLUUID mIMSessionID;
|
||||
LLGiveInventoryInfo(const LLUUID& to_agent, const LLUUID& obj_id, const LLUUID &im_session_id = LLUUID::null) :
|
||||
mToAgentID(to_agent),
|
||||
mInventoryObjectID(obj_id),
|
||||
mIMSessionID(im_session_id)
|
||||
{}
|
||||
};
|
||||
|
||||
void LLToolDragAndDrop::giveInventory(const LLUUID& to_agent,
|
||||
LLInventoryItem* item,
|
||||
const LLUUID& im_session_id)
|
||||
@@ -1701,8 +1689,6 @@ void LLToolDragAndDrop::giveInventoryCategory(const LLUUID& to_agent,
|
||||
}
|
||||
else
|
||||
{
|
||||
LLGiveInventoryInfo* info = NULL;
|
||||
info = new LLGiveInventoryInfo(to_agent, cat->getUUID(), im_session_id);
|
||||
LLSD args;
|
||||
args["COUNT"] = llformat("%d",giveable.countNoCopy());
|
||||
LLSD payload;
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
//
|
||||
|
||||
LLToolFace::LLToolFace()
|
||||
: LLTool(std::string("Texture"))
|
||||
: LLToolComposite(std::string("Texture"))
|
||||
{ }
|
||||
|
||||
|
||||
@@ -156,6 +156,7 @@ void LLToolFace::pickCallback(const LLPickInfo& pick_info)
|
||||
|
||||
void LLToolFace::handleSelect()
|
||||
{
|
||||
gFloaterTools->setStatusText("selectface");
|
||||
// From now on, draw faces
|
||||
LLSelectMgr::getInstance()->setTEMode(TRUE);
|
||||
}
|
||||
|
||||
@@ -34,12 +34,13 @@
|
||||
#define LL_LLTOOLFACE_H
|
||||
|
||||
#include "lltool.h"
|
||||
#include "lltoolcomp.h"
|
||||
|
||||
class LLViewerObject;
|
||||
class LLPickInfo;
|
||||
|
||||
class LLToolFace
|
||||
: public LLTool, public LLSingleton<LLToolFace>
|
||||
: public LLToolComposite, public LLSingleton<LLToolFace>
|
||||
{
|
||||
public:
|
||||
LLToolFace();
|
||||
|
||||
@@ -318,8 +318,6 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask)
|
||||
S32 dx = gViewerWindow->getCurrentMouseDX();
|
||||
S32 dy = gViewerWindow->getCurrentMouseDY();
|
||||
|
||||
BOOL moved_outside_slop = FALSE;
|
||||
|
||||
if (hasMouseCapture() && mValidClickPoint)
|
||||
{
|
||||
mAccumX += llabs(dx);
|
||||
@@ -327,19 +325,11 @@ BOOL LLToolCamera::handleHover(S32 x, S32 y, MASK mask)
|
||||
|
||||
if (mAccumX >= SLOP_RANGE)
|
||||
{
|
||||
if (!mOutsideSlopX)
|
||||
{
|
||||
moved_outside_slop = TRUE;
|
||||
}
|
||||
mOutsideSlopX = TRUE;
|
||||
}
|
||||
|
||||
if (mAccumY >= SLOP_RANGE)
|
||||
{
|
||||
if (!mOutsideSlopY)
|
||||
{
|
||||
moved_outside_slop = TRUE;
|
||||
}
|
||||
mOutsideSlopY = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -193,7 +193,7 @@ LLTool* LLToolMgr::getCurrentTool()
|
||||
else
|
||||
{
|
||||
// due to window management weirdness we can get here with gToolNull
|
||||
bool can_override = mBaseTool && (mBaseTool != gToolNull) ;
|
||||
bool can_override = mBaseTool && (mBaseTool != gToolNull);
|
||||
mOverrideTool = can_override ? mBaseTool->getOverrideTool(override_mask) : NULL;
|
||||
|
||||
// use keyboard-override tool if available otherwise drop back to base tool
|
||||
|
||||
@@ -119,8 +119,6 @@ void LLURLHistory::addURL(const std::string& collection, const std::string& url)
|
||||
// static
|
||||
void LLURLHistory::removeURL(const std::string& collection, const std::string& url)
|
||||
{
|
||||
LLSD::array_iterator iter = sHistorySD[collection].beginArray();
|
||||
LLSD::array_iterator end = sHistorySD[collection].endArray();
|
||||
for(int index = 0; index < sHistorySD[collection].size(); index++)
|
||||
{
|
||||
if(sHistorySD[collection].get(index).asString() == url)
|
||||
|
||||
@@ -131,9 +131,6 @@ void LLViewerCamera::updateCameraLocation(const LLVector3 ¢er,
|
||||
|
||||
mLastPointOfInterest = point_of_interest;
|
||||
|
||||
// constrain to max distance from avatar
|
||||
LLVector3 camera_offset = center - gAgent.getPositionAgent();
|
||||
|
||||
LLViewerRegion * regp = gAgent.getRegion();
|
||||
F32 water_height = (NULL != regp) ? regp->getWaterHeight() : 0.f;
|
||||
|
||||
@@ -306,7 +303,7 @@ void LLViewerCamera::setPerspective(BOOL for_selection,
|
||||
{
|
||||
F32 fov_y, aspect;
|
||||
fov_y = RAD_TO_DEG * getView();
|
||||
BOOL z_default_near, z_default_far = FALSE;
|
||||
BOOL z_default_far = FALSE;
|
||||
if (z_far <= 0)
|
||||
{
|
||||
z_default_far = TRUE;
|
||||
@@ -314,7 +311,6 @@ void LLViewerCamera::setPerspective(BOOL for_selection,
|
||||
}
|
||||
if (z_near <= 0)
|
||||
{
|
||||
z_default_near = TRUE;
|
||||
z_near = getNear();
|
||||
}
|
||||
aspect = getAspect();
|
||||
|
||||
@@ -977,7 +977,6 @@ void render_hud_attachments()
|
||||
if (LLPipeline::sShowHUDAttachments && !gDisconnected && setup_hud_matrices())
|
||||
{
|
||||
LLCamera hud_cam = *LLViewerCamera::getInstance();
|
||||
LLVector3 origin = hud_cam.getOrigin();
|
||||
hud_cam.setOrigin(-1.f,0,0);
|
||||
hud_cam.setAxes(LLVector3(1,0,0), LLVector3(0,1,0), LLVector3(0,0,1));
|
||||
LLViewerCamera::updateFrustumPlanes(hud_cam, TRUE);
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
#include "message.h"
|
||||
#include "llagent.h"
|
||||
#include "lluuid.h"
|
||||
#include "lightshare.h"
|
||||
#include "llettherebelight.h"
|
||||
|
||||
|
||||
LLDispatcher gGenericDispatcher;
|
||||
|
||||
@@ -238,6 +238,8 @@
|
||||
#include "llfloaterteleporthistory.h"
|
||||
#include "slfloatermediafilter.h"
|
||||
|
||||
#include "rcmoapradar.h"
|
||||
|
||||
using namespace LLVOAvatarDefines;
|
||||
void init_client_menu(LLMenuGL* menu);
|
||||
void init_server_menu(LLMenuGL* menu);
|
||||
@@ -1096,10 +1098,10 @@ void init_debug_ui_menu(LLMenuGL* menu)
|
||||
menu->append(new LLMenuItemCallGL("Editable UI", &edit_ui));
|
||||
menu->append(new LLMenuItemCallGL( "Dump SelectMgr", &dump_select_mgr));
|
||||
menu->append(new LLMenuItemCallGL( "Dump Inventory", &dump_inventory));
|
||||
menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus, NULL, NULL, 'F', MASK_ALT | MASK_CONTROL));
|
||||
menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info, NULL, NULL, 'P', MASK_CONTROL|MASK_SHIFT ));
|
||||
menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs, NULL, NULL, 'P', MASK_SHIFT ));
|
||||
menu->append(new LLMenuItemCallGL( "Memory Stats", &output_statistics, NULL, NULL, 'M', MASK_SHIFT | MASK_ALT | MASK_CONTROL));
|
||||
menu->append(new LLMenuItemCallGL( "Dump Focus Holder", &handle_dump_focus));
|
||||
menu->append(new LLMenuItemCallGL( "Print Selected Object Info", &print_object_info));
|
||||
menu->append(new LLMenuItemCallGL( "Print Agent Info", &print_agent_nvpairs));
|
||||
menu->append(new LLMenuItemCallGL( "Memory Stats", &output_statistics));
|
||||
menu->append(new LLMenuItemCheckGL("Double-Click Auto-Pilot",
|
||||
menu_toggle_control, NULL, menu_check_control,
|
||||
(void*)"DoubleClickAutoPilot"));
|
||||
@@ -1256,7 +1258,6 @@ void init_debug_rendering_menu(LLMenuGL* menu)
|
||||
sub_menu->append(new LLMenuItemCheckGL("Octree", &LLPipeline::toggleRenderDebug, NULL,
|
||||
&LLPipeline::toggleRenderDebugControl,
|
||||
(void*)LLPipeline::RENDER_DEBUG_OCTREE));
|
||||
// For Imprudence 1.3 - need to XUIfy
|
||||
sub_menu->append(new LLMenuItemCheckGL("Shadow Frusta", &LLPipeline::toggleRenderDebug, NULL,
|
||||
&LLPipeline::toggleRenderDebugControl,
|
||||
(void*)LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA));
|
||||
@@ -5216,6 +5217,24 @@ class LLViewEnableLastChatter : public view_listener_t
|
||||
}
|
||||
};
|
||||
|
||||
class LLViewToggleRadar: public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
LLFloaterAvatarList::toggle(0);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class LLViewToggleMOAPRadar: public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
LLFloaterMOAPRadar::toggle(0);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class LLEditEnableDeselect : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
@@ -8946,12 +8965,6 @@ class LLAdvancedToggleAssetBrowser: public view_listener_t
|
||||
{
|
||||
//open the floater
|
||||
LLFloaterAssetBrowser::show(0);
|
||||
|
||||
bool vis = false;
|
||||
if(LLFloaterAssetBrowser::getInstance())
|
||||
{
|
||||
vis = (bool)LLFloaterAssetBrowser::getInstance()->getVisible();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
@@ -9058,7 +9071,7 @@ class LLAdvancedToggleRenderType : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
U32 render_type = render_type_from_string( userdata.asString() );
|
||||
intptr_t render_type = render_type_from_string( userdata.asString() );
|
||||
if ( render_type != 0 )
|
||||
{
|
||||
LLPipeline::toggleRenderTypeControl( (void*)render_type );
|
||||
@@ -9072,7 +9085,7 @@ class LLAdvancedCheckRenderType : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
U32 render_type = render_type_from_string( userdata["data"].asString() );
|
||||
intptr_t render_type = render_type_from_string( userdata["data"].asString() );
|
||||
bool new_value = false;
|
||||
|
||||
if ( render_type != 0 )
|
||||
@@ -9138,7 +9151,7 @@ class LLAdvancedToggleFeature : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
U32 feature = feature_from_string( userdata.asString() );
|
||||
intptr_t feature = feature_from_string( userdata.asString() );
|
||||
|
||||
if ( feature != 0 )
|
||||
{
|
||||
@@ -9154,7 +9167,7 @@ class LLAdvancedCheckFeature : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
U32 feature = feature_from_string( userdata["data"].asString() );
|
||||
intptr_t feature = feature_from_string( userdata["data"].asString() );
|
||||
bool new_value = false;
|
||||
|
||||
if ( feature != 0 )
|
||||
@@ -9249,6 +9262,10 @@ U32 info_display_from_string(std::string info_display)
|
||||
{
|
||||
return LLPipeline::RENDER_DEBUG_SCULPTED;
|
||||
}
|
||||
else if ("shadow frusta" == info_display)
|
||||
{
|
||||
return LLPipeline::RENDER_DEBUG_SHADOW_FRUSTA;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 0;
|
||||
@@ -9260,7 +9277,7 @@ class LLAdvancedToggleInfoDisplay : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
U32 info_display = info_display_from_string( userdata.asString() );
|
||||
intptr_t info_display = info_display_from_string( userdata.asString() );
|
||||
|
||||
if ( info_display != 0 )
|
||||
{
|
||||
@@ -9276,7 +9293,7 @@ class LLAdvancedCheckInfoDisplay : public view_listener_t
|
||||
{
|
||||
bool handleEvent(LLPointer<LLEvent> event, const LLSD& userdata)
|
||||
{
|
||||
U32 info_display = info_display_from_string( userdata["data"].asString() );
|
||||
intptr_t info_display = info_display_from_string( userdata["data"].asString() );
|
||||
bool new_value = false;
|
||||
|
||||
if ( info_display != 0 )
|
||||
@@ -11215,6 +11232,8 @@ void initialize_menus()
|
||||
addMenu(new LLViewEnableMouselook(), "View.EnableMouselook");
|
||||
addMenu(new LLViewEnableJoystickFlycam(), "View.EnableJoystickFlycam");
|
||||
addMenu(new LLViewEnableLastChatter(), "View.EnableLastChatter");
|
||||
addMenu(new LLViewToggleRadar(), "View.ToggleAvatarList");
|
||||
addMenu(new LLViewToggleMOAPRadar(), "View.ToggleMOAPList");
|
||||
|
||||
addMenu(new LLViewCheckBuildMode(), "View.CheckBuildMode");
|
||||
addMenu(new LLViewCheckJoystickFlycam(), "View.CheckJoystickFlycam");
|
||||
|
||||
Executable → Regular
+1
-4
@@ -65,7 +65,7 @@
|
||||
#include "lltimer.h"
|
||||
#include "llmd5.h"
|
||||
|
||||
#include "lightshare.h"
|
||||
#include "llettherebelight.h"
|
||||
#include "llagent.h"
|
||||
#include "llcallingcard.h"
|
||||
#include "llconsole.h"
|
||||
@@ -653,7 +653,6 @@ void send_sound_trigger(const LLUUID& sound_id, F32 gain)
|
||||
bool join_group_response(const LLSD& notification, const LLSD& response)
|
||||
{
|
||||
S32 option = LLNotification::getSelectedOption(notification, response);
|
||||
BOOL delete_context_data = TRUE;
|
||||
bool accept_invite = false;
|
||||
|
||||
LLUUID group_id = notification["payload"]["group_id"].asUUID();
|
||||
@@ -682,7 +681,6 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
|
||||
}
|
||||
else
|
||||
{
|
||||
delete_context_data = FALSE;
|
||||
LLSD args;
|
||||
args["NAME"] = name;
|
||||
args["INVITE"] = message;
|
||||
@@ -696,7 +694,6 @@ bool join_group_response(const LLSD& notification, const LLSD& response)
|
||||
// sure the user is sure they want to join.
|
||||
if (fee > 0)
|
||||
{
|
||||
delete_context_data = FALSE;
|
||||
LLSD args;
|
||||
args["COST"] = llformat("%d", fee);
|
||||
args["CURRENCY"] = gHippoGridManager->getConnectedGrid()->getCurrencySymbol();
|
||||
|
||||
@@ -2046,9 +2046,6 @@ BOOL LLViewerObject::idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time)
|
||||
if (HJT_HINGE == mJointInfo->mJointType)
|
||||
{
|
||||
// hinge = uniform circular motion
|
||||
LLVector3 parent_pivot = getVelocity();
|
||||
LLVector3 parent_axis = getAcceleration();
|
||||
|
||||
angle = dt * (ang_vel * mJointInfo->mAxisOrAnchor); // AxisOrAnchor = axis
|
||||
dQ.setQuat(angle, mJointInfo->mAxisOrAnchor); // AxisOrAnchor = axis
|
||||
LLVector3 pivot_offset = pos - mJointInfo->mPivot; // pos in pivot-frame
|
||||
|
||||
@@ -157,7 +157,13 @@ public:
|
||||
enum { MEDIA_TYPE_NONE = 0, MEDIA_TYPE_WEB_PAGE = 1 };
|
||||
|
||||
// Return codes for processUpdateMessage
|
||||
enum { MEDIA_URL_REMOVED = 0x1, MEDIA_URL_ADDED = 0x2, MEDIA_URL_UPDATED = 0x4, INVALID_UPDATE = 0x80000000 };
|
||||
enum {
|
||||
MEDIA_URL_REMOVED = 0x1,
|
||||
MEDIA_URL_ADDED = 0x2,
|
||||
MEDIA_URL_UPDATED = 0x4,
|
||||
MEDIA_FLAGS_CHANGED = 0x8,
|
||||
INVALID_UPDATE = 0x80000000
|
||||
};
|
||||
|
||||
virtual U32 processUpdateMessage(LLMessageSystem *mesgsys,
|
||||
void **user_data,
|
||||
|
||||
@@ -288,7 +288,6 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
|
||||
{
|
||||
LLFastTimer t(LLFastTimer::FTM_PROCESS_OBJECTS);
|
||||
|
||||
LLVector3d camera_global = gAgent.getCameraPositionGlobal();
|
||||
LLViewerObject *objectp;
|
||||
S32 num_objects;
|
||||
U32 local_id;
|
||||
@@ -305,28 +304,28 @@ void LLViewerObjectList::processObjectUpdate(LLMessageSystem *mesgsys,
|
||||
if (!cached && !compressed && update_type != OUT_FULL)
|
||||
{
|
||||
gTerseObjectUpdates += num_objects;
|
||||
S32 size;
|
||||
if (mesgsys->getReceiveCompressedSize())
|
||||
{
|
||||
size = mesgsys->getReceiveCompressedSize();
|
||||
}
|
||||
else
|
||||
{
|
||||
size = mesgsys->getReceiveSize();
|
||||
}
|
||||
// S32 size;
|
||||
// if (mesgsys->getReceiveCompressedSize())
|
||||
// {
|
||||
// size = mesgsys->getReceiveCompressedSize();
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// size = mesgsys->getReceiveSize();
|
||||
// }
|
||||
// llinfos << "Received terse " << num_objects << " in " << size << " byte (" << size/num_objects << ")" << llendl;
|
||||
}
|
||||
else
|
||||
{
|
||||
S32 size;
|
||||
if (mesgsys->getReceiveCompressedSize())
|
||||
{
|
||||
size = mesgsys->getReceiveCompressedSize();
|
||||
}
|
||||
else
|
||||
{
|
||||
size = mesgsys->getReceiveSize();
|
||||
}
|
||||
// S32 size;
|
||||
// if (mesgsys->getReceiveCompressedSize())
|
||||
// {
|
||||
// size = mesgsys->getReceiveCompressedSize();
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// size = mesgsys->getReceiveSize();
|
||||
// }
|
||||
|
||||
// llinfos << "Received " << num_objects << " in " << size << " byte (" << size/num_objects << ")" << llendl;
|
||||
gFullObjectUpdates += num_objects;
|
||||
|
||||
@@ -101,12 +101,11 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
|
||||
sMediaRegionID = LLUUID() ;
|
||||
stop() ;
|
||||
LL_DEBUGS("Media") << "no agent region, bailing out." << LL_ENDL;
|
||||
return ;
|
||||
return ;
|
||||
}
|
||||
|
||||
// we're in a parcel
|
||||
bool new_parcel = false;
|
||||
S32 parcelid = parcel->getLocalID();
|
||||
S32 parcelid = parcel->getLocalID();
|
||||
|
||||
LLUUID regionid = gAgent.getRegion()->getRegionID();
|
||||
if (parcelid != sMediaParcelLocalID || regionid != sMediaRegionID)
|
||||
@@ -114,7 +113,6 @@ void LLViewerParcelMedia::update(LLParcel* parcel)
|
||||
LL_DEBUGS("Media") << "New parcel, parcel id = " << parcelid << ", region id = " << regionid << LL_ENDL;
|
||||
sMediaParcelLocalID = parcelid;
|
||||
sMediaRegionID = regionid;
|
||||
new_parcel = true;
|
||||
}
|
||||
|
||||
std::string mediaUrl = std::string ( parcel->getMediaURL () );
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user