2012-03-13 26 views
0

glDrawArraysのEXC_BAD_ACCESS信号に関する他の記事をいくつか見てきましたが、どれも問題にはまったく合致しませんでした。glVertexAttrib3fを使ってglDrawArraysにクラッシュする

glEnableVertexAttribArray(mAttributes.position); 
glEnableVertexAttribArray(mAttributes.color); 

GLsizei stride = sizeof(Vertex); 
const GLvoid* pPos = &mVertices2[0].mPos.x; 
const GLvoid* pColors = &mVertices2[0].mColor.r; 

glVertexAttribPointer(mAttributes.position, 2, GL_FLOAT, GL_FALSE, stride, pPos); 
glVertexAttribPointer(mAttributes.color, 3, GL_FLOAT, GL_FALSE, stride, pColors); 

glDrawArrays(GL_LINE_STRIP, 0, mVertices2.size()); 

しかし、私は一定の属性を持つ色に書き込むように見えることはできません。

次のコードは動作します。これはglDrawArraysでクラッシュします:

glEnableVertexAttribArray(mAttributes.position); 
glEnableVertexAttribArray(mAttributes.color); 

glVertexAttribPointer(mAttributes.position, 2, GL_FLOAT, GL_FALSE, stride, pPos); 
glVertexAttrib3f(mAttributes.color, 1.0f, 0.0f, 0.0f); 

glDrawArrays(GL_LINE_STRIP, 0, mVertices2.size()); // <-- EXC_BAD_ACCESS because of the line above 

誰に知っていますか? glDrawElementsの定数頂点属性呼び出しのみ使用できますか?

答えて

5

OpenGLにVertexAttribArrayを使用するように指示していますが、配列要素を指定しないでください。したがって、OpenGLは、割り当てられていない、または正しく埋められていないメモリを読み込もうとします。特定の配列にデータを入力しない場合は、必ず

を入力してください。ちょうどglVertexAttrib3f()を使用することは大丈夫です。しかし、配列ではないので、配列を使用する必要はありません。

+0

ああ、もちろん、それは私によって右に滑った。素早く答えてくれてありがとう、私はこの1つを見つめて、どこにもいなくなっていた。 –

+0

Yuppi .... !!!!私はOpenGLで非常に深く働いています。 – Siten

関連する問題