SIGSEGV(シグナルSIGSEGV:アドレスアクセス保護(フォールトアドレス:0xef13d664))
http://www.songho.ca/opengl/gl_vbo.html#update
が、私は何かが欠けていますかどうかわからない:
は、私は、多かれ少なかれ、このウェブサイトの例を踏襲しました。初期化時にVBOを作成しましたが、問題なくオブジェクトを描画できます。創造のコードが行く:その後、
void SubObject3D::CreateVBO(VBOInfo &vboInfoIn) {
// m_vboIds[0] - used to store vertex attribute data
// m_vboIds[l] - used to store element indices
glGenBuffers(2, vboInfoIn.vboIds);
// Let the buffer all dynamic for morphing
glBindBuffer(GL_ARRAY_BUFFER, vboInfoIn.vboIds[0]);
glBufferData(GL_ARRAY_BUFFER,
(GLsizeiptr) (vboInfoIn.vertexStride * vboInfoIn.verticesCount),
vboInfoIn.pVertices, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vboInfoIn.vboIds[1]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER,
(GLsizeiptr) (sizeof(GLushort) * vboInfoIn.indicesCount),
vboInfoIn.pIndices, GL_STATIC_DRAW);
}
struct VBOInfo {
VBOInfo() {
memset(this, 0x00, sizeof(VBOInfo));
vboIds[0] = 0xdeadbeef;
vboIds[1] = 0xdeadbeef;
}
// VertexBufferObject Ids
GLuint vboIds[2];
// Points to the source data
GLfloat *pVertices; // Pointer of original data
GLuint verticesCount;
GLushort *pIndices; // Pointer of original data
GLuint indicesCount;
GLint vertexStride;
};
後、私のような私の頂点ポインタのホールドを取得しようとしたレンダリングループ中:
// I stored the information at creation time here:
VBOInfo mVBOGeometryInfo;
//later I call here to get the pointer
GLfloat *SubObject3D::MapVBO() {
GLfloat *pVertices = nullptr;
glBindBuffer(GL_ARRAY_BUFFER, mVBOGeometryInfo.vboIds[0]);
GLsizeiptr length = (GLsizeiptr) (mVBOGeometryInfo.vertexStride *
mVBOGeometryInfo.verticesCount);
pVertices = (GLfloat *) glMapBufferRange(
GL_ARRAY_BUFFER, 0,
length,
GL_MAP_WRITE_BIT | GL_MAP_INVALIDATE_BUFFER_BIT
);
if (pVertices == nullptr) {
LOGE ("Could not map VBO");
}
return pVertices;
}
それはglMapBufferRangeで右に墜落しました。
これはNDKを使用するアンドロイドアプリケーションです。ハードウェアはSamsung S6の携帯電話です。
thx!
ES 3.0のコンテキストを作成しましたか?他のES 3.xの機能を正常に使用できますか? –
SubObject3D :: MapVBOが実行されているときにSubObject3D :: CreateVBOを実行すると、verticesCount、vertexStride、およびvboIdsが同じであることを確認できますか? – Columbo
@Columboデータまではすべて正しいです。 vboのID、頂点のサイズ、およびストライドは正確で有効です。また、マップ関数を呼び出さないと、オブジェクトを問題なくレンダリングできます。私はコードまで何かを見逃していますか? – gmmo