GLSL:更改两个以上的顶点尺寸会导致着色器崩溃

时间:2012-04-06 23:03:09

标签: ios memory glsl opengl-es-2.0 shader

出于测试目的,我试图将每个顶点的位置设置为零。但是,如果我尝试更改两个以上的维度(并且无关紧要),则着色器会无声地崩溃。谁能让我知道这里发生了什么?我的代码:

static const float  vertices[12] = {
                -0.5,-0.5, 0.0,
                0.5,-0.5, 0.0,
                -0.5, 0.5, 0.0,
                0.5, 0.5, 0.0,
            };
glVertexAttribPointer(vertexHandle, 3, GL_FLOAT, GL_FALSE, 0, (const GLvoid*)vertices);
glEnableVertexAttribArray(vertexHandle);            
glUniformMatrix4fv(mvpMatrixHandle, 1, GL_FALSE, (const GLfloat*)&modelViewProjection.data[0]);
glDrawArrays(GL_POINTS, 0, 4);

我的着色器:

attribute vec4 vertexPosition;
uniform mat4 modelViewProjectionMatrix;

void main()
{
    vec4 temp = vertexPosition;
    temp.x = 0.0;
    temp.y = 0.0;
    temp.z = 0.0; // Can set any 2 dimensions (e.g. x and y or y and z)
                  // to zero, but not all three or the shader crashes.

    gl_Position = modelViewProjectionMatrix * vec4(temp.xyz, 1.0);
}

1 个答案:

答案 0 :(得分:0)

也许是因为您将vertexPosition声明为vec4,但您的C代码中每个顶点只传递3 float个?我认为关于你temp向量的部分是一个红色的鲱鱼。