2

いくつかのパーティクルをシェーダー ストレージ バッファーに格納したいと考えています。glMapBufferRange() 関数を使用してパーティクル値を設定していますが、この関数が呼び出されるたびに常にアクセス違反エラーが発生します。

glGenBuffers(1, &bufferID);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, bufferID);
glBufferData(GL_SHADER_STORAGE_BUFFER, numParticles*sizeof(Particle), NULL ,GL_STATIC_DRAW);


struct Particle* particles = (struct Particle*) glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, numParticles*sizeof(Particle), GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT);

for(int i = 0; i < numParticles; ++i){
    //.. Do something with particles..//
}

glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);

代わりに glMapBuffer() を使用すると、すべて正常に動作します。glfw で OpenGL コンテキストを作成し、glew を適切に初期化したことを確認しました。

4

1 に答える 1

1

わかりました、私はついに問題を見つけました。GLFW-Window クラスを設計したとき、GLFW_OPENGL_FORWARD_COMPAT ヒントを使用して、前方互換性のある OpenGL コンテキストを作成しました。なぜこれを行ったのかわかりませんが、このヒントを使用しないと、すべてうまくいきます。:)

于 2012-10-03T12:09:28.107 に答える