0

关于我的显卡的一些信息:
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,并且程序运行良好。这是英特尔驱动程序的错误还是我用错了?

4

1 回答 1

0

因为 intel g41 是一个极弱的 gpu。通过它的唯一方法是升级你的GPU。

于 2016-04-27T02:15:06.703 回答