GLSL顶点着色器崩溃电脑

问题描述:

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

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

我将不胜感激在跟踪这个bug的原因任何帮助。谢谢!

+0

,我已经经历过这种与GLSL的崩溃的唯一方法是,如果你还没有绑定缓冲到不同的顶点属性和价值双重检查。你也可以尝试tryde gDEBugger http://www.gremedy.com/download.php – Crog 2013-02-27 00:28:33

+0

我仔细检查,我的顶点缓冲区和属性似乎是正确绑定。不幸的是,gDEBugger在此版本的Mac OS X上不可用,但我尝试过OpenGL Profiler。困难在于我的系统在发生错误时立即锁定。我已经尝试了几乎相同的着色器,但没有阴影矩阵和坐标,并且它们从未崩溃。 – 2013-02-27 01:03:10

+0

这看起来很棘手,你试过glGetShaderInfoLog和glGetProgramInfoLog来检查是否有任何警告。它也可能是一个类似的问题:http://news.softpedia.com/news/OS-X-10-8-2-Broken-NVIDIA-Drivers-Causing-Pixelmator-to-Crash-312907.shtml – Crog 2013-02-27 08:37:59

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

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

+0

到目前为止,10.8.2中的NVIDIA驱动程序问题似乎是最可信的原因。我会留下这个问题,因为我没有回答,而我更多地考虑这个问题。感谢你的帮助! – 2013-02-27 10:00:01