문제

glDrawElements ()를 사용할 때 비린내 오류가 발생합니다. 나는 간단한 프리미티브 (주로 사각형)를 텍스트의 그림 등을 속도 등으로 렌더링하려고하지만, glDrawElements () 호출 할 때 전체 화면이 한 프레임 정도로 검은 색 (내 창 영역이 아님)을 깜박입니다. 다음 프레임은 이전과 동일한 "Windows 색상"으로 돌아갑니다. 그래서 그것은 몇 초 동안 깜박 거리고 메시지 상자에 말한다.

The NVIDIA OpenGL Driver encountered an unrecoverable error
and must close this application.

Error 12

GlDrawElements ()를 호출하기 전에 재설정해야 할 GL에 대한 설정이 있습니까? 나는 그것이 매달려있는 GlenableClientState ()가 아니라는 것을 알고 있습니다. 나는 그것을 확인했습니다 (나는 그 중 하나를 가지고 있었지만 GldrawElements ()가 대신 추락했습니다).

생각해보십시오. 거의 백 버퍼 오류처럼 보입니다 ... 시도해 볼에 대한 아이디어가 있습니까?

도움이 되었습니까?

해결책

분명히 VBO 모드와 VA 모드를 혼합하고 있습니다. 이것은 완벽하게 가능하지만주의해서 사용해야합니다.

전화 할 때 :

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

이것은 다음에 당신이 무언가를 렌더링 할 때 glDrawElements(..., ..., ..., x), x를 인덱스 데이터의 포인터로 사용하고 정점 데이터에서 Glvertexpointer 포인트에 대한 마지막 호출을 사용합니다.

만약 너라면 ~하지 않다 현재 VBO 및 IBO를 풀고 (위의 두 개의 Glbindbuffer 호출과 함께), 이는 동일한 glDrawElements로 렌더링 할 때 X가 지수 데이터의 오프셋으로 사용한다는 것을 의미합니다. IBO에서, 및 정점 데이터의 오프셋으로 glvertexpointer 로의 마지막 호출 VBO에서.

x 및 glvertexpointer의 값에 따라 오프셋이 바운드를 벗어나거나 기본 데이터가 잘못된 유형 (NAN)이므로 드라이버 충돌을 일으킬 수 있습니다.

따라서 질문에 답하기 위해 VBO 모드로 그리고 VA 모드로 그리는 후 :

  1. 현재 VBO를 풀어주십시오
  2. 현재 IBO를 풀어주십시오
  3. 오른쪽 정점 주소를 지정하십시오 glVertexPointer
  4. 올바른 지수 주소를 지정하십시오 glDrawElements

그리고 괜찮을 것입니다.

다른 팁

바! 그것을 발견. 내가했을 때

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);

깜박 거리는+충돌이 중지되기 전에. 이것이 예상되는 행동입니까? 시간과 공간을 낭비해서 죄송합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top