1

コンピューターをクラッシュさせるGLSLシェーダーの正確な原因を特定しようとしています。Mac OSX10.8.2をNVIDIAGeForce9400Mで実行しています。シェーダーは正しくレンダリングされますが、コンピューターが応答しなくなるまで、ディスプレイ上(レンダリングウィンドウの外側を含む)に黒い領域を描画して、コンピューターをクラッシュさせることがあります。

glGetErrorシェーダーのコンパイルからエラーが発生したり、エラーが発生したりすることはありません。uniform mat4モデルビューマトリックスやシャドウマトリックスの1つなどの頂点シェーダーからを削除しても、クラッシュは発生しなくなったようです。しかし、GL_MAX_VERTEX_UNIFORM_COMPONENTS私のグラフィックカードによると、4096の頂点均一コンポーネントをサポートしています。

頂点シェーダーは次のとおりです。

#version 120

attribute vec3 position;
attribute vec2 texcoord;
attribute vec3 normal;

varying vec2 v_texcoord;
varying vec3 v_normal;
varying vec3 v_halfVec;
varying vec4 v_shadowcoord0;
varying vec4 v_shadowcoord1;
varying vec4 v_shadowcoord2;
varying vec4 v_shadowcoord3;

uniform mat4 mv;
uniform mat3 nmv;
uniform mat4 mvp;
uniform mat4 shadowMatrix0;
uniform mat4 shadowMatrix1;
uniform mat4 shadowMatrix2;
uniform mat4 shadowMatrix3;
uniform vec3 lightDir;

void main()
{
    vec4 p4 = vec4(position, 1.0);

    v_texcoord = texcoord;
    v_normal = normalize(nmv * normal);

    vec3 vertexPos = vec3(mv * p4);
    vec3 eyeDir = normalize(-vertexPos);
    v_halfVec = normalize(eyeDir + lightDir);

    v_shadowcoord0 = shadowMatrix0 * p4;
    v_shadowcoord1 = shadowMatrix1 * p4;
    v_shadowcoord2 = shadowMatrix2 * p4;
    v_shadowcoord3 = shadowMatrix3 * p4;

    gl_Position = mvp * p4;
}

このバグの原因を突き止めるのに助けていただければ幸いです。ありがとう!

4

1 に答える 1

1

10.8.2の問題のように聞こえますが、これもここで確認されています:http: //news.softpedia.com/news/OS-X-10-8-2-Broken-NVIDIA-Drivers-Causing-Pixelmator-to- Crash-312907.shtml うまくいけばこれを修正するMaxOS10.8.3があるはずです。

更新:http ://www.cultofmac.com/214775/apple-releases-yet-another-10-8-3-os-x-beta-to-developers/

于 2013-02-27T08:39:03.897 に答える