나는 안드로이드와 glMapBufferRange 다음과 같은 오류와 충돌 유지에 GLES 응용 프로그램에 대한 몇 가지 정점 변신하기 위해 노력하고 충돌 :glMapBufferRange 안드로이드 GLES 응용 프로그램에
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를 사용하는 안드로이드 응용 프로그램입니다. 하드웨어는 삼성 S6 폰입니다.
xx!
ES 3.0 컨텍스트를 만들었습니까? 다른 ES 3.x 기능을 성공적으로 사용할 수 있습니까? –
SubObject3D :: MapVBO가 실행될 때 SubObject3D :: CreateVBO가 실행될 때 verticesCount, vertexStride 및 vboIds가 동일하다는 것을 확인할 수 있습니까? – Columbo
@Columbo 데이터까지 모두 정확합니다. vbo ID, 정점 크기 및 보폭은 정확하고 유효합니다. 게다가 map 함수를 호출하지 않으면 객체를 아무런 문제없이 렌더링 할 수 있습니다. 나는 코드까지 뭔가를 놓쳤는가? – gmmo