根据MAX_LIGHTS
的值,以下着色器代码引发以下异常。知道为什么吗?我错过了什么?在
/usr/lib/python2.7/site-packages/OpenGL/GL/shaders.pyc in compileProgram(*shaders, **named)
194 program = ShaderProgram( program )
195 glLinkProgram(program)
--> 196 program.check_validate()
197 program.check_linked()
198 for shader in shaders:
/usr/lib/python2.7/site-packages/OpenGL/GL/shaders.pyc in check_validate(self)
106 """Validation failure (%s): %s"""%(
107 validation,
--> 108 glGetProgramInfoLog( self ),
109 ))
110 return self
RuntimeError: Validation failure (0):
顶点着色器代码:
^{pr2}$碎片着色器代码:
#define MAX_LIGHTS 2
varying vec4 diffuse[MAX_LIGHTS], ambientGlobal[MAX_LIGHTS], ambient[MAX_LIGHTS];
varying vec3 normal[MAX_LIGHTS], lightDir[MAX_LIGHTS], halfVector[MAX_LIGHTS];
varying float dist[MAX_LIGHTS];
void main()
{
vec3 n, halfV, viewV, ldir;
float NdotL, NdotHV;
vec4 color = ambientGlobal[0];
float att;
for (int i=0; i<MAX_LIGHTS; i++)
{
/* a fragment shader can't write a verying variable, hence we need
a new variable to store the normalized interpolated normal */
n = normalize(normal[i]);
/* compute the dot product between normal and ldir */
NdotL = max(dot(n, normalize(lightDir[i])), 0.0);
if (NdotL > 0.0) {
att = 1.0 / (gl_LightSource[i].constantAttenuation +
gl_LightSource[i].linearAttenuation * dist[i] +
gl_LightSource[i].quadraticAttenuation * dist[i] * dist[i]);
color += att * (diffuse[i] * NdotL + ambient[i]);
halfV = normalize(halfVector[i]);
NdotHV = max(dot(n,halfV),0.0);
color += att * gl_FrontMaterial.specular * gl_LightSource[i].specular * pow(NdotHV,gl_FrontMaterial.shininess);
}
}
gl_FragColor = color;
}
目前没有回答
相关问题 更多 >
编程相关推荐