2009-09-04 4 views
2

OpenGL ES 1.1은 약간 잘못되었을 경우 내 iPhone 프로그램을 중단시키는 것을 좋아합니다.OpenGL ES 충돌을 디버깅하는 방법은 무엇입니까?

일반적으로 glDrawArrays의 어딘가에서 스택에 여러 glDestroyContext 호출이 발생합니다.

보통 나는 사방에

{ 
    GLint iErr = glGetError(); 
    if (iErr != GL_NO_ERROR) 
    { 
    NSLog(@"GL error: %d (0x%x)", iErr, iErr); 
    } 
} 

를 삽입하여 문제를 양분하고있다.

그러나 때로는 충분하지 않습니다. 충돌 이유로 유용한 진단을받을 수있는 다른 방법이 있습니까?

답변

0

콘솔 출력에 오류 메시지가 표시됩니까? 단지 설명에서, 당신이 BAD_ACCESS 예외를 얻는 지 궁금합니다. 제 가정이 맞다면 잘못된 배열을 glVertexPointer, glColorPointer 또는 다른 관련 함수 중 하나에 전달한 것일 수 있습니다.

glDrawArrays으로 사망하고 다시는 돌아 오지 않는다고 가정하면 정확합니까? 즉, 프로그램이 이미 충돌했기 때문에 glDrawArrays 다음에 glGetError으로 전화 할 수있는 방법이 없습니다.

+0

추가 콘솔 메시지가 없습니다 (즉, 크래시 유형을 제외하고 일반적으로 액세스가 잘못됨). 일반적으로 잘못된 입력 데이터이거나 일부 상태를 사용하지 않도록 설정 한 것입니다. 그러나 무엇이 잘못되었는지를 찾는 데는 시간이 걸립니다. 보통 이진 검색에 의존해야합니다. : ( –

+0

당신이 버퍼보다 ​​많은 삼각형을 그리려는 것이 아닌지 확인하고 싶습니다. OpenGL이 그렇지 않아야하는 메모리에 들어가는 것처럼 들리 겠지만, 이것은 아마도 여러분이 꼭지점이 당신은 정말로 버퍼에 있습니다. –