2013-02-27 164 views
1

我一直在試圖找出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

回答

1

這聽起來像在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