我一直试图找出导致我的计算机崩溃的 GLSL 着色器的确切原因。我正在运行带有 NVIDIA GeForce 9400M 的 Mac OS X 10.8.2。着色器渲染正确,但偶尔会导致我的计算机崩溃,在显示器上(包括渲染窗口之外)绘制黑色区域,直到计算机变得无响应。
glGetError
在着色器编译期间,我没有收到任何错误,也没有收到任何错误。uniform mat4
当我从顶点着色器(例如模型视图矩阵或阴影矩阵之一)中删除 a 时,似乎不再发生崩溃。然而根据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;
}
我将非常感谢任何帮助追踪此错误的原因。谢谢!