diff options
| -rwxr-xr-x | .hgtags | 19 | ||||
| -rw-r--r-- | BuildParams | 10 | ||||
| -rw-r--r-- | indra/cmake/00-Common.cmake | 2 | ||||
| -rw-r--r-- | indra/llcommon/llversionviewer.h | 2 | ||||
| -rw-r--r-- | indra/llmath/lloctree.h | 52 | ||||
| -rw-r--r-- | indra/llrender/llvertexbuffer.cpp | 5 | ||||
| -rwxr-xr-x | indra/newview/CMakeLists.txt | 18 | ||||
| -rw-r--r-- | indra/newview/generate_breakpad_symbols.py | 51 | ||||
| -rw-r--r-- | indra/newview/llpolymesh.cpp | 1 | ||||
| -rw-r--r-- | indra/newview/llspatialpartition.cpp | 98 | ||||
| -rw-r--r-- | indra/newview/llspatialpartition.h | 10 | ||||
| -rw-r--r-- | indra/newview/llviewerobject.cpp | 2 | ||||
| -rw-r--r-- | indra/newview/llviewerobjectlist.cpp | 5 | ||||
| -rw-r--r-- | indra/newview/llviewerobjectlist.h | 1 | ||||
| -rwxr-xr-x | indra/newview/llviewerwindow.cpp | 3 | 
15 files changed, 173 insertions, 106 deletions
| @@ -324,9 +324,24 @@ fba99f381b8d4ad1b7b42fa4993b29998d95be18 DRTVWR-179  173c2809f9873499c4b9d6bc044ec941c954d3fb DRTVWR-228  1dc94555582f52718834081e7659e973ae4521f7 3.4.1-beta8  52c164c8023a5e65f3dc1b0bbb7fa1dd0c631b6b DRTVWR-231 -9c4519aa5c70f7560111fb5c740d3a7dc20a845a 3.4.1-beta9  464cf7a63a9a2f95bc4972dc022ca765e93de7d3 DRTVWR-233 -9c4519aa5c70f7560111fb5c740d3a7dc20a845a 3.4.1-beta9  637fe8bbee5e24940448198c221d5ee0fa3247b4 3.4.1-beta9  4e0d84e92132e9e95a1d52a1e49bad69c278ea05 3.4.1-beta10 +f7cbd60a3f57ff1101157eeb79ea21e8898bedae DRTVWR-235 +baf97f06ae17223614c5e31aa42e71d87cff07fe DRTVWR-236 +18498afcdb835d6fc4d36ed935347d3b65307bad 3.4.1-beta11 +b2f21e3442542283a80e7eaebae9f833e5a927b6 DRTVWR-237 +3f9be82de642d468c5fc272cb9d96b46b5498402 3.4.1-beta12 +e59ffd3fe0838ae6b09b242a6e9df71761b88f41 3.4.1-release +81f6b745ef27f5915fd07f988fdec9944f2bb73e DRTVWR-186 +cc953f00956be52cc64c30637bbeec310eea603f DRTVWR-181 +c04e68e1b0034fd0a20815ae24c77e5f8428e822 DRTVWR-188 +4b2c52aecb7a75de31dbb12d9f5b9a251d8707be DRTVWR-191 +78ca0bbf43a92e8914d4cfa87d69a6717ef7d4cf DRTVWR-194 +248f4acd92a706c79e842bc83d80baa7369c0c2e DRTVWR-203 +de3be913f68813a9bac7d1c671fef96d1159bcd6 DRTVWR-202 +34dbbe2b00afe90352d3acf8290eb10ab90d1c8b oz-build-test-tag +6ee71714935ffcd159db3d4f5800c1929aac54e1 DRTVWR-205 +7b22c612fc756e0ea63b10b163e81d107f85dbf8 DRTVWR-206 +b61afe175b829c149d369524a4e974dfda99facf DRTVWR-219  32896d5e920ca9a29256ff3b747c2e99752aa5ae DRTVWR-217 diff --git a/BuildParams b/BuildParams index ebfc640023..e63336cb19 100644 --- a/BuildParams +++ b/BuildParams @@ -3,6 +3,7 @@  # Please refer to:  #  https://wiki.secondlife.com/wiki/Automated_Build_System +  # Global setting for now...  Darwin.symbolfiles = "newview/Release/secondlife-symbols-darwin.tar.bz2"  CYGWIN.symbolfiles = "newview/Release/secondlife-symbols-windows.tar.bz2" @@ -20,8 +21,13 @@ email_status_this_is_os = true  # Limit extent of codeticket updates to revisions after...  codeticket_since = 3.3.0-release +clean_on_success = false +run_tests = false +build_Darwin_Debug = false +build_Darwin_RelWithDebInfo = false +      # ======================================== -# Viewer Development +# Viewer Development --  # ========================================  # Report changes since... @@ -58,6 +64,7 @@ viewer-release.build_debug_release_separately = true  viewer-release.build_viewer_update_version_manager = true  viewer-release.codeticket_add_context = false +  # ========================================  # mesh-development  # ======================================== @@ -197,4 +204,5 @@ runway.build_debug_release_separately = true  runway.build_CYGWIN_Debug = false  runway.build_viewer_update_version_manager = false +  # eof diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake index 21cb87237d..452fd5f356 100644 --- a/indra/cmake/00-Common.cmake +++ b/indra/cmake/00-Common.cmake @@ -200,7 +200,7 @@ if (DARWIN)    add_definitions(-DLL_DARWIN=1 -D_XOPEN_SOURCE)    set(CMAKE_CXX_LINK_FLAGS "-Wl,-headerpad_max_install_names,-search_paths_first")    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}") -  set(DARWIN_extra_cstar_flags "-mlong-branch") +  set(DARWIN_extra_cstar_flags "-mlong-branch -g")    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DARWIN_extra_cstar_flags}")    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}  ${DARWIN_extra_cstar_flags}")    # NOTE: it's critical that the optimization flag is put in front. diff --git a/indra/llcommon/llversionviewer.h b/indra/llcommon/llversionviewer.h index bcc661a920..b12aa8826a 100644 --- a/indra/llcommon/llversionviewer.h +++ b/indra/llcommon/llversionviewer.h @@ -29,7 +29,7 @@  const S32 LL_VERSION_MAJOR = 3;  const S32 LL_VERSION_MINOR = 4; -const S32 LL_VERSION_PATCH = 1; +const S32 LL_VERSION_PATCH = 2;  const S32 LL_VERSION_BUILD = 0;  const char * const LL_CHANNEL = "Second Life Developer"; diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h index c3f6f7de2a..4ac1e55cfc 100644 --- a/indra/llmath/lloctree.h +++ b/indra/llmath/lloctree.h @@ -78,7 +78,7 @@ public:  	typedef LLOctreeTraveler<T>									oct_traveler;  	typedef LLTreeTraveler<T>									tree_traveler; -	typedef LLPointer<T>*										element_list; +	typedef std::vector<LLPointer<T> >							element_list;  	typedef LLPointer<T>*										element_iter;  	typedef const LLPointer<T>*									const_element_iter;  	typedef typename std::vector<LLTreeListener<T>*>::iterator	tree_listener_iter; @@ -106,8 +106,9 @@ public:  	:	mParent((oct_node*)parent),   		mOctant(octant)   	{  -		mData = NULL; -		mDataEnd = NULL; +		//always keep a NULL terminated list to avoid out of bounds exceptions in debug builds +		mData.push_back(NULL); +		mDataEnd = &mData[0];  		mCenter = center;  		mSize = size; @@ -133,9 +134,9 @@ public:  			mData[i] = NULL;  		} -		free(mData); -		mData = NULL; -		mDataEnd = NULL; +		mData.clear(); +		mData.push_back(NULL); +		mDataEnd = &mData[0];  		for (U32 i = 0; i < getChildCount(); i++)  		{ @@ -239,9 +240,9 @@ public:  	bool isEmpty() const							{ return mElementCount == 0; }  	element_list& getData()							{ return mData; }  	const element_list& getData() const				{ return mData; } -	element_iter getDataBegin()						{ return mData; } +	element_iter getDataBegin()						{ return &mData[0]; }  	element_iter getDataEnd()						{ return mDataEnd; } -	const_element_iter getDataBegin() const			{ return mData; } +	const_element_iter getDataBegin() const			{ return &mData[0]; }  	const_element_iter getDataEnd() const			{ return mDataEnd; }  	U32 getChildCount()	const						{ return mChildCount; } @@ -321,14 +322,10 @@ public:  			if ((getElementCount() < gOctreeMaxCapacity && contains(data->getBinRadius()) ||  				(data->getBinRadius() > getSize()[0] &&	parent && parent->getElementCount() >= gOctreeMaxCapacity)))   			{ //it belongs here +				mData.push_back(NULL); +				mData[mElementCount] = data;  				mElementCount++; -				mData = (element_list) realloc(mData, sizeof(LLPointer<T>)*mElementCount); - -				//avoid unref on uninitialized memory -				memset(mData+mElementCount-1, 0, sizeof(LLPointer<T>)); - -				mData[mElementCount-1] = data; -				mDataEnd = mData + mElementCount; +				mDataEnd = &mData[mElementCount];  				data->setBinIndex(mElementCount-1);  				BaseType::insert(data);  				return true; @@ -364,14 +361,10 @@ public:  				if( lt == 0x7 )  				{ +					mData.push_back(NULL); +					mData[mElementCount] = data;  					mElementCount++; -					mData = (element_list) realloc(mData, sizeof(LLPointer<T>)*mElementCount); - -					//avoid unref on uninitialized memory -					memset(mData+mElementCount-1, 0, sizeof(LLPointer<T>)); - -					mData[mElementCount-1] = data; -					mDataEnd = mData + mElementCount; +					mDataEnd = &mData[mElementCount];  					data->setBinIndex(mElementCount-1);  					BaseType::insert(data);  					return true; @@ -436,16 +429,15 @@ public:  				mData[i]->setBinIndex(i);  			} -			mData[mElementCount] = NULL; //needed for unref -			mData = (element_list) realloc(mData, sizeof(LLPointer<T>)*mElementCount); -			mDataEnd = mData+mElementCount; +			mData[mElementCount] = NULL; +			mData.pop_back(); +			mDataEnd = &mData[mElementCount];  		}  		else  		{ -			mData[0] = NULL; //needed for unref -			free(mData); -			mData = NULL; -			mDataEnd = NULL; +			mData.clear(); +			mData.push_back(NULL); +			mDataEnd = &mData[0];  		}  		notifyRemoval(data); @@ -491,7 +483,7 @@ public:  		}  		//node is now root -		llwarns << "!!! OCTREE REMOVING FACE BY ADDRESS, SEVERE PERFORMANCE PENALTY |||" << llendl; +		llwarns << "!!! OCTREE REMOVING ELEMENT BY ADDRESS, SEVERE PERFORMANCE PENALTY |||" << llendl;  		node->removeByAddress(data);  		llassert(data->getBinIndex() == -1);  		return true; diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp index 80752231d7..eadef93c89 100644 --- a/indra/llrender/llvertexbuffer.cpp +++ b/indra/llrender/llvertexbuffer.cpp @@ -38,10 +38,6 @@  #include "llglslshader.h"  #include "llmemory.h" -#if LL_DARWIN -#define LL_VBO_POOLING 1 -#else -#endif  //Next Highest Power Of Two  //helper function, returns first number > v that is a power of 2, or v if v is already a power of 2  U32 nhpo2(U32 v) @@ -294,6 +290,7 @@ void LLVBOPool::seedPool()  } +  void LLVBOPool::cleanup()  {  	U32 size = LL_VBO_BLOCK_SIZE; diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 9ada161cd8..ccf4ce8d1f 100755 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1993,8 +1993,9 @@ if (INSTALL)  endif (INSTALL)  if (PACKAGE) +  set(SYMBOL_SEARCH_DIRS "")    if (WINDOWS) -    set(VIEWER_DIST_DIR "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}") +    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}")      set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-symbols-windows.tar.bz2")      # slplugin.exe failing symbols dump - need to debug, might have to do with updated version of google breakpad      # set(VIEWER_EXE_GLOBS "${VIEWER_BINARY_NAME}${CMAKE_EXECUTABLE_SUFFIX} slplugin.exe") @@ -2003,13 +2004,20 @@ if (PACKAGE)      set(VIEWER_COPY_MANIFEST copy_w_viewer_manifest)    endif (WINDOWS)    if (DARWIN) -    set(VIEWER_DIST_DIR "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app") +    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}") +    # *TODO: Generate these search dirs in the cmake files related to each binary. +    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/llplugin/slplugin/${CMAKE_CFG_INTDIR}") +    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/mac_crash_logger/${CMAKE_CFG_INTDIR}") +    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/mac_updater/${CMAKE_CFG_INTDIR}") +    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/gstreamer010/${CMAKE_CFG_INTDIR}") +    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/quicktime/${CMAKE_CFG_INTDIR}") +    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/webkit/${CMAKE_CFG_INTDIR}")      set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-symbols-darwin.tar.bz2") -    set(VIEWER_EXE_GLOBS "'Second Life' SLPlugin") +    set(VIEWER_EXE_GLOBS "'Second Life' SLPlugin mac-updater mac-crash-logger")      set(VIEWER_LIB_GLOB "*.dylib")    endif (DARWIN)    if (LINUX) -    set(VIEWER_DIST_DIR "${CMAKE_CURRENT_BINARY_DIR}/packaged") +    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_CURRENT_BINARY_DIR}/packaged")      set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-symbols-linux.tar.bz2")      set(VIEWER_EXE_GLOBS "do-not-directly-run-secondlife-bin SLPlugin")      set(VIEWER_LIB_GLOB "*${CMAKE_SHARED_MODULE_SUFFIX}*") @@ -2029,7 +2037,7 @@ if (PACKAGE)      ARGS        "${CMAKE_CURRENT_SOURCE_DIR}/generate_breakpad_symbols.py"        "${LLBUILD_CONFIG}" -      "${VIEWER_DIST_DIR}" +      "${SYMBOL_SEARCH_DIRS}"        "${VIEWER_EXE_GLOBS}"        "${VIEWER_LIB_GLOB}"        "${AUTOBUILD_INSTALL_DIR}/bin/dump_syms" diff --git a/indra/newview/generate_breakpad_symbols.py b/indra/newview/generate_breakpad_symbols.py index 5ebec1563e..4181e4ebb3 100644 --- a/indra/newview/generate_breakpad_symbols.py +++ b/indra/newview/generate_breakpad_symbols.py @@ -39,17 +39,20 @@ import shlex  import subprocess  import tarfile  import StringIO +import pprint + +DEBUG=False  def usage(): -    print >>sys.stderr, "usage: %s viewer_dir viewer_exes libs_suffix dump_syms_tool viewer_symbol_file" % sys.argv[0] +    print >>sys.stderr, "usage: %s search_dirs viewer_exes libs_suffix dump_syms_tool viewer_symbol_file" % sys.argv[0]  class MissingModuleError(Exception):      def __init__(self, modules):          Exception.__init__(self, "Failed to find required modules: %r" % modules)          self.modules = modules -def main(configuration, viewer_dir, viewer_exes, libs_suffix, dump_syms_tool, viewer_symbol_file): -    print "generate_breakpad_symbols run with args: %s" % str((configuration, viewer_dir, viewer_exes, libs_suffix, dump_syms_tool, viewer_symbol_file)) +def main(configuration, search_dirs, viewer_exes, libs_suffix, dump_syms_tool, viewer_symbol_file): +    print "generate_breakpad_symbols run with args: %s" % str((configuration, search_dirs, viewer_exes, libs_suffix, dump_syms_tool, viewer_symbol_file))      if not re.match("release", configuration, re.IGNORECASE):          print "skipping breakpad symbol generation for non-release build." @@ -67,21 +70,49 @@ def main(configuration, viewer_dir, viewer_exes, libs_suffix, dump_syms_tool, vi              return True          return fnmatch.fnmatch(f, libs_suffix) +    search_dirs = search_dirs.split(";") +      def list_files(): -        for (dirname, subdirs, filenames) in os.walk(viewer_dir): -            #print "scanning '%s' for modules..." % dirname -            for f in itertools.ifilter(matches, filenames): -                yield os.path.join(dirname, f) +        for search_dir in search_dirs: +            for (dirname, subdirs, filenames) in os.walk(search_dir): +                if DEBUG: +                    print "scanning '%s' for modules..." % dirname +                for f in itertools.ifilter(matches, filenames): +                    yield os.path.join(dirname, f)      def dump_module(m):          print "dumping module '%s' with '%s'..." % (m, dump_syms_tool) -        child = subprocess.Popen([dump_syms_tool, m] , stdout=subprocess.PIPE) +        dsym_full_path = m +        child = subprocess.Popen([dump_syms_tool, dsym_full_path] , stdout=subprocess.PIPE)          out, err = child.communicate()          return (m,child.returncode, out, err) -    out = tarfile.open(viewer_symbol_file, 'w:bz2') +     +    modules = {} +         +    for m in list_files(): +        if DEBUG: +            print "examining module '%s' ... " % m, +        filename=os.path.basename(m) +        if -1 != m.find("DWARF"): +            # Just use this module; it has the symbols we want. +            modules[filename] = m +            if DEBUG: +                print "found dSYM entry" +        elif filename not in modules: +            # Only use this if we don't already have a (possibly better) entry. +            modules[filename] = m +            if DEBUG: +                print "found new entry" +        elif DEBUG: +            print "ignoring entry" + + +    print "Found these following modules:" +    pprint.pprint( modules ) -    for (filename,status,symbols,err) in itertools.imap(dump_module, list_files()): +    out = tarfile.open(viewer_symbol_file, 'w:bz2') +    for (filename,status,symbols,err) in itertools.imap(dump_module, modules.values()):          if status == 0:              module_line = symbols[:symbols.index('\n')]              module_line = module_line.split() diff --git a/indra/newview/llpolymesh.cpp b/indra/newview/llpolymesh.cpp index c6b9aaae4b..9902d047e4 100644 --- a/indra/newview/llpolymesh.cpp +++ b/indra/newview/llpolymesh.cpp @@ -240,6 +240,7 @@ BOOL LLPolyMeshSharedData::allocateVertexData( U32 numVertices )  			mBaseCoords[i].clear();  			mBaseNormals[i].clear();  			mBaseBinormals[i].clear(); +			mTexCoords[i].clear();  			mWeights[i] = 0.f;          }          mNumVertices = numVertices; diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp index b815439834..2083afdcf5 100644 --- a/indra/newview/llspatialpartition.cpp +++ b/indra/newview/llspatialpartition.cpp @@ -4716,55 +4716,63 @@ LLCullResult::LLCullResult()  	mVisibleListAllocated = 0;  	mVisibleBridgeAllocated = 0; -	mVisibleGroups = NULL; -	mVisibleGroupsEnd = NULL; -	mAlphaGroups = NULL; -	mAlphaGroupsEnd = NULL; -	mOcclusionGroups = NULL; -	mOcclusionGroupsEnd = NULL; -	mDrawableGroups = NULL; -	mDrawableGroupsEnd = NULL; -	mVisibleList = NULL; -	mVisibleListEnd = NULL; -	mVisibleBridge = NULL; -	mVisibleBridgeEnd = NULL; +	mVisibleGroups.clear(); +	mVisibleGroups.push_back(NULL); +	mVisibleGroupsEnd = &mVisibleGroups[0]; +	mAlphaGroups.clear(); +	mAlphaGroups.push_back(NULL); +	mAlphaGroupsEnd = &mAlphaGroups[0]; +	mOcclusionGroups.clear(); +	mOcclusionGroups.push_back(NULL); +	mOcclusionGroupsEnd = &mOcclusionGroups[0]; +	mDrawableGroups.clear(); +	mDrawableGroups.push_back(NULL); +	mDrawableGroupsEnd = &mDrawableGroups[0]; +	mVisibleList.clear(); +	mVisibleList.push_back(NULL); +	mVisibleListEnd = &mVisibleList[0]; +	mVisibleBridge.clear(); +	mVisibleBridge.push_back(NULL); +	mVisibleBridgeEnd = &mVisibleBridge[0];  	for (U32 i = 0; i < LLRenderPass::NUM_RENDER_TYPES; i++)  	{ -		mRenderMap[i] = NULL; -		mRenderMapEnd[i] = NULL; +		mRenderMap[i].clear(); +		mRenderMap[i].push_back(NULL); +		mRenderMapEnd[i] = &mRenderMap[i][0];  		mRenderMapAllocated[i] = 0;  	}  	clear();  } -void LLCullResult::pushBack(void**& head, U32& count, void* val) +template <class T, class V>  +void LLCullResult::pushBack(T& head, U32& count, V* val)  { +	head[count] = val; +	head.push_back(NULL);  	count++; -	head = (void**) realloc((void*) head, sizeof(void*) * count); -	head[count-1] = val;  }  void LLCullResult::clear()  {  	mVisibleGroupsSize = 0; -	mVisibleGroupsEnd = mVisibleGroups; +	mVisibleGroupsEnd = &mVisibleGroups[0];  	mAlphaGroupsSize = 0; -	mAlphaGroupsEnd = mAlphaGroups; +	mAlphaGroupsEnd = &mAlphaGroups[0];  	mOcclusionGroupsSize = 0; -	mOcclusionGroupsEnd = mOcclusionGroups; +	mOcclusionGroupsEnd = &mOcclusionGroups[0];  	mDrawableGroupsSize = 0; -	mDrawableGroupsEnd = mDrawableGroups; +	mDrawableGroupsEnd = &mDrawableGroups[0];  	mVisibleListSize = 0; -	mVisibleListEnd = mVisibleList; +	mVisibleListEnd = &mVisibleList[0];  	mVisibleBridgeSize = 0; -	mVisibleBridgeEnd = mVisibleBridge; +	mVisibleBridgeEnd = &mVisibleBridge[0];  	for (U32 i = 0; i < LLRenderPass::NUM_RENDER_TYPES; i++) @@ -4774,13 +4782,13 @@ void LLCullResult::clear()  			mRenderMap[i][j] = 0;  		}  		mRenderMapSize[i] = 0; -		mRenderMapEnd[i] = mRenderMap[i]; +		mRenderMapEnd[i] = &(mRenderMap[i][0]);  	}  }  LLCullResult::sg_iterator LLCullResult::beginVisibleGroups()  { -	return mVisibleGroups; +	return &mVisibleGroups[0];  }  LLCullResult::sg_iterator LLCullResult::endVisibleGroups() @@ -4790,7 +4798,7 @@ LLCullResult::sg_iterator LLCullResult::endVisibleGroups()  LLCullResult::sg_iterator LLCullResult::beginAlphaGroups()  { -	return mAlphaGroups; +	return &mAlphaGroups[0];  }  LLCullResult::sg_iterator LLCullResult::endAlphaGroups() @@ -4800,7 +4808,7 @@ LLCullResult::sg_iterator LLCullResult::endAlphaGroups()  LLCullResult::sg_iterator LLCullResult::beginOcclusionGroups()  { -	return mOcclusionGroups; +	return &mOcclusionGroups[0];  }  LLCullResult::sg_iterator LLCullResult::endOcclusionGroups() @@ -4810,7 +4818,7 @@ LLCullResult::sg_iterator LLCullResult::endOcclusionGroups()  LLCullResult::sg_iterator LLCullResult::beginDrawableGroups()  { -	return mDrawableGroups; +	return &mDrawableGroups[0];  }  LLCullResult::sg_iterator LLCullResult::endDrawableGroups() @@ -4820,7 +4828,7 @@ LLCullResult::sg_iterator LLCullResult::endDrawableGroups()  LLCullResult::drawable_iterator LLCullResult::beginVisibleList()  { -	return mVisibleList; +	return &mVisibleList[0];  }  LLCullResult::drawable_iterator LLCullResult::endVisibleList() @@ -4830,7 +4838,7 @@ LLCullResult::drawable_iterator LLCullResult::endVisibleList()  LLCullResult::bridge_iterator LLCullResult::beginVisibleBridge()  { -	return mVisibleBridge; +	return &mVisibleBridge[0];  }  LLCullResult::bridge_iterator LLCullResult::endVisibleBridge() @@ -4840,7 +4848,7 @@ LLCullResult::bridge_iterator LLCullResult::endVisibleBridge()  LLCullResult::drawinfo_iterator LLCullResult::beginRenderMap(U32 type)  { -	return mRenderMap[type]; +	return &mRenderMap[type][0];  }  LLCullResult::drawinfo_iterator LLCullResult::endRenderMap(U32 type) @@ -4856,10 +4864,10 @@ void LLCullResult::pushVisibleGroup(LLSpatialGroup* group)  	}  	else  	{ -		pushBack((void**&) mVisibleGroups, mVisibleGroupsAllocated, (void*) group); +		pushBack(mVisibleGroups, mVisibleGroupsAllocated, group);  	}  	++mVisibleGroupsSize; -	mVisibleGroupsEnd = mVisibleGroups+mVisibleGroupsSize; +	mVisibleGroupsEnd = &mVisibleGroups[mVisibleGroupsSize];  }  void LLCullResult::pushAlphaGroup(LLSpatialGroup* group) @@ -4870,10 +4878,10 @@ void LLCullResult::pushAlphaGroup(LLSpatialGroup* group)  	}  	else  	{ -		pushBack((void**&) mAlphaGroups, mAlphaGroupsAllocated, (void*) group); +		pushBack(mAlphaGroups, mAlphaGroupsAllocated, group);  	}  	++mAlphaGroupsSize; -	mAlphaGroupsEnd = mAlphaGroups+mAlphaGroupsSize; +	mAlphaGroupsEnd = &mAlphaGroups[mAlphaGroupsSize];  }  void LLCullResult::pushOcclusionGroup(LLSpatialGroup* group) @@ -4884,10 +4892,10 @@ void LLCullResult::pushOcclusionGroup(LLSpatialGroup* group)  	}  	else  	{ -		pushBack((void**&) mOcclusionGroups, mOcclusionGroupsAllocated, (void*) group); +		pushBack(mOcclusionGroups, mOcclusionGroupsAllocated, group);  	}  	++mOcclusionGroupsSize; -	mOcclusionGroupsEnd = mOcclusionGroups+mOcclusionGroupsSize; +	mOcclusionGroupsEnd = &mOcclusionGroups[mOcclusionGroupsSize];  }  void LLCullResult::pushDrawableGroup(LLSpatialGroup* group) @@ -4898,10 +4906,10 @@ void LLCullResult::pushDrawableGroup(LLSpatialGroup* group)  	}  	else  	{ -		pushBack((void**&) mDrawableGroups, mDrawableGroupsAllocated, (void*) group); +		pushBack(mDrawableGroups, mDrawableGroupsAllocated, group);  	}  	++mDrawableGroupsSize; -	mDrawableGroupsEnd = mDrawableGroups+mDrawableGroupsSize; +	mDrawableGroupsEnd = &mDrawableGroups[mDrawableGroupsSize];  }  void LLCullResult::pushDrawable(LLDrawable* drawable) @@ -4912,10 +4920,10 @@ void LLCullResult::pushDrawable(LLDrawable* drawable)  	}  	else  	{ -		pushBack((void**&) mVisibleList, mVisibleListAllocated, (void*) drawable); +		pushBack(mVisibleList, mVisibleListAllocated, drawable);  	}  	++mVisibleListSize; -	mVisibleListEnd = mVisibleList+mVisibleListSize; +	mVisibleListEnd = &mVisibleList[mVisibleListSize];  }  void LLCullResult::pushBridge(LLSpatialBridge* bridge) @@ -4926,10 +4934,10 @@ void LLCullResult::pushBridge(LLSpatialBridge* bridge)  	}  	else  	{ -		pushBack((void**&) mVisibleBridge, mVisibleBridgeAllocated, (void*) bridge); +		pushBack(mVisibleBridge, mVisibleBridgeAllocated, bridge);  	}  	++mVisibleBridgeSize; -	mVisibleBridgeEnd = mVisibleBridge+mVisibleBridgeSize; +	mVisibleBridgeEnd = &mVisibleBridge[mVisibleBridgeSize];  }  void LLCullResult::pushDrawInfo(U32 type, LLDrawInfo* draw_info) @@ -4940,10 +4948,10 @@ void LLCullResult::pushDrawInfo(U32 type, LLDrawInfo* draw_info)  	}  	else  	{ -		pushBack((void**&) mRenderMap[type], mRenderMapAllocated[type], (void*) draw_info); +		pushBack(mRenderMap[type], mRenderMapAllocated[type], draw_info);  	}  	++mRenderMapSize[type]; -	mRenderMapEnd[type] = mRenderMap[type] + mRenderMapSize[type]; +	mRenderMapEnd[type] = &(mRenderMap[type][mRenderMapSize[type]]);  } diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h index e63037b4a8..b1706d9d35 100644 --- a/indra/newview/llspatialpartition.h +++ b/indra/newview/llspatialpartition.h @@ -569,10 +569,10 @@ class LLCullResult  public:  	LLCullResult(); -	typedef LLSpatialGroup** sg_list_t; -	typedef LLDrawable** drawable_list_t; -	typedef LLSpatialBridge** bridge_list_t; -	typedef LLDrawInfo** drawinfo_list_t; +	typedef std::vector<LLSpatialGroup*> sg_list_t; +	typedef std::vector<LLDrawable*> drawable_list_t; +	typedef std::vector<LLSpatialBridge*> bridge_list_t; +	typedef std::vector<LLDrawInfo*> drawinfo_list_t;  	typedef LLSpatialGroup** sg_iterator;  	typedef LLSpatialBridge** bridge_iterator; @@ -622,7 +622,7 @@ public:  private: -	void pushBack(void** &head, U32& count, void* val); +	template <class T, class V> void pushBack(T &head, U32& count, V* val);  	U32					mVisibleGroupsSize;  	U32					mAlphaGroupsSize; diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp index ae1ba710a1..2fe6cd578b 100644 --- a/indra/newview/llviewerobject.cpp +++ b/indra/newview/llviewerobject.cpp @@ -2046,7 +2046,7 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,  		|| (new_angv != old_angv))  	{  		if (new_rot != mPreviousRotation) -		{ +	{  			resetRot();  		}  		else if (new_angv != old_angv) diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp index e399b45cba..3eeab0bf3e 100644 --- a/indra/newview/llviewerobjectlist.cpp +++ b/indra/newview/llviewerobjectlist.cpp @@ -1446,8 +1446,11 @@ void LLViewerObjectList::updateActive(LLViewerObject *objectp)  		}  	} -	llassert(objectp->isActive() || objectp->getListIndex() == -1); +	//post condition: if object is active, it must be on the active list +	llassert(!active || std::find(mActiveObjects.begin(), mActiveObjects.end(), objectp) != mActiveObjects.end()); +	//post condition: if object is not active, it must not be on the active list +	llassert(active || std::find(mActiveObjects.begin(), mActiveObjects.end(), objectp) == mActiveObjects.end());  }  void LLViewerObjectList::updateObjectCost(LLViewerObject* object) diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h index 9936432a71..449a4633ff 100644 --- a/indra/newview/llviewerobjectlist.h +++ b/indra/newview/llviewerobjectlist.h @@ -129,6 +129,7 @@ public:  	LLViewerObject *getSelectedObject(const U32 object_id);  	inline S32 getNumObjects() { return (S32) mObjects.size(); } +	inline S32 getNumActiveObjects() { return (S32) mActiveObjects.size(); }  	void addToMap(LLViewerObject *objectp);  	void removeFromMap(LLViewerObject *objectp); diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp index 1798d554b9..c3af0f6a51 100755 --- a/indra/newview/llviewerwindow.cpp +++ b/indra/newview/llviewerwindow.cpp @@ -563,6 +563,9 @@ public:  			addText(xpos, ypos, llformat("%d Render Calls", gPipeline.mBatchCount));              ypos += y_inc; +			addText(xpos, ypos, llformat("%d/%d Objects Active", gObjectList.getNumActiveObjects(), gObjectList.getNumObjects())); +			ypos += y_inc; +  			addText(xpos, ypos, llformat("%d Matrix Ops", gPipeline.mMatrixOpCount));  			ypos += y_inc; | 
