2012-04-06 6 views
1

Zu Testzwecken versuche ich, die Position jedes Eckpunkts auf Null zu setzen. Aber wenn ich versuche, mehr als zwei Dimensionen zu ändern (und egal welche), stürzt der Shader still ab. Kann mir jemand sagen, was hier vor sich geht? Mein Code:GLSL: Das Ändern von mehr als zwei Vertex-Dimensionen führt zum Absturz des Shaders

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); 

Und mein Shader:

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); 
} 
+0

Was bedeutet "Shader stürzt ab"? Shader können nicht abstürzen; vielleicht meinst du, dass es undefiniertes Verhalten hat? – Luca

+0

Sorry, was ich damit meine ist, dass die iOS App (die auf einem iPhone 4S läuft) einfriert (ohne Stack Trace oder irgendetwas), aber ich gehe davon aus, dass es der Shader ist, der dafür verantwortlich ist. – Josh

+0

Könnten Sie Ihren gesamten C-Code posten? Da ist etwas mehr los als im Shader. –

Antwort

0

Vielleicht ist es, weil Sie vertexPosition als vec4 erklären, aber sie sind vorbei nur 3 float s pro Knoten in Ihrem C-Code? Ich denke, der Teil über Ihre temp Vektor ist ein Red Hering.

+0

einzugrenzen Leider nicht. Ich testete dies, indem ich den Shader änderte, um Vec3-Eingänge zu verwenden, aber es stürzt immer noch ab. :( – Josh

Verwandte Themen