Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl GLSL顶点着色器使计算机崩溃_Opengl_Glsl - Fatal编程技术网

Opengl GLSL顶点着色器使计算机崩溃

Opengl GLSL顶点着色器使计算机崩溃,opengl,glsl,Opengl,Glsl,我一直在努力找出导致GLSL着色器崩溃的确切原因。我用NVIDIA GeForce 9400M运行MacOSX10.8.2。着色器可以正确渲染,但偶尔会使我的计算机崩溃,在显示器上绘制黑色区域(包括渲染窗口外部),直到计算机没有响应 我没有收到来自glGetError的错误,在着色器编译期间也没有收到错误。从顶点着色器(例如模型视图矩阵或其中一个阴影矩阵)中删除统一mat4时,崩溃似乎不再发生。然而根据GL\u MAX\u VERTEX\u UNIFORM\u COMPONENTS我的图形卡支持

我一直在努力找出导致GLSL着色器崩溃的确切原因。我用NVIDIA GeForce 9400M运行MacOSX10.8.2。着色器可以正确渲染,但偶尔会使我的计算机崩溃,在显示器上绘制黑色区域(包括渲染窗口外部),直到计算机没有响应

我没有收到来自
glGetError
的错误,在着色器编译期间也没有收到错误。从顶点着色器(例如模型视图矩阵或其中一个阴影矩阵)中删除
统一mat4
时,崩溃似乎不再发生。然而根据
GL\u MAX\u VERTEX\u UNIFORM\u COMPONENTS
我的图形卡支持4096个VERTEX UNIFORM组件

以下是顶点着色器:

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

我将非常感谢任何帮助,在追踪这个错误的原因。谢谢

这听起来像是10.8.2中的一个问题,在这里也可以看到: 应该有一个Max OS 10.8.3,有望解决这个问题


更新:

这听起来像是10.8.2中的一个问题,在这里也可以看到: 应该有一个Max OS 10.8.3,有望解决这个问题


更新:

我在使用GLSL时遇到这种崩溃的唯一方法是,如果您没有将缓冲区绑定到可变顶点属性,并且值得仔细检查。您也可能会发现,我仔细检查了tryin gDEBugger,我的顶点缓冲区和属性似乎已正确绑定。不幸的是,gDEBugger在这个版本的MacOSX上不可用,但我已经尝试了OpenGL Profiler。困难在于,当错误发生时,我的系统会立即锁定。我尝试过几乎相同的着色器,但没有阴影矩阵和坐标,它们从未崩溃。这看起来很棘手,您是否尝试过glGetShaderInfoLog和glGetProgramInfoLog来检查任何警告。这可能也是一个类似的问题:着色器和程序信息日志都是空的,我正在研究英伟达驱动程序的问题。我经历过的只有GLSL的这种类型的唯一方法是,如果你没有将缓冲区绑定到一个不同的顶点属性,并且值得双重检查。您也可能会发现,我仔细检查了tryin gDEBugger,我的顶点缓冲区和属性似乎已正确绑定。不幸的是,gDEBugger在这个版本的MacOSX上不可用,但我已经尝试了OpenGL Profiler。困难在于,当错误发生时,我的系统会立即锁定。我尝试过几乎相同的着色器,但没有阴影矩阵和坐标,它们从未崩溃。这看起来很棘手,您是否尝试过glGetShaderInfoLog和glGetProgramInfoLog来检查任何警告。英伟达和程序信息日志都是空的,我正在研究英伟达驱动程序的问题。到目前为止,在Nodia驱动程序中,在10. 82.似乎是最合理的原因。我将把这个问题留作未解之谜,而我将更深入地研究它。谢谢你的帮助!到目前为止,在10. 82.英伟达的驱动程序似乎是最合理的原因。我将把这个问题留作未解之谜,而我将更深入地研究它。谢谢你的帮助!