2011-08-14 11 views
3

このコードがフォルトSEGている理由私はうまくいかないことができます。セグメンテーションフォールト()

AxesMarker::AxesMarker(float size) 
    : size_(size), vbo_vertices_(0), vbo_elements_(0) 
{ 
    Vertex vertices[6] = { 
     Vertex(Color4f::RED, Vector3f::ZERO, Vector3f::ZERO), 
     Vertex(Color4f::RED, Vector3f::ZERO, Vector3f(size_, 0.0f, 0.0f)), 
     Vertex(Color4f::BLUE, Vector3f::ZERO, Vector3f::ZERO), 
     Vertex(Color4f::BLUE, Vector3f::ZERO, Vector3f(0.0f, size_, 0.0f)), 
     Vertex(Color4f::GREEN, Vector3f::ZERO, Vector3f::ZERO), 
     Vertex(Color4f::GREEN, Vector3f::ZERO, Vector3f(0.0f, size_, 0.0f)) }; 

    GLuint elements[6] = { 0, 1, 2, 3, 4, 5 }; 

    fprintf(stderr, "sizeof(vertices): %d, sizeof(Vertex): %d", (int) sizeof(vertices), (int) sizeof(Vertex)); 

    /* create buffers */ 
    glGenBuffers(1, &vbo_vertices_); 
    glGenBuffers(1, &vbo_elements_); 

    /* bind buffers */ 
    glBindBuffer(GL_ARRAY_BUFFER, vbo_vertices_); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo_elements_); 

    /* buffer data */ 
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); 
    glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(elements), elements, GL_STATIC_DRAW); 

    /* unbind buffers */ 
    glBindBuffer(GL_ARRAY_BUFFER, 0); 
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); 
} 

は警告なしでコンパイルしますが、)glBufferData(の最初の呼び出し時にフォルトSEGているように見えます。 必要に応じてさらにコードを投稿することができますが、私はGLに十分に精通しておらず、何が関係しているかを知ることができません。 ありがとう!


GLfloat vertices[60] = { 
    1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 
    1.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 
    0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 
    0.0f, 1.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 
    0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 
    0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f }; 

同じワンセグ障害をもたらします。

答えて

4

Vertexクラスは普通の古いデータ型ですか?それにはvtableもあるという意味の仮想関数はありますか?プレーンな浮動小数点数の配列を使ってこのコードを書き直すことができますか?(glBufferDataへの呼び出しをテストするだけです)私が知ることから、あなたはglBufferDataを正しく使用しているように見えますが、もう一度私は何かを見逃したかもしれません。

EDIT: このコードを呼び出す前に、OpenGLコンテキストが完全に初期化されていることを確認しましたか?これはグローバルオブジェクトですか?それはコンストラクタがmainの前に呼び出される可能性があるからですか?

+0

こんにちは...ユニ、リースです。 –

+0

彼らは私がそれを試みるすべての構造体です。 –

+0

ああ、これはリアルタイムのものです。私はそれほど助けがたいほどの努力をやめています。 :) –

関連する問題