关于我的显卡的一些信息:
GL_RENDERER: Intel(R) G41 Express Chipset
OpenGL_VERSION: 2.1.0 - Build 8.15.10.1986
GLSL_VERSION: 1.20 - Intel Build 8.15.10.1986
顶点着色器 1:
#version 110
attribute vec3 vertexPosition_modelspace;
varying vec3 normal;
varying vec3 vertex;
void light(inout vec3 ver, out vec3 nor);
void main()
{
gl_Position = vec4(vertexPosition_modelspace, 1.0);
light(vertex, normal);
}
顶点着色器 2:
#version 110
void light(inout vec3 ver, out vec3 nor)
{
ver = vec3(0.0,1.0,0.0);
//vec3 v = -ver; // wrong line
nor = vec3(0.0,0.0,1.0);
//float f = dot(ver, nor); // wrong line
}
片段着色器:
#version 110
varying vec3 normal;
varying vec3 vertex;
void main()
{
gl_FragColor = vec4(vertex, 1.0);
}
如果这两行在第二个顶点着色器中被注释,这些着色器工作得很好。但是,一旦启用其中之一,我们就会收到错误消息。该错误发生在 opengl 函数glDrawArrays中。
似乎out/inout的变量不能用作正确的值。
我在Intel HD Graphics 3000上运行了相同的程序,opengl 的版本是3.1和 GLSL 的版本是1.4,并且程序运行良好。这是英特尔驱动程序的错误还是我用错了?