diff options
| author | Rider Linden <rider@lindenlab.com> | 2019-01-30 17:33:16 +0000 | 
|---|---|---|
| committer | Rider Linden <rider@lindenlab.com> | 2019-01-30 17:33:16 +0000 | 
| commit | baebf981ac90769905980da2fc9a73f8f88b1ba0 (patch) | |
| tree | b5524435c9a4c2f9af37a371b1ea9263cac45748 /indra | |
| parent | c8a79a59c94192741c8239eac6b34e50fe835bcd (diff) | |
| parent | 12cd42221e16b8bbcd0ad115e0436b075d47d485 (diff) | |
Merged in graham_linden/viewer-eep-fixes (pull request #247)
SL-10415, SL-10434, SL-10416
Diffstat (limited to 'indra')
28 files changed, 161 insertions, 208 deletions
| diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp index 4dae61e185..528f23b3ee 100644 --- a/indra/llrender/llglslshader.cpp +++ b/indra/llrender/llglslshader.cpp @@ -80,7 +80,6 @@ LLShaderFeatures::LLShaderFeatures()      , hasGamma(false)      , hasSrgb(false)      , encodesNormal(false) -    , decodesNormal(false)      , isDeferred(false)      , hasIndirect(false)      , hasShadows(false) diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h index 56d322fe6c..c06668eb43 100644 --- a/indra/llrender/llglslshader.h +++ b/indra/llrender/llglslshader.h @@ -52,7 +52,6 @@ public:      bool hasAmbientOcclusion;  	bool hasSrgb;      bool encodesNormal; -    bool decodesNormal;      bool isDeferred;      bool hasIndirect;  	S32 mIndexedTextureChannels; diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp index 9db8fd1f05..2076947a00 100644 --- a/indra/llrender/llshadermgr.cpp +++ b/indra/llrender/llshadermgr.cpp @@ -253,14 +253,6 @@ BOOL LLShaderMgr::attachShaderFeatures(LLGLSLShader * shader)  		}  	} -    if (features->decodesNormal) -	{ -		if (!shader->attachObject("environment/decodeNormF.glsl")) -		{ -			return FALSE; -		} -	} -  	if (features->hasAtmospherics)  	{  		if (!shader->attachObject("windlight/atmosphericsF.glsl")) diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl index 132364882b..f1b7a1312f 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl @@ -71,7 +71,6 @@ vec4 applyWaterFogView(vec3 pos, vec4 color);  #endif  vec2 encode_normal (vec3 n); -vec3 decode_normal (vec2 enc);  vec3 scaleSoftClip(vec3 l);  vec3 atmosFragAmbient(vec3 light, vec3 sunlit);  vec3 atmosFragLighting(vec3 light, vec3 additive, vec3 atten); @@ -170,7 +169,6 @@ void main()      calcFragAtmospherics(pos.xyz, 1.0, sunlit, amblit, additive, atten);      vec2 abnormal   = encode_normal(norm.xyz); -         norm.xyz   = decode_normal(abnormal.xy);      float sun_da  = dot(norm.xyz, sun_dir.xyz);      float moon_da = dot(norm.xyz, moon_dir.xyz); diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl index 812f375f42..596d0274af 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl @@ -46,7 +46,6 @@ VARYING vec2 vary_fragcoord;  vec4 getPosition(vec2 pos_screen);  vec3 getNorm(vec2 pos_screen); -vec3 decode_normal (vec2 enc);  void main()   { diff --git a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl index 9d7a7f6556..e27bbce094 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/deferredUtil.glsl @@ -29,8 +29,6 @@ uniform sampler2DRect   depthMap;  uniform mat4 inv_proj;  uniform vec2 screen_res; -vec3 decode_normal(vec2 enc); -  vec2 getScreenCoordinate(vec2 screenpos)  {      vec2 sc = screenpos.xy * 2.0; @@ -43,8 +41,14 @@ vec2 getScreenCoordinate(vec2 screenpos)  vec3 getNorm(vec2 screenpos)  { -   vec2 enc_norm = texture2DRect(normalMap, screenpos.xy).xy; -   return decode_normal(enc_norm); +   vec2 enc = texture2DRect(normalMap, screenpos.xy).xy; +   vec2 fenc = enc*4-2; +   float f = dot(fenc,fenc); +   float g = sqrt(1-f/4); +   vec3 n; +   n.xy = fenc*g; +   n.z = 1-f/2; +   return n;  }  float getDepth(vec2 pos_screen) diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl index 0f7c514e94..09bb6c5bb8 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl @@ -183,7 +183,6 @@ VARYING vec4 vertex_color;  VARYING vec2 vary_texcoord0;  vec2 encode_normal(vec3 n); -vec3 decode_normal (vec2 enc);  void main()   { @@ -227,7 +226,6 @@ void main()      norm.xyz = normalize(norm.xyz);      vec2 abnormal   = encode_normal(norm.xyz); -         norm.xyz   = decode_normal(abnormal.xy);      vec4 final_color = diffcol; diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl index e8eef9b94b..29298d7c07 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl @@ -36,7 +36,6 @@ out vec4 frag_color;  uniform sampler2DRect depthMap;  uniform sampler2DRect diffuseRect;  uniform sampler2DRect specularRect; -uniform sampler2DRect normalMap;  uniform samplerCube environmentMap;  uniform sampler2D noiseMap;  uniform sampler2D lightFunc; @@ -57,9 +56,8 @@ uniform float far_z;  uniform mat4 inv_proj; -vec3 decode_normal (vec2 enc); -  vec4 getPosition(vec2 pos_screen); +vec3 getNorm(vec2 pos_screen);  void main()   { @@ -70,9 +68,8 @@ void main()  		discard;  	} -	vec3 norm = texture2DRect(normalMap, frag.xy).xyz; -	norm = decode_normal(norm.xy); // unpack norm -	norm = normalize(norm); +	vec3 norm = getNorm(frag.xy); +  	vec4 spec = texture2DRect(specularRect, frag.xy);  	vec3 diff = texture2DRect(diffuseRect, frag.xy).rgb; diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl index 7438fac8fc..24804c3011 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl @@ -71,8 +71,7 @@ VARYING vec4 vary_fragcoord;  uniform vec2 screen_res;  uniform mat4 inv_proj; - -vec3 decode_normal (vec2 enc); +vec3 getNorm(vec2 pos_screen);  vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)  { @@ -141,12 +140,9 @@ void main()  		discard;  	} -	vec3 norm = texture2DRect(normalMap, frag.xy).xyz; -	float envIntensity = norm.z; +	float envIntensity = texture2DRect(normalMap. frag.xy).z; +	vec3 norm = getNorm(frag.xy); -	norm = decode_normal(norm.xy); -	 -	norm = normalize(norm);  	float l_dist = -dot(lv, proj_n);  	vec4 proj_tc = (proj_mat * vec4(pos.xyz, 1.0)); diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl index df48a66fab..f8264d971c 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl @@ -56,76 +56,75 @@ uniform vec2 screen_res;  uniform mat4 inv_proj;  uniform vec4 viewport; -vec3 decode_normal (vec2 enc); +vec3 getNorm(vec2 pos_screen);  vec4 getPosition(vec2 pos_screen);  void main()   { -	vec4 frag = vary_fragcoord; -	frag.xyz /= frag.w; -	frag.xyz = frag.xyz*0.5+0.5; -	frag.xy *= screen_res; -	 -	vec3 pos = getPosition(frag.xy).xyz; -	vec3 lv = trans_center.xyz-pos; -	float dist = length(lv); -	dist /= size; -	if (dist > 1.0) -	{ -		discard; -	} -	 -	vec3 norm = texture2DRect(normalMap, frag.xy).xyz; -	norm = decode_normal(norm.xy); // unpack norm -	float da = dot(norm, lv); -	if (da < 0.0) -	{ -		discard; -	} -	 -	norm = normalize(norm); -	lv = normalize(lv); -	da = dot(norm, lv); -	 -	float noise = texture2D(noiseMap, frag.xy/128.0).b; -	 -	vec3 col = texture2DRect(diffuseRect, frag.xy).rgb; -	float fa = falloff+1.0; -	float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0); -	dist_atten *= dist_atten; -	dist_atten *= 2.0; -	 -	float lit = da * dist_atten * noise; +    vec4 frag = vary_fragcoord; +    frag.xyz /= frag.w; +    frag.xyz = frag.xyz*0.5+0.5; +    frag.xy *= screen_res; +     +    vec3 pos = getPosition(frag.xy).xyz; +    vec3 lv = trans_center.xyz-pos; +    float dist = length(lv); +    dist /= size; +    if (dist > 1.0) +    { +        discard; +    } +     +    vec3 norm = getNorm(frag.xy); -	col = color.rgb*lit*col; +    float da = dot(norm, lv); +    if (da < 0.0) +    { +        discard; +    } +     +    lv = normalize(lv); +    da = dot(norm, lv); +     +    float noise = texture2D(noiseMap, frag.xy/128.0).b; +     +    vec3 col = texture2DRect(diffuseRect, frag.xy).rgb; +    float fa = falloff+1.0; +    float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0); +    dist_atten *= dist_atten; +    dist_atten *= 2.0; +     +    float lit = da * dist_atten * noise; -	vec4 spec = texture2DRect(specularRect, frag.xy); -	if (spec.a > 0.0) -	{ -		lit = min(da*6.0, 1.0) * dist_atten; +    col = color.rgb*lit*col; -		vec3 npos = -normalize(pos); -		vec3 h = normalize(lv+npos); -		float nh = dot(norm, h); -		float nv = dot(norm, npos); -		float vh = dot(npos, h); -		float sa = nh; -		float fres = pow(1 - dot(h, npos), 5) * 0.4+0.5; -		float gtdenom = 2 * nh; -		float gt = max(0,(min(gtdenom * nv / vh, gtdenom * da / vh))); +    vec4 spec = texture2DRect(specularRect, frag.xy); +    if (spec.a > 0.0) +    { +        lit = min(da*6.0, 1.0) * dist_atten; -		if (nh > 0.0) -		{ -			float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da); -			col += lit*scol*color.rgb*spec.rgb; -		} -	} -	 -	if (dot(col, col) <= 0.0) -	{ -		discard; -	} -		 -	frag_color.rgb = col;	 -	frag_color.a = 0.0; +        vec3 npos = -normalize(pos); +        vec3 h = normalize(lv+npos); +        float nh = dot(norm, h); +        float nv = dot(norm, npos); +        float vh = dot(npos, h); +        float sa = nh; +        float fres = pow(1 - dot(h, npos), 5) * 0.4+0.5; +        float gtdenom = 2 * nh; +        float gt = max(0,(min(gtdenom * nv / vh, gtdenom * da / vh))); + +        if (nh > 0.0) +        { +            float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da); +            col += lit*scol*color.rgb*spec.rgb; +        } +    } +     +    if (dot(col, col) <= 0.0) +    { +        discard; +    } +         +    frag_color.rgb = col;    +    frag_color.a = 0.0;  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl index 70568bc75f..cef9938192 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowUtil.glsl @@ -48,44 +48,29 @@ uniform float shadow_bias;  uniform float spot_shadow_bias;  uniform float spot_shadow_offset; - +uniform float sun_up_factor;  uniform mat4 inv_proj;  uniform vec2 screen_res;  vec3 decode_normal(vec2 enc); -float pcfShadowLegacy(sampler2DShadow shadowMap, vec4 stc) -{ -	stc.xyz /= stc.w; -	stc.z += shadow_bias; -		 -	stc.x = floor(stc.x*shadow_res.x + fract(stc.y*shadow_res.y*12345))/shadow_res.x; // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here -	 -	float cs = shadow2D(shadowMap, stc.xyz).x; -	float shadow = cs; -	 -    shadow += shadow2D(shadowMap, stc.xyz+vec3(2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x; -    shadow += shadow2D(shadowMap, stc.xyz+vec3(1.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x; -    shadow += shadow2D(shadowMap, stc.xyz+vec3(-1.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x; -    shadow += shadow2D(shadowMap, stc.xyz+vec3(-2.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x; -                        -    return shadow*0.2; -} - -float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float bias_scale, vec2 pos_screen) +float pcfShadow(sampler2DShadow shadowMap, vec4 stc, float bias_mul, vec2 pos_screen, vec3 light_dir)  {      stc.xyz /= stc.w; -    stc.z += shadow_bias * bias_scale; -  -    stc.x = floor(stc.x*pos_screen.x + fract(stc.y*pos_screen.y*0.666666666))/shadow_res.x; // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here +    float offset = max(0.75, light_dir.z); +    stc.z += offset * shadow_bias * 3.33 * bias_mul; +         +    stc.x = floor(stc.x*shadow_res.x + fract(stc.y*pos_screen.y*3.14159))/shadow_res.x; // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here      float cs = shadow2D(shadowMap, stc.xyz).x; -    float shadow = cs; +    float shadow = cs * 4.0; +          shadow += shadow2D(shadowMap, stc.xyz+vec3(2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;      shadow += shadow2D(shadowMap, stc.xyz+vec3(1.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x;      shadow += shadow2D(shadowMap, stc.xyz+vec3(-1.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;      shadow += shadow2D(shadowMap, stc.xyz+vec3(-2.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x; -    return shadow*0.2; +                        +    return shadow*0.125;  }  float pcfSpotShadow(sampler2DShadow shadowMap, vec4 stc, float bias_scale, vec2 pos_screen) @@ -141,7 +126,7 @@ float sampleDirectionalShadow(vec3 pos, vec3 norm, vec2 pos_screen)              float w = 1.0;              w -= max(spos.z-far_split.z, 0.0)/transition_domain.z; -            shadow += pcfShadowLegacy(shadowMap3, lpos)*w; +            shadow += pcfShadow(shadowMap3, lpos, 1.0, pos_screen, light_dir)*w;              weight += w;              shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);          } @@ -153,7 +138,7 @@ float sampleDirectionalShadow(vec3 pos, vec3 norm, vec2 pos_screen)              float w = 1.0;              w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;              w -= max(near_split.z-spos.z, 0.0)/transition_domain.z; -            shadow += pcfShadowLegacy(shadowMap2, lpos)*w; +            shadow += pcfShadow(shadowMap2, lpos, 1.0, pos_screen, light_dir)*w;              weight += w;          } @@ -164,7 +149,7 @@ float sampleDirectionalShadow(vec3 pos, vec3 norm, vec2 pos_screen)              float w = 1.0;              w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;              w -= max(near_split.y-spos.z, 0.0)/transition_domain.y; -            shadow += pcfShadowLegacy(shadowMap1, lpos)*w; +            shadow += pcfShadow(shadowMap1, lpos, 1.0, pos_screen, light_dir)*w;              weight += w;          } @@ -175,14 +160,15 @@ float sampleDirectionalShadow(vec3 pos, vec3 norm, vec2 pos_screen)              float w = 1.0;              w -= max(near_split.x-spos.z, 0.0)/transition_domain.x; -            shadow += pcfShadowLegacy(shadowMap0, lpos)*w; +            shadow += pcfShadow(shadowMap0, lpos, 1.0, pos_screen, light_dir)*w;              weight += w;          }          shadow /= weight;      } -    return min(dp_directional_light, shadow); +    shadow = min(dp_directional_light, shadow); +    return shadow;  }  float sampleSpotShadow(vec3 pos, vec3 norm, int index, vec2 pos_screen) @@ -201,11 +187,19 @@ float sampleSpotShadow(vec3 pos, vec3 norm, int index, vec2 pos_screen)          float weight = 0.0;          { -            lpos = shadow_matrix[4 + index]*spos;              float w = 1.0;              w -= max(spos.z-far_split.z, 0.0)/transition_domain.z; -         -            shadow += pcfSpotShadow((index == 0) ? shadowMap4 : shadowMap5, lpos, 0.8, spos.xy)*w; + +            if (index == 0) +            {         +                lpos = shadow_matrix[4]*spos; +                shadow += pcfSpotShadow(shadowMap4, lpos, 0.8, spos.xy)*w; +            } +            else +            { +                lpos = shadow_matrix[5]*spos; +                shadow += pcfSpotShadow(shadowMap5, lpos, 0.8, spos.xy)*w; +            }              weight += w;              shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);          } diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl index f0b038cc93..9e0079e0e9 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl @@ -66,7 +66,7 @@ uniform vec2 screen_res;  vec4 applyWaterFogView(vec3 pos, vec4 color);  #endif -vec3 decode_normal (vec2 enc); +vec3 getNorm(vec2 pos_screen);  vec3 atmosFragLighting(vec3 l, vec3 additive, vec3 atten);  vec3 fullbrightAtmosTransportFrag(vec3 l, vec3 additive, vec3 atten);  void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten); @@ -78,14 +78,14 @@ vec4 getPositionWithDepth(vec2 pos_screen, float depth);  void main()   { -	vec2 tc = vary_fragcoord.xy; -	float depth = texture2DRect(depthMap, tc.xy).r; -	vec4 pos = getPositionWithDepth(tc, depth); -	vec4 norm = texture2DRect(normalMap, tc); -	float envIntensity = norm.z; -	norm.xyz = decode_normal(norm.xy); // unpack norm -		 -	float da_sun  = dot(norm.xyz, normalize(sun_dir.xyz)); +    vec2 tc = vary_fragcoord.xy; +    float depth = texture2DRect(depthMap, tc.xy).r; +    vec4 pos = getPositionWithDepth(tc, depth); +    vec4 norm = texture2DRect(normalMap, tc); +    float envIntensity = norm.z; +    norm.xyz = getNorm(tc); +         +    float da_sun  = dot(norm.xyz, normalize(sun_dir.xyz));      float da_moon = dot(norm.xyz, normalize(moon_dir.xyz));      float da = max(da_sun, da_moon); diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl index 22488944cd..d09bc25334 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl @@ -70,7 +70,7 @@ uniform vec2 screen_res;  uniform mat4 inv_proj; -vec3 decode_normal (vec2 enc); +vec3 getNorm(vec2 pos_screen);  vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)  { @@ -142,7 +142,7 @@ void main()  	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;  	float envIntensity = norm.z; -	norm = decode_normal(norm.xy); +	norm = getNorm(frag.xy);  	norm = normalize(norm);  	float l_dist = -dot(lv, proj_n); diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl index e98ab1f2eb..15f141cbe5 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl @@ -40,7 +40,7 @@ uniform sampler2DRect normalMap;  // Inputs  VARYING vec2 vary_fragcoord; -vec3 decode_normal (vec2 enc); +vec3 getNorm(vec2 pos_screen);  vec4 getPosition(vec2 pos_screen);  //calculate decreases in ambient lighting when crowded out (SSAO) @@ -53,7 +53,7 @@ void main()  	//try doing an unproject here  	vec4 pos  = getPosition(pos_screen); -	vec3 norm = decode_normal(texture2DRect(normalMap, pos_screen).xy); +	vec3 norm = getNorm(pos_screen);  	frag_color[0] = 1.0;  	frag_color[1] = calcAmbientOcclusion(pos, norm, pos_screen); diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl index 1c5d3901f5..142b03e095 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl @@ -71,7 +71,7 @@ uniform vec2 screen_res;  uniform mat4 inv_proj; -vec3 decode_normal (vec2 enc); +vec3 getNorm(vec2 pos_screen);  vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)  { @@ -155,7 +155,7 @@ void main()  	float envIntensity = norm.z; -	norm = decode_normal(norm.xy); +	norm = getNorm(frag.xy);  	norm = normalize(norm);  	float l_dist = -dot(lv, proj_n); diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl index c80e7fce18..4fd3e73336 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl @@ -62,7 +62,7 @@ VARYING vec2 vary_fragcoord;  uniform mat4 inv_proj;  uniform vec2 screen_res; -vec3 decode_normal (vec2 enc); +vec3 getNorm(vec2 pos_screen);  void calcFragAtmospherics(vec3 inPositionEye, float ambFactor, out vec3 sunlit, out vec3 amblit, out vec3 additive, out vec3 atten);  vec3 atmosFragLighting(vec3 l, vec3 additive, vec3 atten); @@ -82,22 +82,22 @@ vec4 applyWaterFogView(vec3 pos, vec4 color);  void main()   { -	vec2 tc = vary_fragcoord.xy; -	float depth = texture2DRect(depthMap, tc.xy).r; -	vec4 pos = getPositionWithDepth(tc, depth); -	vec4 norm = texture2DRect(normalMap, tc); -	float envIntensity = norm.z; -	norm.xyz = decode_normal(norm.xy); // unpack norm -		 -	float da_sun  = dot(norm.xyz, normalize(sun_dir.xyz)); +    vec2 tc = vary_fragcoord.xy; +    float depth = texture2DRect(depthMap, tc.xy).r; +    vec4 pos = getPositionWithDepth(tc, depth); +    vec4 norm = texture2DRect(normalMap, tc); +    float envIntensity = norm.z; +    norm.xyz = getNorm(tc); // unpack norm +         +    float da_sun  = dot(norm.xyz, normalize(sun_dir.xyz));      float da_moon = dot(norm.xyz, normalize(moon_dir.xyz));      float da = max(da_sun, da_moon);            da = clamp(da, 0.0, 1.0); -	da = pow(da, global_gamma + 0.3); +    da = pow(da, global_gamma + 0.3); -	vec4 diffuse = texture2DRect(diffuseRect, tc); -	 +    vec4 diffuse = texture2DRect(diffuseRect, tc); +          vec3 col;      float bloom = 0.0;      { diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl index 36854b0e66..9b69d8d855 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl @@ -71,7 +71,7 @@ uniform vec2 screen_res;  uniform mat4 inv_proj; -vec3 decode_normal (vec2 enc); +vec3 getNorm(vec2 pos_screen);  vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)  { @@ -153,7 +153,7 @@ void main()  	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;  	float envIntensity = norm.z; -	norm = decode_normal(norm.xy); +	norm = getNorm(frag.xy);  	norm = normalize(norm);  	float l_dist = -dot(lv, proj_n); diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl index fc5756beef..8abdeae5ae 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl @@ -42,7 +42,6 @@ uniform vec3 sun_dir;  uniform float shadow_bias;  vec3 getNorm(vec2 pos_screen); -vec3 decode_normal (vec2 enc);  vec4 getPosition(vec2 pos_screen);  float sampleDirectionalShadow(vec3 pos, vec3 norm, vec2 pos_screen); diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl index 390f9fc947..64d99bae2c 100644 --- a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl +++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl @@ -37,7 +37,6 @@ out vec4 frag_color;  // Inputs  VARYING vec2 vary_fragcoord; -vec3 decode_normal (vec2 enc);  vec4 getPosition(vec2 pos_screen);  vec3 getNorm(vec2 pos_screen); diff --git a/indra/newview/app_settings/shaders/class3/deferred/deferredUtil.glsl b/indra/newview/app_settings/shaders/class3/deferred/deferredUtil.glsl index cccd01e0d7..e27bbce094 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/deferredUtil.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/deferredUtil.glsl @@ -1,5 +1,5 @@  /**  - * @file class3/deferred/deferredUtil.glsl + * @file class1/deferred/deferredUtil.glsl   *   * $LicenseInfo:firstyear=2007&license=viewerlgpl$   * Second Life Viewer Source Code @@ -29,8 +29,6 @@ uniform sampler2DRect   depthMap;  uniform mat4 inv_proj;  uniform vec2 screen_res; -vec3 decode_normal(vec2 enc); -  vec2 getScreenCoordinate(vec2 screenpos)  {      vec2 sc = screenpos.xy * 2.0; @@ -43,8 +41,14 @@ vec2 getScreenCoordinate(vec2 screenpos)  vec3 getNorm(vec2 screenpos)  { -   vec2 enc_norm = texture2DRect(normalMap, screenpos.xy).xy; -   return decode_normal(enc_norm); +   vec2 enc = texture2DRect(normalMap, screenpos.xy).xy; +   vec2 fenc = enc*4-2; +   float f = dot(fenc,fenc); +   float g = sqrt(1-f/4); +   vec3 n; +   n.xy = fenc*g; +   n.z = 1-f/2; +   return n;  }  float getDepth(vec2 pos_screen) diff --git a/indra/newview/app_settings/shaders/class3/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/multiSpotLightF.glsl index 0848adba73..72bccc5627 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/multiSpotLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/multiSpotLightF.glsl @@ -73,7 +73,7 @@ uniform mat4 inv_proj;  vec3 srgb_to_linear(vec3 cs);  vec3 linear_to_srgb(vec3 cl); -vec3 decode_normal (vec2 enc); +vec3 getNorm(vec2 pos_screen);  vec4 correctWithGamma(vec4 col)  { @@ -166,7 +166,7 @@ void main()  	float envIntensity = norm.z; -	norm = decode_normal(norm.xy); +	norm = getNorm(frag.xy);  	norm = normalize(norm);  	float l_dist = -dot(lv, proj_n); diff --git a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl index 9411e905d3..ad721a80d6 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/softenLightF.glsl @@ -76,7 +76,6 @@ vec3 GetSunAndSkyIrradiance(vec3 camPos, vec3 norm, vec3 dir, out vec3 sky_irrad  vec3 GetSkyLuminance(vec3 camPos, vec3 view_dir, float shadow_length, vec3 dir, out vec3 transmittance);  vec3 GetSkyLuminanceToPoint(vec3 camPos, vec3 pos, float shadow_length, vec3 dir, out vec3 transmittance); -vec3 decode_normal(vec2 xy);  vec3 ColorFromRadiance(vec3 radiance);  vec4 getPositionWithDepth(vec2 pos_screen, float depth);  vec4 getPosition(vec2 pos_screen); @@ -93,7 +92,7 @@ void main()      vec3 pos = getPositionWithDepth(tc, depth).xyz;      vec4 norm = texture2DRect(normalMap, tc);      float envIntensity = norm.z; -    norm.xyz = decode_normal(norm.xy); +    norm.xyz = getNorm(tc);      float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);                da = pow(da, global_gamma + 0.3); diff --git a/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl index 80e2a9dd55..3b2b0d5718 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/spotLightF.glsl @@ -71,7 +71,7 @@ uniform vec2 screen_res;  uniform mat4 inv_proj; -vec3 decode_normal (vec2 enc); +vec3 getNorm(vec2 pos_screen);  vec3 srgb_to_linear(vec3 cs);  vec3 linear_to_srgb(vec3 cl); @@ -164,7 +164,7 @@ void main()  	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;  	float envIntensity = norm.z; -	norm = decode_normal(norm.xy); +	norm = getNorm(frag.xy);  	norm = normalize(norm);  	float l_dist = -dot(lv, proj_n); diff --git a/indra/newview/app_settings/shaders/class3/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class3/deferred/sunLightF.glsl index e230ebb71c..112b498c90 100644 --- a/indra/newview/app_settings/shaders/class3/deferred/sunLightF.glsl +++ b/indra/newview/app_settings/shaders/class3/deferred/sunLightF.glsl @@ -38,7 +38,6 @@ out vec4 frag_color;  // Inputs  VARYING vec2 vary_fragcoord; -vec3 decode_normal (vec2 enc);  vec4 getPosition(vec2 pos_screen);  vec3 getNorm(vec2 pos_screen); diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp index 8df898f8a9..6d0e999845 100644 --- a/indra/newview/llface.cpp +++ b/indra/newview/llface.cpp @@ -389,16 +389,20 @@ void LLFace::switchTexture(U32 ch, LLViewerTexture* new_texture)  		return;  	} -	llassert(mTexture[ch].notNull()); - -	new_texture->addTextureStats(mTexture[ch]->getMaxVirtualSize()) ; +	if (mTexture[ch].notNull()) +    { +	    new_texture->addTextureStats(mTexture[ch]->getMaxVirtualSize()) ; +    }  	if (ch == LLRender::DIFFUSE_MAP)  	{ -	getViewerObject()->changeTEImage(mTEOffset, new_texture) ; +        if (getViewerObject()) +        { +	        getViewerObject()->changeTEImage(mTEOffset, new_texture); +        }  	} -	setTexture(ch, new_texture) ;	 +	setTexture(ch, new_texture);  	dirtyTexture();  } diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 2293007641..5c65a3630c 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -1006,7 +1006,6 @@ BOOL LLViewerShaderMgr::loadBasicShaders()  	index_channels.push_back(-1);	 shaders.push_back( make_pair( "windlight/transportF.glsl",				mShaderLevel[SHADER_WINDLIGHT] ) );	  	index_channels.push_back(-1);	 shaders.push_back( make_pair( "environment/waterFogF.glsl",				mShaderLevel[SHADER_WATER] ) );      index_channels.push_back(-1);	 shaders.push_back( make_pair( "environment/encodeNormF.glsl",				    mShaderLevel[SHADER_ENVIRONMENT] ) ); -    index_channels.push_back(-1);	 shaders.push_back( make_pair( "environment/decodeNormF.glsl",				    mShaderLevel[SHADER_ENVIRONMENT] ) );      index_channels.push_back(-1);	 shaders.push_back( make_pair( "environment/srgbF.glsl",				    mShaderLevel[SHADER_ENVIRONMENT] ) );      index_channels.push_back(-1);	 shaders.push_back( make_pair( "deferred/deferredUtil.glsl",				    mShaderLevel[SHADER_DEFERRED] ) );      index_channels.push_back(-1);	 shaders.push_back( make_pair( "deferred/shadowUtil.glsl",				    mShaderLevel[SHADER_DEFERRED] ) ); @@ -1406,7 +1405,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		gDeferredSkinnedAlphaProgram.mFeatures.isAlphaLighting = true;  		gDeferredSkinnedAlphaProgram.mFeatures.disableTextureIndex = true;  		gDeferredSkinnedAlphaProgram.mFeatures.hasSrgb = true; -        gDeferredSkinnedAlphaProgram.mFeatures.decodesNormal = true;          gDeferredSkinnedAlphaProgram.mFeatures.encodesNormal = true;          gDeferredSkinnedAlphaProgram.mFeatures.calculatesAtmospherics = true;          gDeferredSkinnedAlphaProgram.mFeatures.hasAtmospherics = true; @@ -1484,7 +1482,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  			gDeferredMaterialProgram[i].mFeatures.hasSrgb = true;              gDeferredMaterialProgram[i].mFeatures.hasTransport = true; -            gDeferredMaterialProgram[i].mFeatures.decodesNormal = true;              gDeferredMaterialProgram[i].mFeatures.encodesNormal = true;              gDeferredMaterialProgram[i].mFeatures.calculatesAtmospherics = true;              gDeferredMaterialProgram[i].mFeatures.hasAtmospherics = true; @@ -1524,7 +1521,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  			gDeferredMaterialWaterProgram[i].mFeatures.hasWaterFog = true;  			gDeferredMaterialWaterProgram[i].mFeatures.hasSrgb = true; -            gDeferredMaterialWaterProgram[i].mFeatures.decodesNormal = true;              gDeferredMaterialWaterProgram[i].mFeatures.encodesNormal = true;              gDeferredMaterialWaterProgram[i].mFeatures.calculatesAtmospherics = true;              gDeferredMaterialWaterProgram[i].mFeatures.hasAtmospherics = true; @@ -1594,7 +1590,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  	{  		gDeferredImpostorProgram.mName = "Deferred Impostor Shader";  		gDeferredImpostorProgram.mFeatures.hasSrgb = true; -        gDeferredImpostorProgram.mFeatures.decodesNormal = true;          gDeferredImpostorProgram.mFeatures.encodesNormal = true;          //gDeferredImpostorProgram.mFeatures.isDeferred = true;  		gDeferredImpostorProgram.mShaderFiles.clear(); @@ -1608,7 +1603,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  	if (success)  	{		  		gDeferredLightProgram.mName = "Deferred Light Shader"; -        gDeferredLightProgram.mFeatures.decodesNormal = true;          gDeferredLightProgram.mFeatures.isDeferred = true;          gDeferredLightProgram.mFeatures.hasShadows = true; @@ -1626,7 +1620,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  	if (success)  	{  			gDeferredMultiLightProgram[i].mName = llformat("Deferred MultiLight Shader %d", i); -            gDeferredMultiLightProgram[i].mFeatures.decodesNormal = true;              gDeferredMultiLightProgram[i].mFeatures.isDeferred = true;              gDeferredMultiLightProgram[i].mFeatures.hasShadows = true; @@ -1645,7 +1638,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		gDeferredSpotLightProgram.mName = "Deferred SpotLight Shader";  		gDeferredSpotLightProgram.mShaderFiles.clear();  		gDeferredSpotLightProgram.mFeatures.hasSrgb = true; -        gDeferredSpotLightProgram.mFeatures.decodesNormal = true;          gDeferredSpotLightProgram.mFeatures.isDeferred = true;          gDeferredSpotLightProgram.mFeatures.hasShadows = true; @@ -1661,7 +1653,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  	{  		gDeferredMultiSpotLightProgram.mName = "Deferred MultiSpotLight Shader";  		gDeferredMultiSpotLightProgram.mFeatures.hasSrgb = true; -        gDeferredMultiSpotLightProgram.mFeatures.decodesNormal = true;          gDeferredMultiSpotLightProgram.mFeatures.isDeferred = true;          gDeferredMultiSpotLightProgram.mFeatures.hasShadows = true; @@ -1695,7 +1686,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		}  		gDeferredSunProgram.mName = "Deferred Sun Shader"; -        gDeferredSunProgram.mFeatures.decodesNormal = true;          gDeferredSunProgram.mFeatures.isDeferred    = true;          gDeferredSunProgram.mFeatures.hasShadows    = true;          gDeferredSunProgram.mFeatures.hasIndirect   = true; @@ -1713,7 +1703,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  	if (success)  	{  		gDeferredBlurLightProgram.mName = "Deferred Blur Light Shader"; -        gDeferredBlurLightProgram.mFeatures.decodesNormal = true;          gDeferredBlurLightProgram.mFeatures.isDeferred = true;  		gDeferredBlurLightProgram.mShaderFiles.clear(); @@ -1734,7 +1723,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		gDeferredAlphaProgram.mFeatures.isAlphaLighting = true;  		gDeferredAlphaProgram.mFeatures.disableTextureIndex = true; //hack to disable auto-setup of texture channels          gDeferredAlphaProgram.mFeatures.hasSrgb = true; -        gDeferredAlphaProgram.mFeatures.decodesNormal = true;          gDeferredAlphaProgram.mFeatures.encodesNormal = true;          gDeferredAlphaProgram.mFeatures.calculatesAtmospherics = true;          gDeferredAlphaProgram.mFeatures.hasAtmospherics = true; @@ -1777,7 +1765,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		gDeferredAlphaImpostorProgram.mFeatures.hasLighting = false;  		gDeferredAlphaImpostorProgram.mFeatures.isAlphaLighting = true;  		gDeferredAlphaImpostorProgram.mFeatures.hasSrgb = true; -        gDeferredAlphaImpostorProgram.mFeatures.decodesNormal = true;          gDeferredAlphaImpostorProgram.mFeatures.encodesNormal = true;          gDeferredAlphaImpostorProgram.mFeatures.isDeferred = true;          gDeferredAlphaImpostorProgram.mFeatures.hasShadows = true; @@ -1820,7 +1807,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		gDeferredAlphaWaterProgram.mFeatures.disableTextureIndex = true; //hack to disable auto-setup of texture channels  		gDeferredAlphaWaterProgram.mFeatures.hasWaterFog = true;  		gDeferredAlphaWaterProgram.mFeatures.hasSrgb = true; -        gDeferredAlphaWaterProgram.mFeatures.decodesNormal = true;          gDeferredAlphaWaterProgram.mFeatures.encodesNormal = true;          gDeferredAlphaWaterProgram.mFeatures.calculatesAtmospherics = true;          gDeferredAlphaWaterProgram.mFeatures.hasAtmospherics = true; @@ -2069,7 +2055,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		gDeferredSoftenProgram.mName = "Deferred Soften Shader";  		gDeferredSoftenProgram.mShaderFiles.clear();  		gDeferredSoftenProgram.mFeatures.hasSrgb = true; -        gDeferredSoftenProgram.mFeatures.decodesNormal = true;          gDeferredSoftenProgram.mFeatures.calculatesAtmospherics = true;          gDeferredSoftenProgram.mFeatures.hasAtmospherics = true;          gDeferredSoftenProgram.mFeatures.hasTransport = true; @@ -2113,7 +2098,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		gDeferredSoftenWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;  		gDeferredSoftenWaterProgram.mFeatures.hasWaterFog = true;  		gDeferredSoftenWaterProgram.mFeatures.hasSrgb = true; -        gDeferredSoftenWaterProgram.mFeatures.decodesNormal = true;          gDeferredSoftenWaterProgram.mFeatures.calculatesAtmospherics = true;          gDeferredSoftenWaterProgram.mFeatures.hasAtmospherics = true;          gDeferredSoftenWaterProgram.mFeatures.hasTransport = true; @@ -2261,7 +2245,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()  		gDeferredAvatarAlphaProgram.mFeatures.disableTextureIndex = true;  		gDeferredAvatarAlphaProgram.mFeatures.hasSrgb = true;          gDeferredAvatarAlphaProgram.mFeatures.encodesNormal = true; -        gDeferredAvatarAlphaProgram.mFeatures.decodesNormal = true;          gDeferredAvatarAlphaProgram.mFeatures.calculatesAtmospherics = true;          gDeferredAvatarAlphaProgram.mFeatures.hasAtmospherics = true;          gDeferredAvatarAlphaProgram.mFeatures.hasTransport = true; @@ -2427,8 +2410,6 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()      if (success && gAtmosphere && (mShaderLevel[SHADER_WINDLIGHT] > 2))  	{  		gDeferredGenSkyShProgram.mName = "Deferred Generate Sky Indirect SH Program"; -        gDeferredGenSkyShProgram.mFeatures.decodesNormal = true; -  		gDeferredGenSkyShProgram.mShaderFiles.clear();  		gDeferredGenSkyShProgram.mShaderFiles.push_back(make_pair("deferred/genSkyShV.glsl", GL_VERTEX_SHADER_ARB));  		gDeferredGenSkyShProgram.mShaderFiles.push_back(make_pair("deferred/genSkyShF.glsl", GL_FRAGMENT_SHADER_ARB)); diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp index 570273e62c..08bb2d2b2b 100644 --- a/indra/newview/llvowlsky.cpp +++ b/indra/newview/llvowlsky.cpp @@ -36,10 +36,8 @@  #include "llenvironment.h"  #include "llsettingssky.h" -const F32 LLVOWLSky::DISTANCE_TO_STARS = (HORIZON_DIST - 10.f) * 0.8f; - -const U32 LLVOWLSky::MIN_SKY_DETAIL = 8; -const U32 LLVOWLSky::MAX_SKY_DETAIL = 180; +static const U32 MIN_SKY_DETAIL = 8; +static const U32 MAX_SKY_DETAIL = 180;  inline U32 LLVOWLSky::getNumStacks(void)  { @@ -326,6 +324,8 @@ void LLVOWLSky::drawDome(void)  void LLVOWLSky::initStars()  { +    const F32 DISTANCE_TO_STARS = LLEnvironment::instance().getCurrentSky()->getDomeRadius(); +  	// Initialize star map  	mStarVertices.resize(getStarsNumVerts());  	mStarColors.resize(getStarsNumVerts()); @@ -528,7 +528,7 @@ BOOL LLVOWLSky::updateStarGeometry(LLDrawable *drawable)  		LLVector3 left = at%LLVector3(0,0,1);  		LLVector3 up = at%left; -		F32 sc = 0.8f + ll_frand()*2.5f; +		F32 sc = 16.0f + (ll_frand() * 20.0f);  		left *= sc;  		up *= sc; diff --git a/indra/newview/llvowlsky.h b/indra/newview/llvowlsky.h index 3217d2a7e2..c52acba98b 100644 --- a/indra/newview/llvowlsky.h +++ b/indra/newview/llvowlsky.h @@ -31,13 +31,6 @@  class LLVOWLSky : public LLStaticViewerObject {  private: -	static const F32 DISTANCE_TO_STARS; - -	// anything less than 3 makes it impossible to create a closed dome. -	static const U32 MIN_SKY_DETAIL; -	// anything bigger than about 180 will cause getStripsNumVerts() to exceed 65535. -	static const U32 MAX_SKY_DETAIL; -  	inline static U32 getNumStacks(void);  	inline static U32 getNumSlices(void);  	inline static U32 getStripsNumVerts(void); | 
