2013-03-28 1 views
0

저는 유니폼이 들어있는 OpenGL ES 쉐이더를 가지고 있습니다. 조각 쉐이더에서 유니폼에 대해 몇 가지 수학을 수행합니다. 셰이더 컴파일러는 일반적으로 유니폼에서 이러한 표현식을 최적화하여 모든 픽셀 대신에 한 번 발생하게합니까? 아니면 셰이더 밖에서 계산을 수행하고 결과를 전달해야합니까?OpenGL 쉐이더 컴파일러가 유니폼에서 표현식을 최적화 할 수 있습니까?

uniform vec2 u_a; 
uniform vec2 u_b; 
uniform vec2 u_c; 

그리고 나는 그 점 중 일부 벡터를 계산 :

vec2 v0 = u_c - u_a; 
vec2 v1 = u_b - u_a; 

내가 만약 궁금

특히, 내가있어 세 균일 내가 쉐이더에 전달하고있어 좌표 셰이더 컴파일러는 렌더링마다 한 번 발생하거나 셰이더 외부에서 이러한 값을 계산하여 추가 유니폼으로 전달해야하는 경우이를 최적화 할 수 있습니다. 물론, 최적화를 위해서는 (GPU가 CPU보다 모든 픽셀에서 더 빠르게 수행 할 수 있기 때문에) 특정 상황에서 차이를 찾기 위해 실제로 측정해야하지만, 셰이더 컴파일러의 범위가 어느 정도인지에 관심이 있습니다 이와 같은 최적화가 일반적입니다.

Android/iPhone 기기의 쉐이더 컴파일러가 다르게 동작하거나 다른 GLSL 버전이 차이점을 보이는 경우 보너스 포인트가 필요합니다.

답변

1

컴파일러가이를 최적화 할 수 있습니까? 예, 가능합니다. 이 맞습니까? 아마도 객체를 렌더링하기 시작할 때 상당한 오버 헤드가 필요하기 때문입니다 (셰이더에 대해 미리 계산할 수있는 모든 것을 미리 계산해야합니다).

관련 문제