diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/newview/app_settings/shaders/class3/windlight/advancedAtmoF.glsl | 3 | ||||
| -rw-r--r-- | indra/newview/llviewershadermgr.cpp | 8 | ||||
| -rw-r--r-- | indra/newview/llvosky.cpp | 138 | 
3 files changed, 77 insertions, 72 deletions
diff --git a/indra/newview/app_settings/shaders/class3/windlight/advancedAtmoF.glsl b/indra/newview/app_settings/shaders/class3/windlight/advancedAtmoF.glsl index d27363a60c..014ab9d11b 100644 --- a/indra/newview/app_settings/shaders/class3/windlight/advancedAtmoF.glsl +++ b/indra/newview/app_settings/shaders/class3/windlight/advancedAtmoF.glsl @@ -33,6 +33,7 @@ in vec3 view_dir;  uniform vec3 cameraPosLocal;  uniform vec3 sun_direction; +uniform float sun_size;  uniform sampler2D transmittance_texture;  uniform sampler3D scattering_texture; @@ -54,7 +55,7 @@ void main()      radiance *= transmittance;      // If the view ray intersects the Sun, add the Sun radiance. -    if (dot(view_direction, sun_direction) >= sun_size.y) +    if (dot(view_direction, sun_direction) >= sun_size)      {          radiance = radiance + transmittance * GetSolarLuminance();      } diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 1c78bf36db..5174c12d9a 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -3331,7 +3331,7 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()          success = gInscatterRectProgram.createShader(NULL, NULL);      } -	if (success && (mVertexShaderLevel[SHADER_WINDLIGHT] < 3)) +	if (success)  	{  		gWLSkyProgram.mName = "Windlight Sky Shader";  		//gWLSkyProgram.mFeatures.hasGamma = true; @@ -3340,10 +3340,12 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()  		gWLSkyProgram.mShaderFiles.push_back(make_pair("windlight/skyF.glsl", GL_FRAGMENT_SHADER_ARB));  		gWLSkyProgram.mShaderLevel = mVertexShaderLevel[SHADER_WINDLIGHT];  		gWLSkyProgram.mShaderGroup = LLGLSLShader::SG_SKY; +		if (gAtmosphere != nullptr) +		gWLSkyProgram.mExtraLinkObject = gAtmosphere->getAtmosphericShaderForLink();  		success = gWLSkyProgram.createShader(NULL, NULL);  	} -    if (success && (mVertexShaderLevel[SHADER_WINDLIGHT] < 3)) +	if (success)  	{  		gWLCloudProgram.mName = "Windlight Cloud Program";  		//gWLCloudProgram.mFeatures.hasGamma = true; @@ -3352,6 +3354,8 @@ BOOL LLViewerShaderMgr::loadShadersWindLight()  		gWLCloudProgram.mShaderFiles.push_back(make_pair("windlight/cloudsF.glsl", GL_FRAGMENT_SHADER_ARB));  		gWLCloudProgram.mShaderLevel = mVertexShaderLevel[SHADER_WINDLIGHT];  		gWLCloudProgram.mShaderGroup = LLGLSLShader::SG_SKY; +		if (gAtmosphere != nullptr) +		gWLCloudProgram.mExtraLinkObject = gAtmosphere->getAtmosphericShaderForLink();  		success = gWLCloudProgram.createShader(NULL, NULL);  	} diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp index e65d7db5ca..125dbce24c 100644 --- a/indra/newview/llvosky.cpp +++ b/indra/newview/llvosky.cpp @@ -555,85 +555,85 @@ BOOL LLVOSky::updateSky()  		if (mForceUpdate || total_no_tiles == frame)  		{ -		LLSkyTex::stepCurrent(); +		    LLSkyTex::stepCurrent(); -		const static F32 LIGHT_DIRECTION_THRESHOLD = (F32) cos(DEG_TO_RAD * 1.f); -		const static F32 COLOR_CHANGE_THRESHOLD = 0.01f; - -		LLVector3 direction = mSun.getDirection(); -		direction.normalize(); -		const F32 dot_lighting = direction * mLastLightingDirection; - -		LLColor3 delta_color; -		delta_color.setVec(mLastTotalAmbient.mV[0] - total_ambient.mV[0], -							mLastTotalAmbient.mV[1] - total_ambient.mV[1], -                            mLastTotalAmbient.mV[2] - total_ambient.mV[2]); - -		if ( mForceUpdate  -				|| (((dot_lighting < LIGHT_DIRECTION_THRESHOLD) -				|| (delta_color.length() > COLOR_CHANGE_THRESHOLD) -				|| !mInitialized) -			&& !direction.isExactlyZero())) -		{ -			mLastLightingDirection = direction; -            mLastTotalAmbient = total_ambient; -			mInitialized = TRUE; - -			if (mCubeMap) -			{ -                    if (mForceUpdate) -					{ -				updateFog(LLViewerCamera::getInstance()->getFar()); - -				for (int side = 0; side < 6; side++)  -				{ -					for (int tile = 0; tile < NUM_TILES; tile++)  -					{ -						createSkyTexture(side, tile); -					} -				} - -				for (int side = 0; side < 6; side++)  -				{ -					LLImageRaw* raw1 = mSkyTex[side].getImageRaw(TRUE); -					LLImageRaw* raw2 = mSkyTex[side].getImageRaw(FALSE); -					raw2->copy(raw1); -					mSkyTex[side].createGLImage(mSkyTex[side].getWhich(FALSE)); - -					raw1 = mShinyTex[side].getImageRaw(TRUE); -					raw2 = mShinyTex[side].getImageRaw(FALSE); -					raw2->copy(raw1); -					mShinyTex[side].createGLImage(mShinyTex[side].getWhich(FALSE)); -				} -				next_frame = 0;	 - -                // update the sky texture -			    for (S32 i = 0; i < 6; ++i) +		    const static F32 LIGHT_DIRECTION_THRESHOLD = (F32) cos(DEG_TO_RAD * 1.f); +		    const static F32 COLOR_CHANGE_THRESHOLD = 0.01f; + +		    LLVector3 direction = mSun.getDirection(); +		    direction.normalize(); +		    const F32 dot_lighting = direction * mLastLightingDirection; + +		    LLColor3 delta_color; +		    delta_color.setVec(mLastTotalAmbient.mV[0] - total_ambient.mV[0], +							    mLastTotalAmbient.mV[1] - total_ambient.mV[1], +                                mLastTotalAmbient.mV[2] - total_ambient.mV[2]); + +		    if ( mForceUpdate  +				    || (((dot_lighting < LIGHT_DIRECTION_THRESHOLD) +				    || (delta_color.length() > COLOR_CHANGE_THRESHOLD) +				    || !mInitialized) +			    && !direction.isExactlyZero())) +		    { +			    mLastLightingDirection = direction; +                mLastTotalAmbient = total_ambient; +			    mInitialized = TRUE; + +			    if (mCubeMap)  			    { -				    mSkyTex[i].create(1.0f); -				    mShinyTex[i].create(1.0f); -			    } +                    if (mForceUpdate) +				    { +				        updateFog(LLViewerCamera::getInstance()->getFar()); + +				        for (int side = 0; side < 6; side++)  +				        { +					        for (int tile = 0; tile < NUM_TILES; tile++)  +					        { +						        createSkyTexture(side, tile); +					        } +				        } + +				        for (int side = 0; side < 6; side++)  +				        { +					        LLImageRaw* raw1 = mSkyTex[side].getImageRaw(TRUE); +					        LLImageRaw* raw2 = mSkyTex[side].getImageRaw(FALSE); +					        raw2->copy(raw1); +					        mSkyTex[side].createGLImage(mSkyTex[side].getWhich(FALSE)); + +					        raw1 = mShinyTex[side].getImageRaw(TRUE); +					        raw2 = mShinyTex[side].getImageRaw(FALSE); +					        raw2->copy(raw1); +					        mShinyTex[side].createGLImage(mShinyTex[side].getWhich(FALSE)); +				        } +				        next_frame = 0;	 + +                        // update the sky texture +			            for (S32 i = 0; i < 6; ++i) +			            { +				            mSkyTex[i].create(1.0f); +				            mShinyTex[i].create(1.0f); +			            } -                // update the environment map +                        // update the environment map  			            if (mCubeMap)  			            { -				std::vector<LLPointer<LLImageRaw> > images; -				images.reserve(6); -				for (S32 side = 0; side < 6; side++) -				{ -					images.push_back(mShinyTex[side].getImageRaw(TRUE)); -				} -				mCubeMap->init(images); +			            std::vector<LLPointer<LLImageRaw> > images; +				        images.reserve(6); +				        for (S32 side = 0; side < 6; side++) +				        { +					        images.push_back(mShinyTex[side].getImageRaw(TRUE)); +				        } +				        mCubeMap->init(images);  				gGL.getTexUnit(0)->disable();  			}  					}  				} -			} +                    } -			gPipeline.markRebuild(gSky.mVOGroundp->mDrawable, LLDrawable::REBUILD_ALL, TRUE); -			mForceUpdate = FALSE; -		} -	} +			        gPipeline.markRebuild(gSky.mVOGroundp->mDrawable, LLDrawable::REBUILD_ALL, TRUE); +			        mForceUpdate = FALSE; +		        } +            }  	if (mDrawable.notNull() && mDrawable->getFace(0) && !mDrawable->getFace(0)->getVertexBuffer())  	{  | 
