2016-10-22 12 views
-1

私は現在、OpenGL Super Bible 7th editionを読んでいます。これは、メインのレンダリングループの前に実行されたクラスのメソッドであるSegfault on glNamedBufferStorage

void startup() { 
    static const float data[] = { 
     0.25f, -0.25f, 0.5f, 1.0f, 
     -0.25f, -0.25f, 0.5f, 1.0f, 
     0.25f, 0.25f, 0.5f, 1.0f, 
    }; 


    glGenVertexArrays(1, &m_VAO); 
    glBindVertexArray(m_VAO); 

    glGenBuffers(1, &m_VBO); 
    glBindBuffer(GL_ARRAY_BUFFER, m_VBO); 
    printf("Size of data[]: %lu bytes\n", sizeof(data)); 
    glNamedBufferStorage(m_VBO, sizeof(data), data, GL_DYNAMIC_STORAGE_BIT); 
    glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), NULL); 
    glEnableVertexAttribArray(0); 

} 

:その上で、私はこのようないくつかの簡単なコードを書きました。

問題は、このコードがglNamedBufferStorageにsegfaultを生成することです。

私はgdbでデバッグしようとしましたが、なぜsegfaultが発生するのかは分かりません。 dataのサイズに問題があるかどうかを理解しようとしました(したがってprintf sizeof)。しかし、それは大丈夫と思われる。私はまた別のフラグを使用しようとしました - 無駄にも。

また、付属のソースコードにgrep -Rもありましたが、使用例が見つかりませんでした。

システム://www.opengl:Ubuntuは、打ち鳴らす++

+0

でのみサポート.org/wiki/OpenGL_Loading_Library)あなたは使っていますか?あなたの実装はOpenGL 4.5をサポートしていますか? –

+0

@NicolBolas私は本のフレームワークを使用しています。これはgl3w + glfwを使用しています。正しく動作するようです。正しくコンパイルして実行し、以前の例をいくつか(VBOを作成せずに)うまく働いた。 – poetryofruins

答えて

1

printf("OpenGL version %s\n", glGetString(GL_VERSION));

であなたのOpenGLのバージョンを確認glNamedBufferStorageは何[OpenGLのロードライブラリ](HTTPSのOpenGL 4.5

+1

あなたは正しいです!私は実際にこの質問を投稿したときにドライバをアップグレードしていました。私の古いドライバが4.4までしかサポートされていなかったようです(4.5もサポートしていると感じました!)、新しいドライバは4.5です。今すぐglNamedBufferStorageが正しく動作しています。 – poetryofruins