merge up to integration repo
commit
c2817b0d53
|
|
@ -61,6 +61,7 @@ VARYING vec3 vary_directional;
|
|||
VARYING vec3 vary_fragcoord;
|
||||
VARYING vec3 vary_position;
|
||||
VARYING vec3 vary_pointlight_col;
|
||||
VARYING vec3 vary_pointlight_col_linear;
|
||||
VARYING vec2 vary_texcoord0;
|
||||
VARYING vec3 vary_norm;
|
||||
|
||||
|
|
@ -135,6 +136,26 @@ float pcfShadow(sampler2DShadow shadowMap, vec4 stc)
|
|||
}
|
||||
#endif
|
||||
|
||||
vec3 srgb_to_linear(vec3 cs)
|
||||
{
|
||||
|
||||
/* { cs / 12.92, cs <= 0.04045
|
||||
cl = {
|
||||
{ ((cs + 0.055)/1.055)^2.4, cs > 0.04045*/
|
||||
|
||||
return pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
|
||||
}
|
||||
|
||||
vec3 linear_to_srgb(vec3 cl)
|
||||
{
|
||||
/*{ 0.0, 0 <= cl
|
||||
{ 12.92 * c, 0 < cl < 0.0031308
|
||||
cs = { 1.055 * cl^0.41666 - 0.055, 0.0031308 <= cl < 1
|
||||
{ 1.0, cl >= 1*/
|
||||
|
||||
return 1.055 * pow(cl, vec3(0.41666)) - 0.055;
|
||||
}
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
|
|
@ -208,6 +229,7 @@ void main()
|
|||
{
|
||||
shadow = 1.0;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef USE_INDEXED_TEX
|
||||
|
|
@ -217,7 +239,7 @@ void main()
|
|||
#endif
|
||||
vec4 gamma_diff = diff;
|
||||
|
||||
diff.rgb = pow(diff.rgb, vec3(2.2f, 2.2f, 2.2f));
|
||||
diff.rgb = srgb_to_linear(diff.rgb);
|
||||
|
||||
#ifdef USE_VERTEX_COLOR
|
||||
float vertex_color_alpha = vertex_color.a;
|
||||
|
|
@ -243,9 +265,8 @@ void main()
|
|||
|
||||
color.rgb = scaleSoftClip(color.rgb);
|
||||
|
||||
color.rgb = pow(color.rgb, vec3(2.2));
|
||||
color.rgb = srgb_to_linear(color.rgb);
|
||||
col = vec4(0,0,0,0);
|
||||
|
||||
|
||||
#define LIGHT_LOOP(i) col.rgb += light_diffuse[i].rgb * calcPointLightOrSpotLight(pos.xyz, normal, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z);
|
||||
|
||||
|
|
@ -257,9 +278,9 @@ void main()
|
|||
LIGHT_LOOP(6)
|
||||
LIGHT_LOOP(7)
|
||||
|
||||
color.rgb += diff.rgb * pow(vary_pointlight_col, vec3(2.2)) * col.rgb;
|
||||
color.rgb += diff.rgb * vary_pointlight_col_linear * col.rgb;
|
||||
|
||||
color.rgb = pow(color.rgb, vec3(1.0/2.2));
|
||||
color.rgb = linear_to_srgb(color.rgb);
|
||||
|
||||
frag_color = color;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -68,6 +68,7 @@ VARYING vec3 vary_directional;
|
|||
VARYING vec3 vary_fragcoord;
|
||||
VARYING vec3 vary_position;
|
||||
VARYING vec3 vary_pointlight_col;
|
||||
VARYING vec3 vary_pointlight_col_linear;
|
||||
|
||||
#ifdef USE_VERTEX_COLOR
|
||||
VARYING vec4 vertex_color;
|
||||
|
|
@ -86,6 +87,16 @@ uniform vec3 light_diffuse[8];
|
|||
|
||||
uniform vec3 sun_dir;
|
||||
|
||||
vec3 srgb_to_linear(vec3 cs)
|
||||
{
|
||||
|
||||
/* { cs / 12.92, cs <= 0.04045
|
||||
cl = {
|
||||
{ ((cs + 0.055)/1.055)^2.4, cs > 0.04045*/
|
||||
|
||||
return pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
|
||||
}
|
||||
|
||||
vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
|
||||
{
|
||||
//get light vector
|
||||
|
|
@ -178,10 +189,8 @@ void main()
|
|||
|
||||
vec3 diff = diffuse_color.rgb;
|
||||
|
||||
|
||||
|
||||
vary_pointlight_col = diff;
|
||||
|
||||
vary_pointlight_col_linear = srgb_to_linear(diff);
|
||||
|
||||
col.rgb = vec3(0,0,0);
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,90 @@
|
|||
/**
|
||||
* @file fullbrightF.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$
|
||||
*/
|
||||
|
||||
#extension GL_ARB_texture_rectangle : enable
|
||||
|
||||
#ifdef DEFINE_GL_FRAGCOLOR
|
||||
out vec4 frag_color;
|
||||
#else
|
||||
#define frag_color gl_FragColor
|
||||
#endif
|
||||
|
||||
#if !HAS_DIFFUSE_LOOKUP
|
||||
uniform sampler2D diffuseMap;
|
||||
#endif
|
||||
|
||||
VARYING vec4 vertex_color;
|
||||
VARYING vec2 vary_texcoord0;
|
||||
|
||||
vec3 fullbrightAtmosTransport(vec3 light);
|
||||
vec3 fullbrightScaleSoftClip(vec3 light);
|
||||
|
||||
vec3 srgb_to_linear(vec3 cs)
|
||||
{
|
||||
|
||||
/* { cs / 12.92, cs <= 0.04045
|
||||
cl = {
|
||||
{ ((cs + 0.055)/1.055)^2.4, cs > 0.04045*/
|
||||
|
||||
return pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
|
||||
}
|
||||
|
||||
vec3 linear_to_srgb(vec3 cl)
|
||||
{
|
||||
/*{ 0.0, 0 <= cl
|
||||
{ 12.92 * c, 0 < cl < 0.0031308
|
||||
cs = { 1.055 * cl^0.41666 - 0.055, 0.0031308 <= cl < 1
|
||||
{ 1.0, cl >= 1*/
|
||||
|
||||
return 1.055 * pow(cl, vec3(0.41666)) - 0.055;
|
||||
}
|
||||
|
||||
uniform float minimum_alpha;
|
||||
|
||||
void main()
|
||||
{
|
||||
#if HAS_DIFFUSE_LOOKUP
|
||||
vec4 color = diffuseLookup(vary_texcoord0.xy);
|
||||
#else
|
||||
vec4 color = texture2D(diffuseMap, vary_texcoord0.xy);
|
||||
#endif
|
||||
|
||||
if (color.a < minimum_alpha)
|
||||
{
|
||||
discard;
|
||||
}
|
||||
|
||||
color.rgb = srgb_to_linear(color.rgb);
|
||||
color.rgb *= vertex_color.rgb;
|
||||
|
||||
color.rgb = fullbrightAtmosTransport(color.rgb);
|
||||
color.rgb = fullbrightScaleSoftClip(color.rgb);
|
||||
|
||||
color.rgb = linear_to_srgb(color.rgb);
|
||||
|
||||
frag_color.rgb = color.rgb;
|
||||
frag_color.a = color.a;
|
||||
}
|
||||
|
||||
|
|
@ -41,23 +41,43 @@ VARYING vec2 vary_texcoord0;
|
|||
vec3 fullbrightAtmosTransport(vec3 light);
|
||||
vec3 fullbrightScaleSoftClip(vec3 light);
|
||||
|
||||
vec3 srgb_to_linear(vec3 cs)
|
||||
{
|
||||
|
||||
/* { cs / 12.92, cs <= 0.04045
|
||||
cl = {
|
||||
{ ((cs + 0.055)/1.055)^2.4, cs > 0.04045*/
|
||||
|
||||
return pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
|
||||
}
|
||||
|
||||
vec3 linear_to_srgb(vec3 cl)
|
||||
{
|
||||
/*{ 0.0, 0 <= cl
|
||||
{ 12.92 * c, 0 < cl < 0.0031308
|
||||
cs = { 1.055 * cl^0.41666 - 0.055, 0.0031308 <= cl < 1
|
||||
{ 1.0, cl >= 1*/
|
||||
|
||||
return 1.055 * pow(cl, vec3(0.41666)) - 0.055;
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
#if HAS_DIFFUSE_LOOKUP
|
||||
vec4 color = diffuseLookup(vary_texcoord0.xy)*vertex_color;
|
||||
vec4 color = diffuseLookup(vary_texcoord0.xy);
|
||||
#else
|
||||
vec4 color = texture2D(diffuseMap, vary_texcoord0.xy)*vertex_color;
|
||||
vec4 color = texture2D(diffuseMap, vary_texcoord0.xy);
|
||||
#endif
|
||||
|
||||
color.rgb = pow(color.rgb,vec3(2.2f,2.2f,2.2f));
|
||||
|
||||
color.rgb = fullbrightAtmosTransport(color.rgb);
|
||||
color.rgb = srgb_to_linear(color.rgb);
|
||||
color.rgb *= vertex_color.rgb;
|
||||
|
||||
color.rgb = fullbrightAtmosTransport(color.rgb);
|
||||
color.rgb = fullbrightScaleSoftClip(color.rgb);
|
||||
|
||||
color.rgb = pow(color.rgb, vec3(1.0/2.2));
|
||||
color.rgb = linear_to_srgb(color.rgb);
|
||||
|
||||
frag_color = color;
|
||||
frag_color.rgb = color.rgb;
|
||||
frag_color.a = color.a;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,28 @@
|
|||
|
||||
uniform float emissive_brightness;
|
||||
|
||||
|
||||
vec3 srgb_to_linear(vec3 cs)
|
||||
{
|
||||
|
||||
/* { cs / 12.92, cs <= 0.04045
|
||||
cl = {
|
||||
{ ((cs + 0.055)/1.055)^2.4, cs > 0.04045*/
|
||||
|
||||
return pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
|
||||
}
|
||||
|
||||
vec3 linear_to_srgb(vec3 cl)
|
||||
{
|
||||
/*{ 0.0, 0 <= cl
|
||||
{ 12.92 * c, 0 < cl < 0.0031308
|
||||
cs = { 1.055 * cl^0.41666 - 0.055, 0.0031308 <= cl < 1
|
||||
{ 1.0, cl >= 1*/
|
||||
|
||||
return 1.055 * pow(cl, vec3(0.41666)) - 0.055;
|
||||
}
|
||||
|
||||
|
||||
#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)
|
||||
|
||||
#ifdef DEFINE_GL_FRAGCOLOR
|
||||
|
|
@ -459,7 +481,7 @@ void main()
|
|||
|
||||
#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)
|
||||
vec3 old_diffcol = diffcol.rgb;
|
||||
diffcol.rgb = pow(diffcol.rgb, vec3(2.2));
|
||||
diffcol.rgb = srgb_to_linear(diffcol.rgb);
|
||||
#endif
|
||||
|
||||
#if HAS_SPECULAR_MAP
|
||||
|
|
@ -648,7 +670,7 @@ void main()
|
|||
col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);
|
||||
|
||||
//convert to linear space before adding local lights
|
||||
col = pow(col, vec3(2.2));
|
||||
col = srgb_to_linear(col);
|
||||
|
||||
|
||||
vec3 npos = normalize(-pos.xyz);
|
||||
|
|
@ -665,7 +687,7 @@ void main()
|
|||
|
||||
|
||||
//convert to gamma space for display on screen
|
||||
col.rgb = pow(col.rgb, vec3(1.0/2.2));
|
||||
col.rgb = linear_to_srgb(col.rgb);
|
||||
|
||||
frag_color.rgb = col.rgb;
|
||||
glare = min(glare, 1.0);
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ void main()
|
|||
norm = normalize(norm);
|
||||
vec4 spec = texture2DRect(specularRect, frag.xy);
|
||||
vec3 diff = texture2DRect(diffuseRect, frag.xy).rgb;
|
||||
|
||||
float noise = texture2D(noiseMap, frag.xy/128.0).b;
|
||||
vec3 out_col = vec3(0,0,0);
|
||||
vec3 npos = normalize(-pos);
|
||||
|
|
@ -157,6 +158,7 @@ void main()
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
frag_color.rgb = out_col;
|
||||
frag_color.a = 0.0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,15 +84,30 @@ vec3 decode_normal (vec2 enc)
|
|||
return n;
|
||||
}
|
||||
|
||||
vec4 correctWithGamma(vec4 col)
|
||||
vec3 srgb_to_linear(vec3 cs)
|
||||
{
|
||||
return vec4(pow(col.rgb, vec3(2.2)), col.a);
|
||||
|
||||
/* { cs / 12.92, cs <= 0.04045
|
||||
cl = {
|
||||
{ ((cs + 0.055)/1.055)^2.4, cs > 0.04045*/
|
||||
|
||||
return pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
|
||||
}
|
||||
|
||||
vec3 linear_to_srgb(vec3 cl)
|
||||
{
|
||||
/*{ 0.0, 0 <= cl
|
||||
{ 12.92 * c, 0 < cl < 0.0031308
|
||||
cs = { 1.055 * cl^0.41666 - 0.055, 0.0031308 <= cl < 1
|
||||
{ 1.0, cl >= 1*/
|
||||
|
||||
return 1.055 * pow(cl, vec3(0.41666)) - 0.055;
|
||||
}
|
||||
|
||||
vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
|
||||
{
|
||||
vec4 ret = texture2DLod(projectionMap, tc, lod);
|
||||
ret = correctWithGamma(ret);
|
||||
ret.rgb = srgb_to_linear(ret.rgb);
|
||||
|
||||
vec2 dist = tc-vec2(0.5);
|
||||
|
||||
|
|
@ -108,7 +123,7 @@ vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
|
|||
vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
|
||||
{
|
||||
vec4 ret = texture2DLod(projectionMap, tc, lod);
|
||||
ret = correctWithGamma(ret);
|
||||
ret.rgb = srgb_to_linear(ret.rgb);
|
||||
|
||||
vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
|
||||
|
||||
|
|
@ -126,7 +141,7 @@ vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
|
|||
vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)
|
||||
{
|
||||
vec4 ret = texture2DLod(projectionMap, tc, lod);
|
||||
ret = correctWithGamma(ret);
|
||||
ret.rgb = srgb_to_linear(ret.rgb);
|
||||
|
||||
vec2 dist = tc-vec2(0.5);
|
||||
|
||||
|
|
|
|||
|
|
@ -38,9 +38,20 @@ VARYING vec2 vary_fragcoord;
|
|||
|
||||
uniform float texture_gamma;
|
||||
|
||||
vec3 linear_to_srgb(vec3 cl)
|
||||
{
|
||||
/*{ 0.0, 0 <= cl
|
||||
{ 12.92 * c, 0 < cl < 0.0031308
|
||||
cs = { 1.055 * cl^0.41666 - 0.055, 0.0031308 <= cl < 1
|
||||
{ 1.0, cl >= 1*/
|
||||
|
||||
return 1.055 * pow(cl, vec3(0.41666)) - 0.055;
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 diff = texture2DRect(diffuseRect, vary_fragcoord);
|
||||
frag_color = pow(diff, vec4(texture_gamma, texture_gamma, texture_gamma, 1.0f));
|
||||
diff.rgb = linear_to_srgb(diff.rgb);
|
||||
frag_color = diff;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -78,6 +78,28 @@ vec3 vary_AtmosAttenuation;
|
|||
uniform mat4 inv_proj;
|
||||
uniform vec2 screen_res;
|
||||
|
||||
|
||||
vec3 srgb_to_linear(vec3 cs)
|
||||
{
|
||||
|
||||
/* { cs / 12.92, cs <= 0.04045
|
||||
cl = {
|
||||
{ ((cs + 0.055)/1.055)^2.4, cs > 0.04045*/
|
||||
|
||||
return pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
|
||||
}
|
||||
|
||||
vec3 linear_to_srgb(vec3 cl)
|
||||
{
|
||||
/*{ 0.0, 0 <= cl
|
||||
{ 12.92 * c, 0 < cl < 0.0031308
|
||||
cs = { 1.055 * cl^0.41666 - 0.055, 0.0031308 <= cl < 1
|
||||
{ 1.0, cl >= 1*/
|
||||
|
||||
return 1.055 * pow(cl, vec3(0.41666)) - 0.055;
|
||||
}
|
||||
|
||||
|
||||
vec3 decode_normal (vec2 enc)
|
||||
{
|
||||
vec2 fenc = enc*4-2;
|
||||
|
|
@ -313,7 +335,7 @@ void main()
|
|||
vec4 diffuse = texture2DRect(diffuseRect, tc);
|
||||
|
||||
//convert to gamma space
|
||||
diffuse.rgb = pow(diffuse.rgb, vec3(1.0/2.2));
|
||||
diffuse.rgb = linear_to_srgb(diffuse.rgb);
|
||||
|
||||
vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
|
||||
vec3 col;
|
||||
|
|
@ -369,7 +391,7 @@ void main()
|
|||
col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);
|
||||
}
|
||||
|
||||
col = pow(col, vec3(2.2));
|
||||
col = srgb_to_linear(col);
|
||||
|
||||
//col = vec3(1,0,1);
|
||||
//col.g = envIntensity;
|
||||
|
|
|
|||
|
|
@ -82,9 +82,29 @@ vec3 decode_normal (vec2 enc)
|
|||
return n;
|
||||
}
|
||||
|
||||
vec3 srgb_to_linear(vec3 cs)
|
||||
{
|
||||
|
||||
/* { cs / 12.92, cs <= 0.04045
|
||||
cl = {
|
||||
{ ((cs + 0.055)/1.055)^2.4, cs > 0.04045*/
|
||||
|
||||
return pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
|
||||
}
|
||||
|
||||
vec3 linear_to_srgb(vec3 cl)
|
||||
{
|
||||
/*{ 0.0, 0 <= cl
|
||||
{ 12.92 * c, 0 < cl < 0.0031308
|
||||
cs = { 1.055 * cl^0.41666 - 0.055, 0.0031308 <= cl < 1
|
||||
{ 1.0, cl >= 1*/
|
||||
|
||||
return 1.055 * pow(cl, vec3(0.41666)) - 0.055;
|
||||
}
|
||||
|
||||
vec4 correctWithGamma(vec4 col)
|
||||
{
|
||||
return vec4(pow(col.rgb, vec3(2.2)), col.a);
|
||||
return vec4(srgb_to_linear(col.rgb), col.a);
|
||||
}
|
||||
|
||||
vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ void main()
|
|||
pos.w = 1.0;
|
||||
pos = modelview_matrix*pos;
|
||||
|
||||
calcAtmospherics(view.xyz);
|
||||
calcAtmospherics(pos.xyz);
|
||||
|
||||
//pass wave parameters to pixel shader
|
||||
vec2 bigWave = (v.xy) * vec2(0.04,0.04) + d1 * time * 0.055;
|
||||
|
|
|
|||
|
|
@ -1,224 +0,0 @@
|
|||
/**
|
||||
* @file alphaV.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 mat3 normal_matrix;
|
||||
uniform mat4 texture_matrix0;
|
||||
uniform mat4 projection_matrix;
|
||||
uniform mat4 modelview_matrix;
|
||||
uniform mat4 modelview_projection_matrix;
|
||||
|
||||
ATTRIBUTE vec3 position;
|
||||
|
||||
#ifdef USE_INDEXED_TEX
|
||||
void passTextureIndex();
|
||||
#endif
|
||||
|
||||
ATTRIBUTE vec3 normal;
|
||||
|
||||
#ifdef USE_VERTEX_COLOR
|
||||
ATTRIBUTE vec4 diffuse_color;
|
||||
#endif
|
||||
|
||||
ATTRIBUTE vec2 texcoord0;
|
||||
|
||||
#ifdef HAS_SKIN
|
||||
mat4 getObjectSkinnedTransform();
|
||||
#else
|
||||
#ifdef IS_AVATAR_SKIN
|
||||
mat4 getSkinnedTransform();
|
||||
#endif
|
||||
#endif
|
||||
|
||||
vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
|
||||
void calcAtmospherics(vec3 inPositionEye);
|
||||
|
||||
vec3 calcDirectionalLight(vec3 n, vec3 l);
|
||||
|
||||
vec3 atmosAmbient(vec3 light);
|
||||
vec3 atmosAffectDirectionalLight(float lightIntensity);
|
||||
vec3 scaleDownLight(vec3 light);
|
||||
vec3 scaleUpLight(vec3 light);
|
||||
|
||||
VARYING vec3 vary_ambient;
|
||||
VARYING vec3 vary_directional;
|
||||
VARYING vec3 vary_fragcoord;
|
||||
VARYING vec3 vary_position;
|
||||
VARYING vec3 vary_pointlight_col;
|
||||
|
||||
#ifdef USE_VERTEX_COLOR
|
||||
VARYING vec4 vertex_color;
|
||||
#endif
|
||||
|
||||
VARYING vec2 vary_texcoord0;
|
||||
VARYING vec3 vary_norm;
|
||||
|
||||
uniform float near_clip;
|
||||
uniform float shadow_offset;
|
||||
uniform float shadow_bias;
|
||||
|
||||
uniform vec4 light_position[8];
|
||||
uniform vec3 light_direction[8];
|
||||
uniform vec3 light_attenuation[8];
|
||||
uniform vec3 light_diffuse[8];
|
||||
|
||||
uniform vec3 sun_dir;
|
||||
|
||||
vec3 calcDirectionalLight(vec3 n, vec3 l)
|
||||
{
|
||||
float a = max(dot(n,l),0.0);
|
||||
return vec3(a,a,a);
|
||||
}
|
||||
|
||||
vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
|
||||
{
|
||||
//get light vector
|
||||
vec3 lv = lp.xyz-v;
|
||||
|
||||
//get distance
|
||||
float d = dot(lv,lv);
|
||||
|
||||
float da = 0.0;
|
||||
|
||||
if (d > 0.0 && la > 0.0 && fa > 0.0)
|
||||
{
|
||||
//normalize light vector
|
||||
lv = normalize(lv);
|
||||
|
||||
//distance attenuation
|
||||
float dist2 = d/la;
|
||||
da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
|
||||
|
||||
// spotlight coefficient.
|
||||
float spot = max(dot(-ln, lv), is_pointlight);
|
||||
da *= spot*spot; // GL_SPOT_EXPONENT=2
|
||||
|
||||
//angular attenuation
|
||||
da *= max(dot(n, lv), 0.0);
|
||||
}
|
||||
|
||||
return vec3(da,da,da);
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 pos;
|
||||
vec3 norm;
|
||||
|
||||
//transform vertex
|
||||
#ifdef HAS_SKIN
|
||||
mat4 trans = getObjectSkinnedTransform();
|
||||
trans = modelview_matrix * trans;
|
||||
|
||||
pos = trans * vec4(position.xyz, 1.0);
|
||||
|
||||
norm = position.xyz + normal.xyz;
|
||||
norm = normalize((trans * vec4(norm, 1.0)).xyz - pos.xyz);
|
||||
vec4 frag_pos = projection_matrix * pos;
|
||||
gl_Position = frag_pos;
|
||||
#else
|
||||
|
||||
#ifdef IS_AVATAR_SKIN
|
||||
mat4 trans = getSkinnedTransform();
|
||||
vec4 pos_in = vec4(position.xyz, 1.0);
|
||||
pos.x = dot(trans[0], pos_in);
|
||||
pos.y = dot(trans[1], pos_in);
|
||||
pos.z = dot(trans[2], pos_in);
|
||||
pos.w = 1.0;
|
||||
|
||||
norm.x = dot(trans[0].xyz, normal);
|
||||
norm.y = dot(trans[1].xyz, normal);
|
||||
norm.z = dot(trans[2].xyz, normal);
|
||||
norm = normalize(norm);
|
||||
|
||||
vec4 frag_pos = projection_matrix * pos;
|
||||
gl_Position = frag_pos;
|
||||
#else
|
||||
norm = normalize(normal_matrix * normal);
|
||||
vec4 vert = vec4(position.xyz, 1.0);
|
||||
pos = (modelview_matrix * vert);
|
||||
gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef USE_INDEXED_TEX
|
||||
passTextureIndex();
|
||||
vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
|
||||
#else
|
||||
vary_texcoord0 = texcoord0;
|
||||
#endif
|
||||
|
||||
vary_norm = norm;
|
||||
float dp_directional_light = max(0.0, dot(norm, light_position[0].xyz));
|
||||
vary_position = pos.xyz + light_position[0].xyz * (1.0-dp_directional_light)*shadow_offset;
|
||||
|
||||
calcAtmospherics(pos.xyz);
|
||||
|
||||
#ifndef USE_VERTEX_COLOR
|
||||
vec4 diffuse_color = vec4(1,1,1,1);
|
||||
#endif
|
||||
|
||||
//vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.));
|
||||
vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a);
|
||||
|
||||
vec3 dff = pow(diffuse_color.rgb, vec3(2.2f,2.2f,2.2f));
|
||||
|
||||
vary_pointlight_col = dff;
|
||||
|
||||
col.rgb = vec3(0,0,0);
|
||||
|
||||
// Add windlight lights
|
||||
col.rgb = atmosAmbient(col.rgb);
|
||||
|
||||
float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0);
|
||||
ambient *= 0.5;
|
||||
ambient *= ambient;
|
||||
ambient = (1.0-ambient);
|
||||
|
||||
col.rgb *= ambient;
|
||||
|
||||
vary_directional.rgb = atmosAffectDirectionalLight(1.0f);
|
||||
vary_ambient = col.rgb*dff;
|
||||
|
||||
col.rgb = col.rgb*dff;
|
||||
|
||||
#ifdef USE_VERTEX_COLOR
|
||||
vertex_color = col;
|
||||
#endif
|
||||
|
||||
#ifdef HAS_SKIN
|
||||
vary_fragcoord.xyz = frag_pos.xyz + vec3(0,0,near_clip);
|
||||
#else
|
||||
|
||||
#ifdef IS_AVATAR_SKIN
|
||||
vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip);
|
||||
#else
|
||||
pos = modelview_projection_matrix * vert;
|
||||
vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
}
|
||||
|
|
@ -85,9 +85,19 @@ vec3 decode_normal (vec2 enc)
|
|||
return n;
|
||||
}
|
||||
|
||||
vec3 srgb_to_linear(vec3 cs)
|
||||
{
|
||||
|
||||
/* { cs / 12.92, cs <= 0.04045
|
||||
cl = {
|
||||
{ ((cs + 0.055)/1.055)^2.4, cs > 0.04045*/
|
||||
|
||||
return pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
|
||||
}
|
||||
|
||||
vec4 correctWithGamma(vec4 col)
|
||||
{
|
||||
return vec4(pow(col.rgb, vec3(2.2)), col.a);
|
||||
return vec4(srgb_to_linear(col.rgb), col.a);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -78,6 +78,26 @@ vec3 vary_AtmosAttenuation;
|
|||
uniform mat4 inv_proj;
|
||||
uniform vec2 screen_res;
|
||||
|
||||
vec3 srgb_to_linear(vec3 cs)
|
||||
{
|
||||
|
||||
/* { cs / 12.92, cs <= 0.04045
|
||||
cl = {
|
||||
{ ((cs + 0.055)/1.055)^2.4, cs > 0.04045*/
|
||||
|
||||
return pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
|
||||
}
|
||||
|
||||
vec3 linear_to_srgb(vec3 cl)
|
||||
{
|
||||
/*{ 0.0, 0 <= cl
|
||||
{ 12.92 * c, 0 < cl < 0.0031308
|
||||
cs = { 1.055 * cl^0.41666 - 0.055, 0.0031308 <= cl < 1
|
||||
{ 1.0, cl >= 1*/
|
||||
|
||||
return 1.055 * pow(cl, vec3(0.41666)) - 0.055;
|
||||
}
|
||||
|
||||
vec2 encode_normal(vec3 n)
|
||||
{
|
||||
float f = sqrt(8 * n.z + 8);
|
||||
|
|
@ -326,7 +346,7 @@ void main()
|
|||
vec4 diffuse = texture2DRect(diffuseRect, tc);
|
||||
|
||||
//convert to gamma space
|
||||
diffuse.rgb = pow(diffuse.rgb, vec3(1.0/2.2));
|
||||
diffuse.rgb = linear_to_srgb(diffuse.rgb);
|
||||
|
||||
vec3 col;
|
||||
float bloom = 0.0;
|
||||
|
|
@ -392,7 +412,7 @@ void main()
|
|||
col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);
|
||||
}
|
||||
|
||||
col = pow(col, vec3(2.2));
|
||||
col = srgb_to_linear(col);
|
||||
|
||||
//col = vec3(1,0,1);
|
||||
//col.g = envIntensity;
|
||||
|
|
|
|||
|
|
@ -85,9 +85,19 @@ vec3 decode_normal (vec2 enc)
|
|||
return n;
|
||||
}
|
||||
|
||||
vec3 srgb_to_linear(vec3 cs)
|
||||
{
|
||||
|
||||
/* { cs / 12.92, cs <= 0.04045
|
||||
cl = {
|
||||
{ ((cs + 0.055)/1.055)^2.4, cs > 0.04045*/
|
||||
|
||||
return pow((cs+vec3(0.055))/vec3(1.055), vec3(2.4));
|
||||
}
|
||||
|
||||
vec4 correctWithGamma(vec4 col)
|
||||
{
|
||||
return vec4(pow(col.rgb, vec3(2.2)), col.a);
|
||||
return vec4(srgb_to_linear(col.rgb), col.a);
|
||||
}
|
||||
|
||||
vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
|
||||
|
|
|
|||
|
|
@ -527,6 +527,8 @@ void LLDrawable::makeStatic(BOOL warning_enabled)
|
|||
}
|
||||
updatePartition();
|
||||
}
|
||||
|
||||
llassert(isAvatar() || isRoot() || mParent->isStatic());
|
||||
}
|
||||
|
||||
// Returns "distance" between target destination and resulting xfrom
|
||||
|
|
|
|||
|
|
@ -625,14 +625,16 @@ S32 LLDrawPoolFullbright::getNumPasses()
|
|||
|
||||
void LLDrawPoolFullbrightAlphaMask::beginPostDeferredPass(S32 pass)
|
||||
{
|
||||
gObjectFullbrightAlphaMaskProgram.bind();
|
||||
|
||||
if (LLPipeline::sRenderingHUDs || !LLPipeline::sRenderDeferred)
|
||||
{
|
||||
gObjectFullbrightAlphaMaskProgram.bind();
|
||||
gObjectFullbrightAlphaMaskProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 1.0f);
|
||||
}
|
||||
else
|
||||
{
|
||||
gObjectFullbrightAlphaMaskProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
|
||||
gDeferredFullbrightAlphaMaskProgram.bind();
|
||||
gDeferredFullbrightAlphaMaskProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -646,7 +648,14 @@ void LLDrawPoolFullbrightAlphaMask::renderPostDeferred(S32 pass)
|
|||
|
||||
void LLDrawPoolFullbrightAlphaMask::endPostDeferredPass(S32 pass)
|
||||
{
|
||||
gObjectFullbrightAlphaMaskProgram.unbind();
|
||||
if (LLPipeline::sRenderingHUDs || !LLPipeline::sRenderDeferred)
|
||||
{
|
||||
gObjectFullbrightAlphaMaskProgram.unbind();
|
||||
}
|
||||
else
|
||||
{
|
||||
gDeferredFullbrightAlphaMaskProgram.unbind();
|
||||
}
|
||||
LLRenderPass::endRenderPass(pass);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -197,6 +197,7 @@ LLGLSLShader gDeferredAttachmentShadowProgram;
|
|||
LLGLSLShader gDeferredAlphaProgram;
|
||||
LLGLSLShader gDeferredAvatarEyesProgram;
|
||||
LLGLSLShader gDeferredFullbrightProgram;
|
||||
LLGLSLShader gDeferredFullbrightAlphaMaskProgram;
|
||||
LLGLSLShader gDeferredEmissiveProgram;
|
||||
LLGLSLShader gDeferredPostProgram;
|
||||
LLGLSLShader gDeferredCoFProgram;
|
||||
|
|
@ -290,6 +291,7 @@ LLViewerShaderMgr::LLViewerShaderMgr() :
|
|||
mShaderList.push_back(&gDeferredAlphaProgram);
|
||||
mShaderList.push_back(&gDeferredSkinnedAlphaProgram);
|
||||
mShaderList.push_back(&gDeferredFullbrightProgram);
|
||||
mShaderList.push_back(&gDeferredFullbrightAlphaMaskProgram);
|
||||
mShaderList.push_back(&gDeferredFullbrightShinyProgram);
|
||||
mShaderList.push_back(&gDeferredSkinnedFullbrightShinyProgram);
|
||||
mShaderList.push_back(&gDeferredSkinnedFullbrightProgram);
|
||||
|
|
@ -1130,6 +1132,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
|
|||
gDeferredAvatarAlphaProgram.unload();
|
||||
gDeferredAlphaProgram.unload();
|
||||
gDeferredFullbrightProgram.unload();
|
||||
gDeferredFullbrightAlphaMaskProgram.unload();
|
||||
gDeferredEmissiveProgram.unload();
|
||||
gDeferredAvatarEyesProgram.unload();
|
||||
gDeferredPostProgram.unload();
|
||||
|
|
@ -1493,6 +1496,20 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
|
|||
success = gDeferredFullbrightProgram.createShader(NULL, NULL);
|
||||
}
|
||||
|
||||
if (success)
|
||||
{
|
||||
gDeferredFullbrightAlphaMaskProgram.mName = "Deferred Fullbright Alpha Mask Shader";
|
||||
gDeferredFullbrightAlphaMaskProgram.mFeatures.calculatesAtmospherics = true;
|
||||
gDeferredFullbrightAlphaMaskProgram.mFeatures.hasGamma = true;
|
||||
gDeferredFullbrightAlphaMaskProgram.mFeatures.hasTransport = true;
|
||||
gDeferredFullbrightAlphaMaskProgram.mFeatures.mIndexedTextureChannels = LLGLSLShader::sIndexedTextureChannels;
|
||||
gDeferredFullbrightAlphaMaskProgram.mShaderFiles.clear();
|
||||
gDeferredFullbrightAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightV.glsl", GL_VERTEX_SHADER_ARB));
|
||||
gDeferredFullbrightAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightAlphaMaskF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gDeferredFullbrightAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
|
||||
success = gDeferredFullbrightAlphaMaskProgram.createShader(NULL, NULL);
|
||||
}
|
||||
|
||||
if (success)
|
||||
{
|
||||
gDeferredFullbrightShinyProgram.mName = "Deferred FullbrightShiny Shader";
|
||||
|
|
|
|||
|
|
@ -363,6 +363,7 @@ extern LLGLSLShader gDeferredAvatarShadowProgram;
|
|||
extern LLGLSLShader gDeferredAttachmentShadowProgram;
|
||||
extern LLGLSLShader gDeferredAlphaProgram;
|
||||
extern LLGLSLShader gDeferredFullbrightProgram;
|
||||
extern LLGLSLShader gDeferredFullbrightAlphaMaskProgram;
|
||||
extern LLGLSLShader gDeferredEmissiveProgram;
|
||||
extern LLGLSLShader gDeferredAvatarEyesProgram;
|
||||
extern LLGLSLShader gDeferredAvatarAlphaProgram;
|
||||
|
|
|
|||
|
|
@ -3724,8 +3724,30 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a&
|
|||
{
|
||||
LLFace* face = mDrawable->getFace(face_hit);
|
||||
|
||||
bool ignore_alpha = false;
|
||||
|
||||
const LLTextureEntry* te = face->getTextureEntry();
|
||||
if (te)
|
||||
{
|
||||
LLMaterial* mat = te->getMaterialParams();
|
||||
if (mat)
|
||||
{
|
||||
U8 mode = mat->getDiffuseAlphaMode();
|
||||
|
||||
if (mode == LLMaterial::DIFFUSE_ALPHA_MODE_EMISSIVE ||
|
||||
mode == LLMaterial::DIFFUSE_ALPHA_MODE_NONE)
|
||||
{
|
||||
ignore_alpha = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (face &&
|
||||
(pick_transparent || !face->getTexture() || !face->getTexture()->hasGLTexture() || face->getTexture()->getMask(face->surfaceToTexture(tc, p, n))))
|
||||
(ignore_alpha ||
|
||||
pick_transparent ||
|
||||
!face->getTexture() ||
|
||||
!face->getTexture()->hasGLTexture() ||
|
||||
face->getTexture()->getMask(face->surfaceToTexture(tc, p, n))))
|
||||
{
|
||||
local_end = p;
|
||||
if (face_hitp != NULL)
|
||||
|
|
|
|||
Loading…
Reference in New Issue