2012-06-22 4 views
28

모든 프래그먼트에 대해 일정하지만 모든 프레임에서 변경되는 일부 매개 변수가 CPU에서 GPU로 전달됩니다 (GLSL ES 1.1을 사용하고 있습니다). 그러한 값에 유니폼이나 속성을 사용해야합니까? 속성은 버텍스마다 다를 수 있으므로 전체 프레임에서 일정한 값에 대한 속성을 사용하면 비효율적입니다. 그러나 유니폼은 "비교적 드물게"바뀌는 값에 대한 것으로, 모든 프레임에서 유니폼을 바꾸는 것이 비효율적 일 수 있음을 알았습니다.GLSL ES의 유니폼 대 속성

하드웨어 측면에서 보면 iPhone 4S를 최적화하는 데 가장 관심이 있습니다.

+0

일부 수치를 나열 할 수 있습니까? – Luca

+1

Rost and Licea-Kane의 "OpenGL Shading Language"및 Munchi, Ginsburg 및 Shreiner의 "OpenGL ES 2.0" (분명히 전자는 ES에만 국한된 것이 아닙니다) –

답변

32

나는 제복을 투표했습니다.

유니폼은 각 버텍스/조각에 대한 상수입니다. 속성에 대한 유니폼을 선호하는

다른 이유는 다음과 같습니다

  • 사용 가능한 슬롯의 수 (당신이 16 개 특성을 허용하지만, 더 많은 유니폼된다)
  • GLSL 컴파일러가 처리 균일 한 값을 최적화 할 수 있습니다
  • 긴 버텍스 배열에서 적은 데이터 스트리밍, 버텍스 당 더 적은 애트리뷰트는 더 나은 성능을 의미합니다.
  • 균일화는 버텍스 쉐이더와 프래그먼트 셰이더간에 다양한 속성을 정의하지 않고도 조각 쉐이더에서 사용할 수 있습니다.
  • 유니폼은 구조와 배열이 될 수 있으므로 더 읽기 쉬운 코드가 될 수 있습니다.