일반적으로 한 번에 몇 개의 텍스처를 바인딩 할 수 있습니까?


23

게임 엔진을 개발 중이며 최신 (셰이더 모델 4+) 하드웨어에서만 작동합니다. 나는 그것이 끝날 무렵에는 그렇게 불합리한 요구 사항이 아니라고 생각합니다.

내 질문은 현대 그래픽 카드에서 한 번에 몇 개의 텍스처를 바인딩 할 수 있습니까? 16이면 충분합니다. 대부분의 최신 그래픽 카드가이 수의 텍스처를 지원할 수 있습니까?

내 GTX 460은 32를 지원하는 것으로 보이지만 대부분의 최신 비디오 카드를 대표하는지 잘 모르겠습니다.


어떤 렌더링 API를 사용하고 있습니까?
Adam

2
OpenGL은 물론 :)
Avi

답변:


53

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 개 이상을 가질 수 있습니다.


2
이것이 이것이 받아 들여진 대답이기를 바랍니다. 그것은 5 분의 무의미한 독서를 구해 줬을 것이다.
Fibbles

3

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에서만 사용할 수 있습니다.


1
그 다음에 진정한 답은 'hw가 제공 할 수있는만큼'입니다. 또는 다르게 말하면 모든 것이 최대한 빨리 실행되어야합니다. (그리고 거의 모든 분야를 다루는 OpenGL에서).
Darkwings 2016 년

@Darkwings 하드웨어가 처리 할 수있는 것보다 많은 텍스처를 바인딩하면 일반적으로 오류가 발생하거나 드라이버 시간이 초과됩니다. 나는 또한 잘못 읽었다. 그는 셰이더 모델 4+가 OpenGL 4+가 아니라고 말했다. 첫 번째 DX10 카드 (X2900 및 8800 카드 제품군)를 보면 16 개 이상의 텍스처 장치가있는 것 같습니다.

매개 변수화가 가능해야한다는 사실을 강조했습니다. 게임이 오래된 카드를 크롤링하더라도 하드 코딩 된 것이 아니라 '추천 된 요구 사항'이어야합니다.
Darkwings 2016 년

4
-1 :이 답변이 잘못되었습니다. 이유에 대한 내 대답을 참조하십시오 (여기에서 설명하기에는 너무 깁니다).
Nicol Bolas 2016 년

1
즉시 명백하지 않은 것. GL_TEXTURE n GLenum을 사용하는 사람은 거의 없습니다 . 대신 GL_TEXTURE0 + n을 사용하십시오. 여기서 n 은 바인딩 할 슬롯입니다. GLenum이 32 개 슬롯까지만 올라가지 만 OpenGL이 32 개로 제한한다는 의미는 아닙니다. 스펙이 순차적임을 보장합니다. 또한 DSA를 사용하지 않는 경우 바인드-작성 / 수정을위한 슬롯을 예약하여 작성 / 수정에 사용 된 상태가 도면에 사용 된 상태와의 상호 작용을 줄 이도록 할 수 있습니다.
Maximus Minimus
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.