2014-01-25 2 views
1

나는 다음과 같은 코드 (아이폰에 OpenglES2.0)이 있습니다glGenBuffers 버퍼 이름으로 0xffffffff를 반환

glGenBuffers(1, &tmp->m_vbo); 

tmp-> m_vbo 서명되지 않은 INT이다.

대부분의 경우 tmp-> m_vbo가 유효하며 모든 것이 완벽하지만 때때로 반환 값은 0xffffffff이며 처음 사용하면 vbo가 glDrawElements에서 충돌합니다.

누구든지이 문제의 원인을 알고 있습니까?

감사합니다.

답변

1

원인을 발견했습니다. 문맥에 뭔가있는 것으로 보입니다. 두 스레드,로드 스레드 및 주 스레드, 각각의 컨텍스트 (공유 데이터)와 함께 사용됩니다. 나는 (현재 SetContext 호출을 피하기 위해) 필요한 컨텍스트를 설정하기 전에 확인한 "현재 컨텍스트"값을 가졌고, "컨텍스트"값이 올바른 컨텍스트로 설정되었지만 EAGLView의 실제 컨텍스트가 아닙니다. 수정 사항은 EAGLView의 currentContext를 자체 값 대신 테스트 용으로 사용하는 것이 었습니다.

-1

이 반환 값은 -1입니다. glGenBuffers 뒤에 GL 오류를 확인해야합니다.

+0

나는 이것이 내가 가장 먼저 확인한 것이다. (공정히하기 위해서 각 gl 호출 후에 gl 에러를 검사하는 매크로가 있고, 디버그에서 활성화되어있다.) 에러가 전혀 없다. 또한 프로필 도구 인 OpenglES 드라이버와 OpenglES Analyzer를 모두 입력했는데 관련 오류는 발견되지 않았습니다. –

+0

** - 1 : ** 우선,'glGenBuffers (...)'에는 반환 값이 없습니다. 둘째, * unsigned * 정수를 생성합니다. ** - 1 **을 반환 할 수있는 방법은 없습니다. –

0

나는 동일한 문제가있었습니다! 스위프트에서

: 코드에서이 문제를 장소 내 문제를 해결하기 직전 updateContext() 기능을 사용

func updateContext() { 
    if glContext != EAGLContext.currentContext() { 
     EAGLContext.setCurrentContext(glContext) 
    } 
} 

.

관련 문제