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);
}

2 番目の頂点シェーダーで 2 行がコメント化されている場合、これらのシェーダーは適切に機能します。ただし、そのうちの 1 つを有効にすると、エラーが発生します。エラーは、opengl 関数glDrawArraysで発生します。

out/inoutの変数が正しい値として使えないようです。OpenGL のバージョンが3.1で GLSL のバージョンが1.4であるIntel HD Graphics 3000
で 同じプログラムを実行しましたが、プログラムは正常に動作します。これは Intel のドライバーのバグですか、それとも私の使い方が間違っているのでしょうか?

4

1 に答える 1

0

Intel g41 は非常に弱い GPU であるためです。唯一の方法は、GPU をアップグレードすることです。

于 2016-04-27T02:15:06.703 に答える