かなり古いOpenGLプロジェクトを更新しています。だから私は頂点配列からVBOに移動しようとしていますが、私はトレースできないアクセス違反例外があります。OpenGL 3.0:VBOによるアクセス違反例外
だから私は、私は私のクラスのコンストラクタで生成VBOとIBOを使用しています:
if (glewIsSupported("GL_VERSION_3_0")) {
glGenBuffers(2, bufferIds);
}
(glewInit()がすでに呼び出された)
を様々なレンダリングオブジェクトは以下のように定義されています
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
// VBO
glBindBuffer(GL_ARRAY_BUFFER, bufferIds[VBO]);
glBufferData(GL_ARRAY_BUFFER, sizeof(mVertexRenderBuffer), mVertexRenderBuffer, GL_STREAM_DRAW);
glVertexPointer(3, GL_FLOAT, sizeof(RenderBufferVertexElement), BUFFER_OFFSET(offsetof(RenderBufferVertexElement,position)));
glNormalPointer(GL_FLOAT, sizeof(RenderBufferVertexElement), BUFFER_OFFSET(offsetof(RenderBufferVertexElement,normal)));
// IBO
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bufferIds[IBO]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(mIndexRenderBuffer), mIndexRenderBuffer, GL_STREAM_DRAW);
textures.front()->setClientActive();
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, sizeof(RenderBufferVertexElement), BUFFER_OFFSET(offsetof(RenderBufferVertexElement,texCoord)));
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, textures.front()->textureId);
[...]
glDrawElements(GL_TRIANGLES, numElements, GL_UNSIGNED_INT, BUFFER_OFFSET(0));
glDisableClientState(...);
glDisable(GL_TEXTURE_2D);
:私は私の描画機能で
struct RenderBufferVertexElement
{
NxVec3 position;
NxVec3 normal;
float texCoord[2];
};
// The rendering buffers
RenderBufferVertexElement* mVertexRenderBuffer;
NxU32* mIndexRenderBuffer;
// Buffer Objects
enum {
VBO,
IBO
};
GLuint bufferIds[2];
その後
glVertexPointerへの古いスタイルの呼び出しですべてうまく動作しましたが、今ではプログラムがアクセス違反の例外でクラッシュします。それはどこから来るのだろうか?
おかげ
私はglBufferData()を初期化中にのみ呼び出そうとしましたが、成功しませんでした。 – Guillaume