본문 바로가기

Library/Computer Graphics

OpenGL에서 사용 가능한 최대 텍스처 유닛의 수 알아내기

OpenGL에서, GPU의 멀티 텍스처링(multi-texturing) 지원 정도는 어떻게 알아볼 수 있을까? 국내에서 출판된 OpenGL 프로그래밍 가이드(일명 레드북)는 1.4 버전 기준이기 때문에, GL_MAX_TEXTURE_UNITS에 대한 내용만 언급되어 있을 것이다. GL_MAX_TEXTURE_UNITS를 사용해보면 황당하게 작은 값에 놀랄지도 모르겠다. 그러나, 그 값은 고정 파이프라인에서의 최대 텍스처 유닛 수를 알려주는 값이기 때문에, 잘못된 것이 아니다. 최악의 경우에는 겨우 2개 정도의 텍스처 유닛만 사용 가능할지도 모르지만, 고정 파이프라인 구조로 작성되는 3D 그래픽스 프로그램은 이제 없다.

OpenGL 2.0 이상의 구현은 고정 파이프라인 구조가 아니라 쉐이더를 사용하는 구조이며, 3.3 이후 버전의 코어 프로필에서는 고정 파이프라인 관련 함수들은 폐기 예정되어 있다. 따라서, 고정 파이프라인에서 사용 가능한 텍스처 유닛의 수보다는, 쉐이더에서 사용 가능한 최대 텍스처 유닛의 수가 중요하다. 이것은 다음과 같은 상태 변수를 사용하여 알아낼 수 있으며, 결과는 벤더의 OpenGL 구현에 의존적이다.


GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS :
OpenGL에서 접근 가능한 최대 텍스처 유닛의 수

GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS :
버텍스 쉐이더에서 저근 가능한 최대 텍스처 유닛의 수

GL_MAX_TEXTURE_IMAGE_UNITS :
프래그먼트 쉐이더에서 접근 가능한 최대 텍스처 유닛의 수


glGetIntegerv() 함수에 위의 값을 넣어서 호출하면 원하는 값을 얻을 수 있다.