게임 엔진을 개발 중이며 최신 (셰이더 모델 4+) 하드웨어에서만 작동합니다. 나는 그것이 끝날 무렵에는 그렇게 불합리한 요구 사항이 아니라고 생각합니다.
내 질문은 현대 그래픽 카드에서 한 번에 몇 개의 텍스처를 바인딩 할 수 있습니까? 16이면 충분합니다. 대부분의 최신 그래픽 카드가이 수의 텍스처를 지원할 수 있습니까?
내 GTX 460은 32를 지원하는 것으로 보이지만 대부분의 최신 비디오 카드를 대표하는지 잘 모르겠습니다.
게임 엔진을 개발 중이며 최신 (셰이더 모델 4+) 하드웨어에서만 작동합니다. 나는 그것이 끝날 무렵에는 그렇게 불합리한 요구 사항이 아니라고 생각합니다.
내 질문은 현대 그래픽 카드에서 한 번에 몇 개의 텍스처를 바인딩 할 수 있습니까? 16이면 충분합니다. 대부분의 최신 그래픽 카드가이 수의 텍스처를 지원할 수 있습니까?
내 GTX 460은 32를 지원하는 것으로 보이지만 대부분의 최신 비디오 카드를 대표하는지 잘 모르겠습니다.
답변:
OpenGL에 바인딩 할 수있는 텍스처의 수는 32 또는 16 이 아닙니다 . 그것은 당신이 얻는 것이 아닙니다 glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);
. 이 함수 는 프래그먼트 셰이더 가 액세스 할 수있는 텍스처 수를 검색합니다 .
참고로, 각 셰이더에는 사용할 수있는 텍스처 수에 대한 자체 제한 이 있습니다 . 그러나 사용할 수있는 총 텍스처 수도 있습니다. 이것은 (OpenGL에서)에 의해 정의됩니다 GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS
.
따라서 스테이지 당 텍스처와 텍스처 총계의 두 가지 한계가 있습니다.
OpenGL 3.x는 스테이지 당 제한의 최소 수를 16으로 정의하므로 하드웨어는 스테이지 당 16 개 미만의 텍스처를 가질 수 없습니다. 더 높은 한계를 가질 수 있지만 16 이상을 얻는다는 것을 알고 있습니다. 3.x는 텍스처에 대한 최소 바인딩 수를 48로 정의합니다. AKA : 16 * 3 단계. 마찬가지로 GL 4.x는 숫자를 단계 당 16 텍스처, 총 텍스처 수 (예 : 계산 쉐이더를 포함하여 16 * 6 단계)로 정의합니다.
다시, 이것들은 최소 숫자입니다. 하드웨어는 다양 할 수 있습니다.
특정 하드웨어의 경우 DX10 급 하드웨어가이 숫자와 일치 할 것으로 예상 할 수 있습니다. DX11 클래스 하드웨어에는 약간의 차이가 있습니다. NVIDIA (GeForce 4xx +) 및 고급 AMD 칩 (일명 GCN 코어)은 스테이지 당 16 개 이상을 가질 수 있습니다.
32는 현재 바인딩 할 수있는 최대 텍스처 수입니다. 내가 알 수있는 한 8800 시리즈조차도 32 텍스처 유닛을 가지고 있습니다.
내가 아는 한, openGL 4.x 지원을 위해서는 Fermi 또는 최신 엔비디아 카드 (또는 해당 amd 카드)가 필요합니다. 상위 모델에는 모두 32 단위가있는 반면 가장 낮은 엔드 카드 (예 : GT 430) 그러나 AMD 사양 시트를 보면 80 또는 128 텍스처 단위와 같은 숫자를 나열하지만 세대를 통해 일정하게 유지되는 것처럼 보이는 32 색 ROP 단위를 나열합니다.
반면에 GTX 480은 60 개의 텍스처 장치와 48 개의 ROP 장치로 구성되어 있으며, 430과 같은 저가형 카드에는 16 개의 텍스처 장치와 4 개의 ROP 초기화 장치 만 있다고합니다. 그래서 전체적으로 나는 실제로 그중 하나가 실제로 찾고있는 숫자인지 확신하지 못합니다.
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &texture_units);
하지만 고정되지 않은 함수 파이프 라인 렌더링에 사용할 수있는 텍스처 단위 수를로 확인할 수 있으므로 다양한 하드웨어에 액세스 할 수 있으면 직접 확인할 수 있습니다.
편집 :이 사이트는 모든 종류의 비디오 카드의보고 된 openGL 기능을 비교하여 필요한 수를 제공해야합니다. http://feedback.wildfiregames.com/report/opengl/device/GeForce%20GTX%20580
추신 : AMD와 엔비디아는 최근 "바인드 텍스쳐"(amd와 다른 이름을 가짐)를 도입했습니다.이 텍스트를 textutre 단위에 바인딩하지 않고 많은 수의 텍스처를 사용할 수 있습니다. 이는 현재 openGL에서만 사용할 수 있습니다.