Skip to content
Snippets Groups Projects
Commit 622d4f39 authored by David Parks's avatar David Parks
Browse files

MAINT-2242 Fix for shader compilation errors on Intel HD graphics chips.

parent c842494b
No related branches found
No related tags found
No related merge requests found
...@@ -23,9 +23,6 @@ ...@@ -23,9 +23,6 @@
* $/LicenseInfo$ * $/LicenseInfo$
*/ */
float calcDirectionalLight(vec3 n, vec3 l);
float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight);
uniform mat3 normal_matrix; uniform mat3 normal_matrix;
uniform mat4 texture_matrix0; uniform mat4 texture_matrix0;
uniform mat4 modelview_matrix; uniform mat4 modelview_matrix;
...@@ -45,6 +42,42 @@ uniform vec3 light_direction[8]; ...@@ -45,6 +42,42 @@ uniform vec3 light_direction[8];
uniform vec3 light_attenuation[8]; uniform vec3 light_attenuation[8];
uniform vec3 light_diffuse[8]; uniform vec3 light_diffuse[8];
//===================================================================================================
//declare these here explicitly to separate them from atmospheric lighting elsewhere to work around
//drivers that are picky about functions being declared but not defined even if they aren't called
float calcDirectionalLight(vec3 n, vec3 l)
{
float a = max(dot(n,l),0.0);
return a;
}
float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float is_pointlight)
{
//get light vector
vec3 lv = lp.xyz-v;
//get distance
float d = length(lv);
//normalize light vector
lv *= 1.0/d;
//distance attenuation
float da = clamp(1.0/(la * d), 0.0, 1.0);
// spotlight coefficient.
float spot = max(dot(-ln, lv), is_pointlight);
da *= spot*spot; // GL_SPOT_EXPONENT=2
//angular attenuation
da *= calcDirectionalLight(n, lv);
return da;
}
//====================================================================================================
void main() void main()
{ {
//transform vertex //transform vertex
......
...@@ -2025,11 +2025,11 @@ BOOL LLViewerShaderMgr::loadShadersObject() ...@@ -2025,11 +2025,11 @@ BOOL LLViewerShaderMgr::loadShadersObject()
if (success) if (success)
{ {
gObjectPreviewProgram.mName = "Simple Shader"; gObjectPreviewProgram.mName = "Simple Shader";
gObjectPreviewProgram.mFeatures.calculatesLighting = true; gObjectPreviewProgram.mFeatures.calculatesLighting = false;
gObjectPreviewProgram.mFeatures.calculatesAtmospherics = false; gObjectPreviewProgram.mFeatures.calculatesAtmospherics = false;
gObjectPreviewProgram.mFeatures.hasGamma = true; gObjectPreviewProgram.mFeatures.hasGamma = false;
gObjectPreviewProgram.mFeatures.hasAtmospherics = false; gObjectPreviewProgram.mFeatures.hasAtmospherics = false;
gObjectPreviewProgram.mFeatures.hasLighting = true; gObjectPreviewProgram.mFeatures.hasLighting = false;
gObjectPreviewProgram.mFeatures.mIndexedTextureChannels = 0; gObjectPreviewProgram.mFeatures.mIndexedTextureChannels = 0;
gObjectPreviewProgram.mFeatures.disableTextureIndex = true; gObjectPreviewProgram.mFeatures.disableTextureIndex = true;
gObjectPreviewProgram.mShaderFiles.clear(); gObjectPreviewProgram.mShaderFiles.clear();
...@@ -2037,6 +2037,7 @@ BOOL LLViewerShaderMgr::loadShadersObject() ...@@ -2037,6 +2037,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
gObjectPreviewProgram.mShaderFiles.push_back(make_pair("objects/previewF.glsl", GL_FRAGMENT_SHADER_ARB)); gObjectPreviewProgram.mShaderFiles.push_back(make_pair("objects/previewF.glsl", GL_FRAGMENT_SHADER_ARB));
gObjectPreviewProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT]; gObjectPreviewProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
success = gObjectPreviewProgram.createShader(NULL, NULL); success = gObjectPreviewProgram.createShader(NULL, NULL);
gObjectPreviewProgram.mFeatures.hasLighting = true;
} }
if (success) if (success)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment