[Public WebGL] debugging a shaderLinkError

Gregg Tavares (wrk) [email protected]
Fri Feb 25 17:07:34 PST 2011


What Steve said.

You're using 17 varyings. WebGL is only required to support 8.  (see OpenGL
ES 2.0 spec section 6.19)

Since you're only varying vec3s an amazing GL driver might be able to
optimize that to 13 varyings but I wouldn't count on it and even that is
over the minimum.

You might want to check that at startup.

    gl.getParameter(gl.MAX_VARYING_VECTORS);


On Fri, Feb 25, 2011 at 7:04 AM, Stephen Bannasch <
[email protected]> wrote:

>
> I'm trying to figure out why I'm getting a shaderLink error running this on
> Windows in Chrome 9:
>
>  http://visual-demos.dev.concord.org/seasons/earth/seasons1-2a.html
>
> It works fine on my Mac..
>
> The problem on Windows occurs on at least the following two cards:
>
> Renderer: ATI Mobility Radeon HD 4250 Graphics
> Vendor: ATI Technologies Inc.
> Memory: 256 MB
> Version: 3.2.9752 Forward-Compatible Context
>
> Renderer: ATI Radeon HD 5400 Series
> Vendor: ATI Technologies Inc.
> Memory: 1024 MB
> Version: 4.0.10317 Core Profile Forward-Compatible Context
>
> I'm using the SceneJS framework  to generate the shaders.
>
> What are the best ways to find out more about what is the trouble on
> Windows?
>
> Here are the string values for the vertexShaderSrc and fragmentShaderSrc:
>
> vertexShaderSrc =
> "#ifdef GL_ES
>   precision highp float;
> #endif
> attribute vec3 aVertex;
> attribute vec3 aNormal;
> uniform   mat4 uMNMatrix;
> uniform   mat4 uVNMatrix;
> varying   vec3 vNormal;
> varying   vec3 vEyeVec;
> uniform vec4 uLightPos0;
> varying vec3 vLightVec0;
> varying float vLightDist0;
> uniform vec3 uLightDir1;
> varying vec3 vLightVec1;
> varying float vLightDist1;
> uniform vec3 uLightDir2;
> varying vec3 vLightVec2;
> varying float vLightDist2;
> uniform vec3 uLightDir3;
> varying vec3 vLightVec3;
> varying float vLightDist3;
> uniform vec3 uLightDir4;
> varying vec3 vLightVec4;
> varying float vLightDist4;
> uniform vec3 uLightDir5;
> varying vec3 vLightVec5;
> varying float vLightDist5;
> uniform vec3 uLightDir6;
> varying vec3 vLightVec6;
> varying float vLightDist6;
> uniform mat4 uMMatrix;
> uniform mat4 uVMatrix;
> uniform mat4 uPMatrix;
> varying vec4 vViewVertex;
> void main(void) {
>  vec4 tmpVertex = uVMatrix * (uMMatrix * vec4(aVertex, 1.0));
>  vec4 tmpNormal = uVNMatrix * (uMNMatrix * vec4(aNormal, 1.0));
>  vNormal = normalize(tmpNormal.xyz);
>  vViewVertex = tmpVertex;
>  gl_Position = uPMatrix * vViewVertex;
>  vec3 tmpVec;
> tmpVec = -(uLightPos0.xyz - tmpVertex.xyz);
> vLightDist0 = length(tmpVec);
> vLightVec0 = tmpVec;
> tmpVec = -uLightDir1;
> vLightVec1 = tmpVec;
> tmpVec = -uLightDir2;
> vLightVec2 = tmpVec;
> tmpVec = -uLightDir3;
> vLightVec3 = tmpVec;
> tmpVec = -uLightDir4;
> vLightVec4 = tmpVec;
> tmpVec = -uLightDir5;
> vLightVec5 = tmpVec;
> tmpVec = -uLightDir6;
> vLightVec6 = tmpVec;
> vEyeVec = normalize(-vViewVertex.xyz);
> }"
>
>
>
> fragmentShaderSrc =
> "
>
> #ifdef GL_ES
>   precision highp float;
> #endif
> varying vec4 vViewVertex;
> uniform vec3  uMaterialBaseColor;
> uniform float uMaterialAlpha;
> uniform vec3  uAmbient;
> uniform float uMaterialEmit;
>  vec3    ambientValue=uAmbient;
>  float   emit    = uMaterialEmit;
> varying vec3 n;
> varying vec3 vNormal;
> varying vec3 vEyeVec;
> uniform vec3  uMaterialSpecularColor;
> uniform float uMaterialSpecular;
> uniform float uMaterialShine;
> uniform vec3  uLightColor0;
> uniform vec4   uLightPos0;
> uniform vec3  uLightAttenuation0;
> varying vec3  vLightVec0;
> varying float vLightDist0;
> uniform vec3  uLightColor1;
> uniform vec3   uLightDir1;
> uniform vec3  uLightAttenuation1;
> varying vec3  vLightVec1;
> varying float vLightDist1;
> uniform vec3  uLightColor2;
> uniform vec3   uLightDir2;
> uniform vec3  uLightAttenuation2;
> varying vec3  vLightVec2;
> varying float vLightDist2;
> uniform vec3  uLightColor3;
> uniform vec3   uLightDir3;
> uniform vec3  uLightAttenuation3;
> varying vec3  vLightVec3;
> varying float vLightDist3;
> uniform vec3  uLightColor4;
> uniform vec3   uLightDir4;
> uniform vec3  uLightAttenuation4;
> varying vec3  vLightVec4;
> varying float vLightDist4;
> uniform vec3  uLightColor5;
> uniform vec3   uLightDir5;
> uniform vec3  uLightAttenuation5;
> varying vec3  vLightVec5;
> varying float vLightDist5;
> uniform vec3  uLightColor6;
> uniform vec3   uLightDir6;
> uniform vec3  uLightAttenuation6;
> varying vec3  vLightVec6;
> varying float vLightDist6;
> void main(void) {
>  vec3    color   = uMaterialBaseColor;
>  float   alpha   = uMaterialAlpha;
>  float   specular=uMaterialSpecular;
>  vec3    specularColor=uMaterialSpecularColor;
>  float   shine=uMaterialShine;
>  float   attenuation = 1.0;
>  vec3    normalVec=vNormal;
>  vec3    lightValue      = uAmbient;
>  vec3    specularValue   = vec3(0.0, 0.0, 0.0);
>  vec3    lightVec;
>  float   dotN;
>  float   spotFactor;
>  float   pf;
> lightVec = normalize(vLightVec0);
> dotN = max(dot(normalVec, lightVec),0.0);
> if (dotN > 0.0) {
>  attenuation = 1.0 / (  uLightAttenuation0[0] +   uLightAttenuation0[1] *
> vLightDist0 +   uLightAttenuation0[2] * vLightDist0 * vLightDist0);
>  lightValue += dotN *  uLightColor0 * attenuation;
> specularValue += attenuation * specularColor * uLightColor0 * specular  *
> pow(max(dot(reflect(lightVec, normalVec), vEyeVec),0.0), shine);
> }
> lightVec = normalize(vLightVec1);
> dotN = max(dot(normalVec,lightVec),0.0);
> lightValue += dotN * uLightColor1;
> specularValue += specularColor * uLightColor1 * specular  *
> pow(max(dot(reflect(lightVec, normalVec),normalize(vEyeVec)),0.0), shine);
> lightVec = normalize(vLightVec2);
> dotN = max(dot(normalVec,lightVec),0.0);
> lightValue += dotN * uLightColor2;
> specularValue += specularColor * uLightColor2 * specular  *
> pow(max(dot(reflect(lightVec, normalVec),normalize(vEyeVec)),0.0), shine);
> lightVec = normalize(vLightVec3);
> dotN = max(dot(normalVec,lightVec),0.0);
> lightValue += dotN * uLightColor3;
> specularValue += specularColor * uLightColor3 * specular  *
> pow(max(dot(reflect(lightVec, normalVec),normalize(vEyeVec)),0.0), shine);
> lightVec = normalize(vLightVec4);
> dotN = max(dot(normalVec,lightVec),0.0);
> lightValue += dotN * uLightColor4;
> specularValue += specularColor * uLightColor4 * specular  *
> pow(max(dot(reflect(lightVec, normalVec),normalize(vEyeVec)),0.0), shine);
> lightVec = normalize(vLightVec5);
> dotN = max(dot(normalVec,lightVec),0.0);
> lightValue += dotN * uLightColor5;
> specularValue += specularColor * uLightColor5 * specular  *
> pow(max(dot(reflect(lightVec, normalVec),normalize(vEyeVec)),0.0), shine);
> lightVec = normalize(vLightVec6);
> dotN = max(dot(normalVec,lightVec),0.0);
> lightValue += dotN * uLightColor6;
> specularValue += specularColor * uLightColor6 * specular  *
> pow(max(dot(reflect(lightVec, normalVec),normalize(vEyeVec)),0.0), shine);
> if (emit>0.0) lightValue = vec3(1.0, 1.0, 1.0);
> vec4 fragColor = vec4(specularValue.rgb + color.rgb * (emit+1.0) *
> lightValue.rgb, alpha);
>    gl_FragColor = fragColor;
> }"
>
> -----------------------------------------------------------
> You are currently subscribed to [email protected]
> To unsubscribe, send an email to [email protected] with
> the following command in the body of your email:
> unsubscribe public_webgl
> -----------------------------------------------------------
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://khronos.org/pipermail/public_webgl_khronos.org/attachments/20110225/4baa9ebf/attachment.html>


More information about the public_webgl mailing list