diff options
| -rw-r--r-- | indra/llinventory/llsettingsdaycycle.cpp | 5 | ||||
| -rw-r--r-- | indra/llinventory/llsettingsdaycycle.h | 2 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/moonF.glsl | 64 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/deferred/moonV.glsl | 44 | ||||
| -rw-r--r-- | indra/newview/app_settings/shaders/class1/windlight/moonF.glsl | 6 | ||||
| -rw-r--r-- | indra/newview/lldrawpoolwlsky.cpp | 4 | ||||
| -rw-r--r-- | indra/newview/llfloatereditextdaycycle.cpp | 6 | ||||
| -rw-r--r-- | indra/newview/llviewershadermgr.cpp | 25 | ||||
| -rw-r--r-- | indra/newview/llviewershadermgr.h | 1 | 
9 files changed, 147 insertions, 10 deletions
| diff --git a/indra/llinventory/llsettingsdaycycle.cpp b/indra/llinventory/llsettingsdaycycle.cpp index 2c8bddee93..2534d5f0f1 100644 --- a/indra/llinventory/llsettingsdaycycle.cpp +++ b/indra/llinventory/llsettingsdaycycle.cpp @@ -661,7 +661,7 @@ LLSettingsBase::ptr_t LLSettingsDay::getSettingsAtKeyframe(const LLSettingsBase:      return LLSettingsBase::ptr_t();  } -LLSettingsDay::CycleTrack_t::value_type LLSettingsDay::getSettingsNearKeyfarme(const LLSettingsBase::TrackPosition &keyframe, S32 track, F32 fudge) const +LLSettingsDay::CycleTrack_t::value_type LLSettingsDay::getSettingsNearKeyframe(const LLSettingsBase::TrackPosition &keyframe, S32 track, F32 fudge) const  {      if ((track < 0) || (track >= TRACK_MAX))      { @@ -683,8 +683,7 @@ LLSettingsDay::CycleTrack_t::value_type LLSettingsDay::getSettingsNearKeyfarme(c      F32 dist = get_wrapping_distance(startframe, (*it).first); -    LL_WARNS("LAPRAS") << "[" << startframe << " ... " << keyframe << " -> " << (*it).first << "@" << dist << LL_ENDL; - +    LL_DEBUGS("LAPRAS") << "[" << startframe << " ... " << keyframe << " -> " << (*it).first << "@" << dist << LL_ENDL;      if (dist <= (fudge * 2.0f))          return (*it); diff --git a/indra/llinventory/llsettingsdaycycle.h b/indra/llinventory/llsettingsdaycycle.h index be888f42cc..c719b593c1 100644 --- a/indra/llinventory/llsettingsdaycycle.h +++ b/indra/llinventory/llsettingsdaycycle.h @@ -100,7 +100,7 @@ public:      LLSettingsSkyPtr_t          getSkyAtKeyframe(const LLSettingsBase::TrackPosition& keyframe, S32 track) const;      void                        setSettingsAtKeyframe(const LLSettingsBase::ptr_t &settings, const LLSettingsBase::TrackPosition& keyframe, S32 track);      LLSettingsBase::ptr_t       getSettingsAtKeyframe(const LLSettingsBase::TrackPosition& keyframe, S32 track) const; -    CycleTrack_t::value_type    getSettingsNearKeyfarme(const LLSettingsBase::TrackPosition &keyframe, S32 track, F32 fudge) const; +    CycleTrack_t::value_type    getSettingsNearKeyframe(const LLSettingsBase::TrackPosition &keyframe, S32 track, F32 fudge) const;      void                        clearTrack(S32 track);          //--------------------------------------------------------------------- diff --git a/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl b/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl new file mode 100644 index 0000000000..b0fca8ddee --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/moonF.glsl @@ -0,0 +1,64 @@ +/**  + * @file moonF.glsl + * + * $LicenseInfo:firstyear=2005&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2005, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ +  +#extension GL_ARB_texture_rectangle : enable + +/*[EXTRA_CODE_HERE]*/ + +#ifdef DEFINE_GL_FRAGCOLOR +out vec4 frag_color; +#else +#define frag_color gl_FragColor +#endif + +vec3 fullbrightAtmosTransport(vec3 light); +vec3 fullbrightScaleSoftClip(vec3 light); + +uniform vec4 color; +uniform vec4 sunlight_color; +uniform vec3 lumWeights; +uniform float minLuminance; +uniform sampler2D diffuseMap; +uniform sampler2D altDiffuseMap; +uniform float blend_factor; // interp factor between moon A/B +VARYING vec2 vary_texcoord0; + +void main()  +{ +	vec4 moonA = texture2D(diffuseMap, vary_texcoord0.xy); +	vec4 moonB = texture2D(altDiffuseMap, vary_texcoord0.xy); +    vec4 c     = mix(moonA, moonB, blend_factor); + +	c.rgb = pow(c.rgb, vec3(0.7f)); +	c.rgb = fullbrightAtmosTransport(c.rgb); +    c.rgb = fullbrightScaleSoftClip(c.rgb); + +    // mix factor which blends when sunlight is brighter +    // and shows true moon color at night +    vec3 luma_weights = vec3(0.1, 0.3, 0.0); +    float mix = 1.0f - dot(sunlight_color.rgb, luma_weights); +	frag_color = vec4(c.rgb, mix * c.a); +} + diff --git a/indra/newview/app_settings/shaders/class1/deferred/moonV.glsl b/indra/newview/app_settings/shaders/class1/deferred/moonV.glsl new file mode 100644 index 0000000000..4fcc44ed01 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/moonV.glsl @@ -0,0 +1,44 @@ +/**  + * @file moonV.glsl + * +  * $LicenseInfo:firstyear=2007&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2007, Linden Research, Inc. + *  + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; + * version 2.1 of the License only. + *  + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * Lesser General Public License for more details. + *  + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA + *  + * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA + * $/LicenseInfo$ + */ + +uniform mat4 texture_matrix0; +uniform mat4 modelview_matrix; +uniform mat4 modelview_projection_matrix; + +ATTRIBUTE vec3 position; +ATTRIBUTE vec2 texcoord0; + +VARYING vec2 vary_texcoord0; + +void main() +{ +	//transform vertex +	vec4 vert = vec4(position.xyz, 1.0); +	vec4 pos = (modelview_matrix * vert); + +	gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0); +	 +	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy; +} diff --git a/indra/newview/app_settings/shaders/class1/windlight/moonF.glsl b/indra/newview/app_settings/shaders/class1/windlight/moonF.glsl index 4d0d8882b9..933625986c 100644 --- a/indra/newview/app_settings/shaders/class1/windlight/moonF.glsl +++ b/indra/newview/app_settings/shaders/class1/windlight/moonF.glsl @@ -51,13 +51,13 @@ void main()  	vec4 moonB = texture2D(altDiffuseMap, vary_texcoord0.xy);      vec4 c     = mix(moonA, moonB, blend_factor); +    c.rgb = pow(c.rgb, vec3(0.45f));  	c.rgb = fullbrightAtmosTransport(c.rgb);      c.rgb = fullbrightScaleSoftClip(c.rgb); -    c.rgb = pow(c.rgb, vec3(0.45f));      // mix factor which blends when sunlight is brighter      // and shows true moon color at night -    float mix = dot(normalize(sunlight_color.rgb), lumWeights); -    mix = smoothstep(-0.5f, 2.0f, mix); +    vec3 luma_weights = vec3(0.1, 0.3, 0.0); +    float mix = 1.0f - dot(sunlight_color.rgb, luma_weights);  	frag_color = vec4(c.rgb, mix * c.a);  } diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp index abf07377e2..69a7b13537 100644 --- a/indra/newview/lldrawpoolwlsky.cpp +++ b/indra/newview/lldrawpoolwlsky.cpp @@ -90,6 +90,10 @@ void LLDrawPoolWLSky::beginDeferredPass(S32 pass)  {  	sky_shader = &gDeferredWLSkyProgram;  	cloud_shader = &gDeferredWLCloudProgram; +    moon_shader = +			LLPipeline::sUnderWaterRender ? +				&gObjectFullbrightNoColorWaterProgram : +				&gDeferredWLMoonProgram;  }  void LLDrawPoolWLSky::endDeferredPass(S32 pass) diff --git a/indra/newview/llfloatereditextdaycycle.cpp b/indra/newview/llfloatereditextdaycycle.cpp index 933d5c62ab..d10fe821c8 100644 --- a/indra/newview/llfloatereditextdaycycle.cpp +++ b/indra/newview/llfloatereditextdaycycle.cpp @@ -358,7 +358,7 @@ void LLFloaterEditExtDayCycle::onAddTrack()      std::string sldr_key = mFramesSlider->getCurSlider();      LLSettingsBase::Seconds frame(mTimeSlider->getCurSliderValue());      LLSettingsBase::ptr_t setting; -    if ((mEditDay->getSettingsNearKeyfarme(frame, mCurrentTrack, FRAME_SLOP_FACTOR)).second) +    if ((mEditDay->getSettingsNearKeyframe(frame, mCurrentTrack, FRAME_SLOP_FACTOR)).second)      {          LL_WARNS("SETTINGS") << "Attempt to add new frame too close to existing frame." << LL_ENDL;          return; @@ -900,7 +900,7 @@ void LLFloaterEditExtDayCycle::synchronizeTabs()      if (mCurrentTrack == LLSettingsDay::TRACK_WATER)      {          canedit = !mIsPlaying; -        LLSettingsDay::CycleTrack_t::value_type found = mEditDay->getSettingsNearKeyfarme(frame, LLSettingsDay::TRACK_WATER, FRAME_SLOP_FACTOR); +        LLSettingsDay::CycleTrack_t::value_type found = mEditDay->getSettingsNearKeyframe(frame, LLSettingsDay::TRACK_WATER, FRAME_SLOP_FACTOR);          psettingW = std::static_pointer_cast<LLSettingsWater>(found.second);          mCurrentEdit = psettingW;          if (!psettingW) @@ -924,7 +924,7 @@ void LLFloaterEditExtDayCycle::synchronizeTabs()      if (mCurrentTrack != LLSettingsDay::TRACK_WATER)      {          canedit = !mIsPlaying; -        LLSettingsDay::CycleTrack_t::value_type found = mEditDay->getSettingsNearKeyfarme(frame, mCurrentTrack, FRAME_SLOP_FACTOR); +        LLSettingsDay::CycleTrack_t::value_type found = mEditDay->getSettingsNearKeyframe(frame, mCurrentTrack, FRAME_SLOP_FACTOR);          psettingS = std::static_pointer_cast<LLSettingsSky>(found.second);          mCurrentEdit = psettingS;          if (!psettingS) diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 269df35773..ea97765e5b 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -232,6 +232,7 @@ LLGLSLShader			gFXAAProgram;  LLGLSLShader			gDeferredPostNoDoFProgram;  LLGLSLShader			gDeferredWLSkyProgram;  LLGLSLShader			gDeferredWLCloudProgram; +LLGLSLShader			gDeferredWLMoonProgram;  LLGLSLShader			gDeferredStarProgram;  LLGLSLShader			gDeferredFullbrightShinyProgram;  LLGLSLShader			gDeferredSkinnedFullbrightShinyProgram; @@ -343,6 +344,7 @@ LLViewerShaderMgr::LLViewerShaderMgr() :  	mShaderList.push_back(&gDeferredAvatarAlphaProgram);  	mShaderList.push_back(&gDeferredWLSkyProgram);  	mShaderList.push_back(&gDeferredWLCloudProgram); +    mShaderList.push_back(&gDeferredWLMoonProgram);  }  LLViewerShaderMgr::~LLViewerShaderMgr() @@ -1211,6 +1213,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		gDeferredUnderWaterProgram.unload();  		gDeferredWLSkyProgram.unload();  		gDeferredWLCloudProgram.unload(); +        gDeferredWLMoonProgram.unload();  		gDeferredStarProgram.unload();  		gDeferredFullbrightShinyProgram.unload();  		gDeferredSkinnedFullbrightShinyProgram.unload(); @@ -2154,6 +2157,28 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()          llassert(success);  	} +    if (success) +	{ +		gDeferredWLMoonProgram.mName = "Deferred Windlight Moon Program"; +        gDeferredWLMoonProgram.mFeatures.calculatesAtmospherics = true; +		gDeferredWLMoonProgram.mFeatures.hasTransport = true; +        gDeferredWLMoonProgram.mFeatures.hasGamma = true; +		gDeferredWLMoonProgram.mFeatures.hasAtmospherics = true; +        gDeferredWLMoonProgram.mFeatures.isFullbright = true; +		gDeferredWLMoonProgram.mFeatures.disableTextureIndex = true; +		gDeferredWLMoonProgram.mShaderFiles.clear(); +		gDeferredWLMoonProgram.mShaderFiles.push_back(make_pair("deferred/moonV.glsl", GL_VERTEX_SHADER_ARB)); +		gDeferredWLMoonProgram.mShaderFiles.push_back(make_pair("deferred/moonF.glsl", GL_FRAGMENT_SHADER_ARB)); +		gDeferredWLMoonProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED]; +		gDeferredWLMoonProgram.mShaderGroup = LLGLSLShader::SG_SKY; +        if (mVertexShaderLevel[SHADER_WINDLIGHT] >= 3) +        { +            gDeferredWLSkyProgram.mExtraLinkObject = gAtmosphere->getAtmosphericShaderForLink(); +        } +		success = gDeferredWLMoonProgram.createShader(NULL, NULL); +        llassert(success); +	} +  	if (success)  	{  		gDeferredStarProgram.mName = "Deferred Star Program"; diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h index e8fb79f9d2..fc788b944b 100644 --- a/indra/newview/llviewershadermgr.h +++ b/indra/newview/llviewershadermgr.h @@ -316,6 +316,7 @@ extern LLGLSLShader			gDeferredAvatarEyesProgram;  extern LLGLSLShader			gDeferredAvatarAlphaProgram;  extern LLGLSLShader			gDeferredWLSkyProgram;  extern LLGLSLShader			gDeferredWLCloudProgram; +extern LLGLSLShader			gDeferredWLMoonProgram;  extern LLGLSLShader			gDeferredStarProgram;  extern LLGLSLShader			gDeferredFullbrightShinyProgram;  extern LLGLSLShader			gDeferredSkinnedFullbrightShinyProgram; | 
