diff options
| author | simon <none@none> | 2013-10-30 11:25:08 -0700 | 
|---|---|---|
| committer | simon <none@none> | 2013-10-30 11:25:08 -0700 | 
| commit | b95935ccf3f15d50a07f3888f13430b5f7951a66 (patch) | |
| tree | cbaa5bc036b7d5c42ebcb6457c23f00cb4313673 /indra | |
| parent | 1b43046bb14a71c4596acd0aaef90ff0d2f7a1b3 (diff) | |
| parent | 309d16ebdbd3b4d39271217beb9bc44d41db83d9 (diff) | |
Merge downstream code from viewer-bear
Diffstat (limited to 'indra')
| -rwxr-xr-x | indra/llrender/llrendertarget.cpp | 48 | ||||
| -rw-r--r-- | indra/newview/llconversationview.cpp | 1 | ||||
| -rwxr-xr-x | indra/newview/lldrawpoolalpha.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llfacebookconnect.cpp | 17 | ||||
| -rwxr-xr-x | indra/viewer_components/updater/scripts/darwin/update_install.py | 37 | 
5 files changed, 78 insertions, 29 deletions
| diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp index b82b370d6e..fe8110904d 100755 --- a/indra/llrender/llrendertarget.cpp +++ b/indra/llrender/llrendertarget.cpp @@ -364,35 +364,55 @@ void LLRenderTarget::release()  		sBytesAllocated -= mResX*mResY*4;  	} -	else if (mUseDepth && mFBO) -	{ //detach shared depth buffer +	else if (mFBO) +	{  		glBindFramebuffer(GL_FRAMEBUFFER, mFBO); -		if (mStencil) -		{ //attached as a renderbuffer -			glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 0); -			glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0); -			mStencil = false; + +		if (mUseDepth) +		{ //detach shared depth buffer +			if (mStencil) +			{ //attached as a renderbuffer +				glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, 0); +				glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0); +				mStencil = false; +			} +			else +			{ //attached as a texture +				glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, LLTexUnit::getInternalType(mUsage), 0, 0); +			} +			mUseDepth = false;  		} -		else -		{ //attached as a texture -			glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, LLTexUnit::getInternalType(mUsage), 0, 0); +	} + +	// Detach any extra color buffers (e.g. SRGB spec buffers) +	// +	if (mFBO && (mTex.size() > 1)) +	{		 +		S32 z; +		for (z = mTex.size() - 1; z >= 1; z--) +		{ +			sBytesAllocated -= mResX*mResY*4; +			glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0+z, LLTexUnit::getInternalType(mUsage), 0, 0); +			stop_glerror(); +			LLImageGL::deleteTextures(1, &mTex[z]);  		} -		mUseDepth = false;  	}  	if (mFBO)  	{  		glDeleteFramebuffers(1, (GLuint *) &mFBO); +		stop_glerror();  		mFBO = 0;  	}  	if (mTex.size() > 0)  	{ -		sBytesAllocated -= mResX*mResY*4*mTex.size(); -		LLImageGL::deleteTextures(mTex.size(), &mTex[0]); +		sBytesAllocated -= mResX*mResY*4; +		LLImageGL::deleteTextures(1, &mTex[0]); +	} +  		mTex.clear();  		mInternalFormat.clear(); -	}  	mResX = mResY = 0; diff --git a/indra/newview/llconversationview.cpp b/indra/newview/llconversationview.cpp index fb3854d806..90800fee58 100644 --- a/indra/newview/llconversationview.cpp +++ b/indra/newview/llconversationview.cpp @@ -281,7 +281,6 @@ BOOL LLConversationViewSession::handleMouseDown( S32 x, S32 y, MASK mask )  			{  				im_container->collapseMessagesPane(false);  			} -  		}  		selectConversationItem();      } diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp index 6c5d229dba..e27dc279f4 100755 --- a/indra/newview/lldrawpoolalpha.cpp +++ b/indra/newview/lldrawpoolalpha.cpp @@ -382,9 +382,7 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask, S32 pass)  			bool is_particle_or_hud_particle = group->mSpatialPartition->mPartitionType == LLViewerRegion::PARTITION_PARTICLE  													  || group->mSpatialPartition->mPartitionType == LLViewerRegion::PARTITION_HUD_PARTICLE; -			bool draw_glow_for_this_partition = mVertexShaderLevel > 0 && // no shaders = no glow. -				// All particle systems seem to come off the wire with texture entries which claim that they glow.  This is probably a bug in the data.  Suppress. -				!is_particle_or_hud_particle; +			bool draw_glow_for_this_partition = mVertexShaderLevel > 0; // no shaders = no glow.  			static LLFastTimer::DeclareTimer FTM_RENDER_ALPHA_GROUP_LOOP("Alpha Group");  			LLFastTimer t(FTM_RENDER_ALPHA_GROUP_LOOP); diff --git a/indra/newview/llfacebookconnect.cpp b/indra/newview/llfacebookconnect.cpp index 611d18d6d6..9a20ce8f1b 100644 --- a/indra/newview/llfacebookconnect.cpp +++ b/indra/newview/llfacebookconnect.cpp @@ -356,13 +356,18 @@ void LLFacebookConnect::openFacebookWeb(std::string url)  std::string LLFacebookConnect::getFacebookConnectURL(const std::string& route, bool include_read_from_master)  { -	std::string url = gAgent.getRegion()->getCapability("FacebookConnect"); -	url += route; +    std::string url(""); +    LLViewerRegion *regionp = gAgent.getRegion(); +    if (regionp) +    { +        url = regionp->getCapability("FacebookConnect"); +        url += route; -	if (include_read_from_master && mReadFromMaster) -	{ -		url += "?read_from_master=true"; -	} +        if (include_read_from_master && mReadFromMaster) +        { +            url += "?read_from_master=true"; +        } +    }  	return url;  } diff --git a/indra/viewer_components/updater/scripts/darwin/update_install.py b/indra/viewer_components/updater/scripts/darwin/update_install.py index 2fc6fcdb29..10d507c9ef 100755 --- a/indra/viewer_components/updater/scripts/darwin/update_install.py +++ b/indra/viewer_components/updater/scripts/darwin/update_install.py @@ -17,6 +17,7 @@ $/LicenseInfo$  import os  import sys  import cgitb +from contextlib import contextmanager  import errno  import glob  import plistlib @@ -32,6 +33,11 @@ import Tkinter, tkMessageBox  TITLE = "Second Life Viewer Updater"  # Magic bundle identifier used by all Second Life viewer bundles  BUNDLE_IDENTIFIER = "com.secondlife.indra.viewer" +# Magic OS directory name that causes Cocoa viewer to crash on OS X 10.7.5 +# (see MAINT-3331) +STATE_DIR = os.path.join( +    os.environ["HOME"], "Library", "Saved Application State", +    BUNDLE_IDENTIFIER + ".savedState")  # Global handle to the MessageFrame so we can update message  FRAME = None @@ -137,6 +143,23 @@ def write_marker(markerfile, markertext):          log("%s exception: %s" % (err.__class__.__name__, err))  # **************************************************************************** +#   Utility +# **************************************************************************** +@contextmanager +def allow_errno(errn): +    """ +    Execute body of 'with' statement, accepting OSError with specific errno +    'errn'. Propagate any other exception, or an OSError with any other errno. +    """ +    try: +        # run the body of the 'with' statement +        yield +    except OSError, err: +        # unless errno == passed errn, re-raise the exception +        if err.errno != errn: +            raise + +# ****************************************************************************  #   Main script logic  # ****************************************************************************  def main(dmgfile, markerfile, markertext): @@ -158,12 +181,9 @@ def main(dmgfile, markerfile, markertext):          # Move the old updater.log file out of the way          logname = os.path.join(logsdir, "updater.log") -        try: +        # Nonexistence is okay. Anything else, not so much. +        with allow_errno(errno.ENOENT):              os.rename(logname, logname + ".old") -        except OSError, err: -            # Nonexistence is okay. Anything else, not so much. -            if err.errno != errno.ENOENT: -                raise          # Open new updater.log.          global LOGF @@ -345,6 +365,13 @@ def main(dmgfile, markerfile, markertext):              log("touch " + appdir)              os.utime(appdir, None)      # set to current time +            # MAINT-3331: remove STATE_DIR. Empirically, this resolves a +            # persistent, mysterious crash after updating our viewer on an OS +            # X 10.7.5 system. +            log("rm -rf '%s'" % STATE_DIR) +            with allow_errno(errno.ENOENT): +                shutil.rmtree(STATE_DIR) +              command = ["open", appdir]              log(' '.join(command))              subprocess.check_call(command, stdout=LOGF, stderr=subprocess.STDOUT) | 
