2013-02-27 14 views
1

Я пытался точно определить причину создания шейдера GLSL, который разбивает мой компьютер. Я запускаю Mac OS X 10.8.2 с NVIDIA GeForce 9400M. Шейдер корректно отображает, но иногда может разбивать мой компьютер, рисуя области черного над дисплеем (в том числе вне окна рендеринга), пока компьютер не перестанет реагировать.GLSL vertex shader crashes компьютер

Я не получаю ошибок от 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; 
} 

я бы очень признателен за любую помощь в отслеживании причины этой ошибки. Благодаря!

+0

Единственный способ, который я испытал грохнуть такого рода с GLSL, если вы не перевязывали буфер в той или иной атрибут вершины и стоит двойной проверки. Вы также можете найти удачу с tryin gDEBugger http://www.gremedy.com/download.php – Crog

+0

Я дважды проверял, и мои вершинные буферы и атрибуты выглядят правильно связанными. К сожалению, gDEBugger недоступен в этой версии Mac OS X, но я пробовал OpenGL Profiler. Трудность состоит в том, что моя система немедленно блокируется, когда возникает ошибка. Я пробовал почти одинаковые шейдеры, но без теневых матриц и координат, и они никогда не разбивались. –

+0

Это похоже на сложный вопрос: вы пробовали glGetShaderInfoLog и glGetProgramInfoLog для проверки каких-либо предупреждений. это также может быть аналогичным вопросом: http://news.softpedia.com/news/OS-X-10-8-2-Broken-NVIDIA-Drivers-Causing-Pixelmator-to-Crash-312907.shtml – Crog

ответ

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/

+0

Пока проблема драйвера NVIDIA в 10.8.2 кажется наиболее правдоподобной причиной. Я собираюсь оставить вопрос без ответа, пока я смотрю в него больше. Спасибо за вашу помощь! –

Смежные вопросы