diff options
| author | Cosmic Linden <cosmic@lindenlab.com> | 2023-04-28 09:44:05 -0700 | 
|---|---|---|
| committer | Cosmic Linden <cosmic@lindenlab.com> | 2023-04-28 10:36:29 -0700 | 
| commit | 0fedb22d77bc67cd5c619537d985b905fe57e385 (patch) | |
| tree | 8bf0cc18f8a3a1b894f67a540b6d5cc67f8cc95a /indra/newview | |
| parent | 51318d1808cb8e1212b24c5971ce9187b2e5e8ba (diff) | |
SL-19644: Entirely separate files for GLTF alpha shadows
Diffstat (limited to 'indra/newview')
5 files changed, 127 insertions, 15 deletions
| diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbrShadowAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbrShadowAlphaMaskF.glsl new file mode 100644 index 0000000000..5ef9bb6805 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/pbrShadowAlphaMaskF.glsl @@ -0,0 +1,50 @@ +/**  + * @file pbrShadowAlphaMaskF.glsl + * + * $LicenseInfo:firstyear=2023&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2023, 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$ + */ + +#ifdef DEFINE_GL_FRAGCOLOR +out vec4 frag_color; +#else +#define frag_color gl_FragColor +#endif + +uniform sampler2D diffuseMap; + +in vec4 post_pos; +in float target_pos_x; +in vec4 vertex_color; +in vec2 vary_texcoord0; +uniform float minimum_alpha; + +void main()  +{ +    float alpha = diffuseLookup(vary_texcoord0.xy).a; + +    if (alpha < minimum_alpha) +    { +        discard; +    } + +    frag_color = vec4(1,1,1,1); +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/pbrShadowAlphaMaskV.glsl b/indra/newview/app_settings/shaders/class1/deferred/pbrShadowAlphaMaskV.glsl new file mode 100644 index 0000000000..4fb5fbcf06 --- /dev/null +++ b/indra/newview/app_settings/shaders/class1/deferred/pbrShadowAlphaMaskV.glsl @@ -0,0 +1,75 @@ +/**  + * @file pbrShadowAlphaMaskV.glsl + * + * $LicenseInfo:firstyear=2023&license=viewerlgpl$ + * Second Life Viewer Source Code + * Copyright (C) 2023, 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; +#if defined(HAS_SKIN) +uniform mat4 modelview_matrix; +uniform mat4 projection_matrix; +mat4 getObjectSkinnedTransform(); +#else +uniform mat4 modelview_projection_matrix; +#endif + +uniform vec4[2] texture_base_color_transform; +vec2 texture_transform(vec2 vertex_texcoord, vec4[2] khr_gltf_transform, mat4 sl_animation_transform); + +uniform float shadow_target_width; + +in vec3 position; +in vec4 diffuse_color; +in vec2 texcoord0; + +out vec4 post_pos; +out float target_pos_x; +out vec4 vertex_color; +out vec2 vary_texcoord0; + +void passTextureIndex(); + +void main() +{ +    //transform vertex +#if defined(HAS_SKIN) +    vec4 pre_pos = vec4(position.xyz, 1.0); +    mat4 mat = getObjectSkinnedTransform(); +    mat = modelview_matrix * mat; +    vec4 pos = mat * pre_pos; +    pos = projection_matrix * pos; +#else +    vec4 pre_pos = vec4(position.xyz, 1.0); +    vec4 pos = modelview_projection_matrix * pre_pos; +#endif + +    target_pos_x = 0.5 * (shadow_target_width - 1.0) * pos.x; + +    post_pos = pos; + +    gl_Position = pos; +     +    passTextureIndex(); + +    vary_texcoord0 = texture_transform(texcoord0, texture_base_color_transform, texture_matrix0); +    vertex_color = diffuse_color; +} diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl index eb2ba68415..8c9b6f8190 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl @@ -48,8 +48,6 @@ void main()          discard;      } -#if !defined(GLTF) -  #if !defined(IS_FULLBRIGHT)      alpha *= vertex_color.a;  #endif @@ -66,7 +64,6 @@ void main()              discard;          }      } -#endif  	frag_color = vec4(1,1,1,1);  } diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl index ddb2881766..26db1a5d4d 100644 --- a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl +++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl @@ -32,11 +32,6 @@ mat4 getObjectSkinnedTransform();  uniform mat4 modelview_projection_matrix;  #endif -#if defined(GLTF) -uniform vec4[2] texture_base_color_transform; -vec2 texture_transform(vec2 vertex_texcoord, vec4[2] khr_gltf_transform, mat4 sl_animation_transform); -#endif -  uniform float shadow_target_width;  in vec3 position; @@ -72,10 +67,6 @@ void main()  	passTextureIndex(); -#if defined(GLTF) -	vary_texcoord0 = texture_transform(texcoord0, texture_base_color_transform, texture_matrix0); -#else  	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy; -#endif  	vertex_color = diffuse_color;  } diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp index 8925cc2f9b..4ceef07e72 100644 --- a/indra/newview/llviewershadermgr.cpp +++ b/indra/newview/llviewershadermgr.cpp @@ -2344,11 +2344,10 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()          gDeferredShadowGLTFAlphaMaskProgram.mName = "Deferred GLTF Shadow Alpha Mask Shader";          gDeferredShadowGLTFAlphaMaskProgram.mFeatures.mIndexedTextureChannels = LLGLSLShader::sIndexedTextureChannels;          gDeferredShadowGLTFAlphaMaskProgram.mShaderFiles.clear(); -        gDeferredShadowGLTFAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/shadowAlphaMaskV.glsl", GL_VERTEX_SHADER)); -        gDeferredShadowGLTFAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/shadowAlphaMaskF.glsl", GL_FRAGMENT_SHADER)); +        gDeferredShadowGLTFAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/pbrShadowAlphaMaskV.glsl", GL_VERTEX_SHADER)); +        gDeferredShadowGLTFAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/pbrShadowAlphaMaskF.glsl", GL_FRAGMENT_SHADER));          gDeferredShadowGLTFAlphaMaskProgram.mShaderLevel = mShaderLevel[SHADER_DEFERRED];          gDeferredShadowGLTFAlphaMaskProgram.clearPermutations(); -        gDeferredShadowGLTFAlphaMaskProgram.addPermutation("GLTF", "1");          success = make_rigged_variant(gDeferredShadowGLTFAlphaMaskProgram, gDeferredSkinnedShadowGLTFAlphaMaskProgram);          success = success && gDeferredShadowGLTFAlphaMaskProgram.createShader(NULL, NULL);          llassert(success); | 
