2011-01-31 5 views
1

많은 생각을 해왔습니다. glBindTexture()로 약간 더 작은 텍스처를 전환하는 대신 거대한 텍스처를 전환하면 렌더링 속도가 느려 집니까? glBindTexture()가 사용될 때마다 GPU가 텍스처 데이터를 더 빠른 메모리 장소에 복사한다는 생각을했기 때문에 커다란 텍스처가 복사하는 데 더 오래 걸릴 것이라고 생각했습니다.OpenGL : 더 작은 텍스처 표면보다 더 큰 텍스처 표면이 더 좋거나 나쁩니 까?

하지만 이전에 애니메이션을 만들 때 많은 작은 텍스처를 사용했는데 일부 GFX 카드에서는 속도가 너무 느려졌지만 애니메이션 프레임을 단일 텍스처에 배치하면 성능이 크게 좋아졌습니다. 아직도, 나는 두 경우 모두에서 다른 GFX 카드에 성능 문제가 없었다.

그렇다면 항상 가능한 가장 큰 텍스처 표면 크기를 사용해야합니까? (만약 내가 그다지 비어있는 텍스쳐 공간을 낭비하지 않는다면).

답변

6

전환 텍스처가 비쌉니다. 일반적인 병목 현상은 캐시 압력이지만 때로는 텍스처도 GPU 메모리에서 스왑 아웃됩니다.

그러나 문제의 텍스처가 상주하고있는 경우, 즉 고속 GPU 메모리에있는 경우 텍스처 바인딩은 O (1), 즉 텍스처 크기에 독립적입니다. 따라서 항상 가능한 가장 큰 텍스처를 사용해야합니다. 키워드는 텍스처 아틀라스이며 일반적으로 성능 향상을위한 방법입니다.

+0

몇 가지 참고 자료를 제공해 주시겠습니까? 모든 텍스처에 대해 항상 동일한 시간이 걸릴 것으로 생각됩니다. – Rookie

+0

@rookie. 예를 들어 CUDA에서 텍스처 캐시 동작에 대해 문서화하려고 할 수 있습니다. 드라이버는 필요한 경우 텍스처 전체를 더 빠른 메모리로 이동하지 않습니다. 실제로 사용/샘플링 된 부품 만이 N 픽셀 크기의 2d 블록에서 GPU '텍스처 캐시'로 옮겨집니다. – rotoglup

관련 문제