GLSL顶点着色器崩溃了计算机

时间:2013-02-27 00:15:16

标签: opengl glsl

我一直在努力查明导致计算机崩溃的GLSL着色器的确切原因。我正在使用NVIDIA GeForce 9400M运行Mac OS X 10.8.2。着色器正确渲染但偶尔会使计算机崩溃,在显示器上绘制黑色区域(包括渲染窗口外部),直到计算机无响应。

我从glGetError没有收到任何错误,并且在着色器编译期间没有错误。当我从顶点着色器中移除uniform mat4(例如模型视图矩阵或其中一个阴影矩阵)时,似乎不再发生崩溃。然而根据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;
}

我非常感谢有助于追踪此错误的原因。谢谢!

1 个答案:

答案 0 :(得分:1)

这听起来像是10.8.2中的一个问题,在这里也可以看到:http://news.softpedia.com/news/OS-X-10-8-2-Broken-NVIDIA-Drivers-Causing-Pixelmator-to-Crash-312907.shtml 应该有一个Max OS 10.8.3,希望能解决这个问题。

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