본문 바로가기

Graphics Note

enabled, but unused vertex attribute array

셰이더를 사용하여 버텍스를 그릴때 glEnableVertexAttribArray를 통해서 어떤 어트리뷰트를 그릴지, 그리고 glVertexAttribPointer를 통해서 어떤 형태로 그 어트리뷰트가 적재되어있는지 명시하게된다.

 

그 후 glDrawArrays / glDrawElements 등의 api를 통해 버퍼의 데이터를 그리게 되는데, 일반적으로 enable 된 어트리뷰트에 데이터가 없더라도 셰이더에서 사용하지만 않는다면 크게 문제되지 않고 넘어간다.

 

그런데 nVidia의 드라이버는 조금 다르다. glEnableVertexAttribArray로 enable한 어트리뷰트라면 아무리 셰이더에서 사용하지 않은 어트리뷰트라도 access violation error를 뿜어낸다.

 

glDisableVertexAttribArray를 통해 명시적 disable 해줘야 한다.

 

아무리 들여다봐도 문제가 없는데 에러가 나서 심히 당황했다.

다행히 같은 문제를 겪은 사람의 글을 빨리 발견해서 해결했다.

 

참고: https://www.opengl.org/discussion_boards/showthread.php/180761-Shader-glDrawArrays-crash-only-on-nVidia-Win32

'Graphics Note' 카테고리의 다른 글

implementing EPA in 3D  (0) 2014.05.29
implementing GJK in 3D  (0) 2014.05.24
opengl의 스크린공간은 왼손좌표계이다.  (0) 2014.04.30
converting rotation quaternion into matrix, and vice versa  (0) 2014.04.21
rigid body collision 2  (0) 2014.04.21