MAINT-2242 Fix for shader compilation errors on Intel HD graphics chips.
parent
c842494b77
commit
622d4f39a5
|
|
@ -23,9 +23,6 @@
|
|||
* $/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 mat4 texture_matrix0;
|
||||
uniform mat4 modelview_matrix;
|
||||
|
|
@ -45,6 +42,42 @@ uniform vec3 light_direction[8];
|
|||
uniform vec3 light_attenuation[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()
|
||||
{
|
||||
//transform vertex
|
||||
|
|
|
|||
|
|
@ -2025,11 +2025,11 @@ BOOL LLViewerShaderMgr::loadShadersObject()
|
|||
if (success)
|
||||
{
|
||||
gObjectPreviewProgram.mName = "Simple Shader";
|
||||
gObjectPreviewProgram.mFeatures.calculatesLighting = true;
|
||||
gObjectPreviewProgram.mFeatures.calculatesLighting = false;
|
||||
gObjectPreviewProgram.mFeatures.calculatesAtmospherics = false;
|
||||
gObjectPreviewProgram.mFeatures.hasGamma = true;
|
||||
gObjectPreviewProgram.mFeatures.hasGamma = false;
|
||||
gObjectPreviewProgram.mFeatures.hasAtmospherics = false;
|
||||
gObjectPreviewProgram.mFeatures.hasLighting = true;
|
||||
gObjectPreviewProgram.mFeatures.hasLighting = false;
|
||||
gObjectPreviewProgram.mFeatures.mIndexedTextureChannels = 0;
|
||||
gObjectPreviewProgram.mFeatures.disableTextureIndex = true;
|
||||
gObjectPreviewProgram.mShaderFiles.clear();
|
||||
|
|
@ -2037,6 +2037,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
|
|||
gObjectPreviewProgram.mShaderFiles.push_back(make_pair("objects/previewF.glsl", GL_FRAGMENT_SHADER_ARB));
|
||||
gObjectPreviewProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
|
||||
success = gObjectPreviewProgram.createShader(NULL, NULL);
|
||||
gObjectPreviewProgram.mFeatures.hasLighting = true;
|
||||
}
|
||||
|
||||
if (success)
|
||||
|
|
|
|||
Loading…
Reference in New Issue