为什么这个GLSL着色器无法在Intel G41上运行?

时间:2013-03-29 04:55:59

标签: opengl glsl intel

有关我的显卡的一些信息:
GL_RENDERER:英特尔(R)G41高速芯片组
OpenGL_VERSION: 2.1.0 - Build 8.15.10.1986
GLSL_VERSION: 1.20 - 英特尔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 ,程序运行良好。这是英特尔驱动程序的错误还是我使用的错误?

1 个答案:

答案 0 :(得分:-1)

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