diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llrender/llgl.cpp | 2 | ||||
| -rw-r--r-- | indra/llrender/llimagegl.cpp | 57 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/waterF.glsl | 4 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/waterV.glsl | 2 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/environment/waterV.glsl | 16 | ||||
| -rw-r--r-- | indra/newview/llfeaturemanager.cpp | 15 | 
6 files changed, 68 insertions, 28 deletions
| diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp index 9e4857b6bc..09e451c62a 100644 --- a/indra/llrender/llgl.cpp +++ b/indra/llrender/llgl.cpp @@ -86,7 +86,7 @@ void APIENTRY gl_debug_callback(GLenum source,  	}  	else  	{ -		llwarns << "----- GL WARNING -------" << llendl; +		llwarns << "----- GL WARNING -------" << llendl;		  	}  	llwarns << "Type: " << std::hex << type << llendl;  	llwarns << "ID: " << std::hex << id << llendl; diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp index a4d7872ec2..552dac518a 100644 --- a/indra/llrender/llimagegl.cpp +++ b/indra/llrender/llimagegl.cpp @@ -726,6 +726,12 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips)  						glPixelStorei(GL_UNPACK_SWAP_BYTES, 0);  						stop_glerror();  					} + +					if (LLRender::sGLCoreProfile) +					{ +						glGenerateMipmap(mTarget); +					}	 +					stop_glerror();  				}  			}  			else @@ -1084,27 +1090,46 @@ void LLImageGL::deleteTextures(LLTexUnit::eTextureType type, U32 format, S32 mip  {  	if (gGLManager.mInited)  	{ -		if (format == 0 ||  type == LLTexUnit::TT_CUBE_MAP || mip_levels == -1) -		{ //unknown internal format or unknown number of mip levels, not safe to reuse -			glDeleteTextures(numTextures, textures); -		} -		else +		switch (format)  		{ -			for (S32 i = 0; i < numTextures; ++i) -			{ //remove texture from VRAM by setting its size to zero -				for (S32 j = 0; j <= mip_levels; j++) -				{ -					gGL.getTexUnit(0)->bindManual(type, textures[i]); +			case 0: + +			// We get ARB errors in debug when attempting to use glTexImage2D with these deprecated pix formats +			// +			case GL_LUMINANCE8: +			case GL_INTENSITY8: +			case GL_ALPHA8: +				glDeleteTextures(numTextures, textures); +			break; -					glTexImage2D(LLTexUnit::getInternalType(type), j, format, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); +			default: +			{ +				if (type == LLTexUnit::TT_CUBE_MAP || mip_levels == -1) +				{ //unknown internal format or unknown number of mip levels, not safe to reuse +					glDeleteTextures(numTextures, textures);  				} +				else +				{ +					for (S32 i = 0; i < numTextures; ++i) +					{ //remove texture from VRAM by setting its size to zero + +						for (S32 j = 0; j <= mip_levels; j++) +						{ +							gGL.getTexUnit(0)->bindManual(type, textures[i]); +							U32 internal_type = LLTexUnit::getInternalType(type); +							glTexImage2D(internal_type, j, format, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); +							stop_glerror(); +						} -				llassert(std::find(sDeadTextureList[type][format].begin(), -								   sDeadTextureList[type][format].end(), textures[i]) ==  -								   sDeadTextureList[type][format].end()); +						llassert(std::find(sDeadTextureList[type][format].begin(), +							sDeadTextureList[type][format].end(), textures[i]) ==  +							sDeadTextureList[type][format].end()); -				sDeadTextureList[type][format].push_back(textures[i]); -			}	 +						sDeadTextureList[type][format].push_back(textures[i]); +					}	 +				}				 +			} +			break;  		}  	} diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl index 3427d6db57..1ae006bc8a 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl @@ -151,8 +151,8 @@ void main()  	//spec *= shadow;  	//color.rgb += spec * specular; -	//color.rgb = atmosTransport(color.rgb); -	//color.rgb = scaleSoftClip(color.rgb); +	color.rgb = atmosTransport(color.rgb); +	color.rgb = scaleSoftClip(color.rgb);  	//color.a = spec * sunAngle2;  	//wavef.z *= 0.1f; diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl index 9734acf005..ece34dcc4e 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl @@ -85,7 +85,7 @@ void main()  	pos.w = 1.0;  	pos = modelview_matrix*pos; -	calcAtmospherics(pos.xyz); +	calcAtmospherics(view.xyz);  	//pass wave parameters to pixel shader  	vec2 bigWave =  (v.xy) * vec2(0.04,0.04)  + d1 * time * 0.055; diff --git a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl index f66ba1d2d9..5aff156eae 100644 --- a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl +++ b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl @@ -28,6 +28,7 @@ uniform mat4 modelview_projection_matrix;  ATTRIBUTE vec3 position; +  void calcAtmospherics(vec3 inPositionEye);  uniform vec2 d1; @@ -48,41 +49,40 @@ float wave(vec2 v, float t, float f, vec2 d, float s)  void main()  {  	//transform vertex +	vec4 pos = vec4(position.xyz, 1.0);  	mat4 modelViewProj = modelview_projection_matrix;  	vec4 oPosition;  	//get view vector  	vec3 oEyeVec; -	oEyeVec.xyz = position.xyz-eyeVec; +	oEyeVec.xyz = pos.xyz-eyeVec;  	float d = length(oEyeVec.xy);  	float ld = min(d, 2560.0); -	vec3 lpos = position; -	lpos.xy = eyeVec.xy + oEyeVec.xy/d*ld; +	pos.xy = eyeVec.xy + oEyeVec.xy/d*ld;  	view.xyz = oEyeVec;  	d = clamp(ld/1536.0-0.5, 0.0, 1.0);	  	d *= d; -	oPosition = vec4(lpos, 1.0); +	oPosition = vec4(position, 1.0);  	oPosition.z = mix(oPosition.z, max(eyeVec.z*0.75, 0.0), d);  	oPosition = modelViewProj * oPosition; +	  	refCoord.xyz = oPosition.xyz + vec3(0,0,0.2);  	//get wave position parameter (create sweeping horizontal waves) -	vec3 v = lpos; +	vec3 v = pos.xyz;  	v.x += (cos(v.x*0.08/*+time*0.01*/)+sin(v.y*0.02))*6.0;  	//push position for further horizon effect. -	vec4 pos;  	pos.xyz = oEyeVec.xyz*(waterHeight/oEyeVec.z);  	pos.w = 1.0;  	pos = modelview_matrix*pos; -	calcAtmospherics(pos.xyz); -	 +	calcAtmospherics(view.xyz);  	//pass wave parameters to pixel shader  	vec2 bigWave =  (v.xy) * vec2(0.04,0.04)  + d1 * time * 0.055; diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp index a4cadcd5dc..ddb9d3bc43 100644 --- a/indra/newview/llfeaturemanager.cpp +++ b/indra/newview/llfeaturemanager.cpp @@ -705,6 +705,20 @@ void LLFeatureManager::setGraphicsLevel(S32 level, bool skipFeatures)  	switch (level)  	{  		case 0: +#if LL_DARWIN +			// This Mac-specific change is to insure that we force 'Basic Shaders' for all Mac +			// systems which support them instead of falling back to fixed-function unnecessarily +			// MAINT-2157 +			// +			if (gGLManager.mGLVersion < 2.1f) +			{ +				maskFeatures("LowFixedFunction");			 +			} +			else +			{ //same as low, but with "Basic Shaders" enabled +				maskFeatures("Low"); +			} +#else  			if (gGLManager.mGLVersion < 3.f || gGLManager.mIsIntel)  			{ //only use fixed function by default if GL version < 3.0 or this is an intel graphics chip  				maskFeatures("LowFixedFunction");			 @@ -713,6 +727,7 @@ void LLFeatureManager::setGraphicsLevel(S32 level, bool skipFeatures)  			{ //same as low, but with "Basic Shaders" enabled  				maskFeatures("Low");  			} +#endif  			break;  		case 1:  			maskFeatures("LowMid"); | 
