2011-08-31 2 views
2

파워 VR은 lowp 벡터의 요소를 스위 즐링OpenGL ES 2.0에서 정확히 무엇이 swizzling을 구성합니까? (파워 VR SGX 특별히.)

이 비싸고 피해야한다 말한다.

정확히 swizzling이란 무엇입니까?

color.brg // This fits the definition I'm familiar with. 

그러나 vec3(color.b, color.r, color.g), 또는 vec3(color)에 대한 , 색상는 vec4이 때?

하나의 구성 요소에 액세스하거나 수정하면 흔들림이 발생합니까? 나는 그렇게 생각하지 않을 것이다.하지만 그렇지 않다면, 수동으로 몇 가지 할당 작업을 수행하여 혼란에 빠질 수있다. 나는 그 일을하는 데 문제가 없지만, swizzle 표기법없이 코드를 작성하는 것만으로도 더 빠른 속도로 동일한 효과를 얻을 수 있다면 나에게 마술처럼 보입니다.

답변

3

GLSL 사양에 따르면 "swizzle masks"는 벡터 유형의 구성 요소 필드 선택기로 정의됩니다. .brg.rgba 또는 .b과 같이 대칭 마스크입니다. 그들 모두는 혼란스러워한다.

PowerVR이 말하는 것은 무엇입니까? 어쩌면 .rgb은 동일한 순서로 구성 요소를 선택하기 때문에 문제가되지 않을 수 있습니다. 아니면 그렇지 않을 수도 있습니다.

+0

감사합니다. 나는 'GLSL specification + "swizzle masks"를 검색하여 귀하의 정보를 예제로 되풀이했습니다. 배열 표기법에 대해 아무 것도 보지 못했습니다. 색상 [1], 그래도. 그게 으스스하지 않니? – Jessy

+0

오늘 PVRUniSCo 편집기를 사용해 보았는데, 어림짐작의 도움이 될 것 같습니다. – Jessy

2

lowp 벡터의 성분을 스위핑하는 것은 비용이 많이 들며, 을 피해야합니다.

lowp 벡터는 채널당 8 비트 부동입니다. Powervr에 대해서는 확실하지 않지만 일반적으로 플로팅 32 비트 레지스터 (또는 아키텍처에 따라 16 비트)간에 이동 데이터를 전송하는 것이 더 효율적입니다. 별도의 마스킹/이동 명령어가 필요 없기 때문에 플로팅 8 비트와 대비됩니다. 거의 GPU 메모리가 이러한 방식으로 할당됩니다.

정확히 swizzling이란 무엇입니까? 간단한 단어에서

,

스위 즐은 어떤 소스 (또는 소스의 조합)의 채널 가야 지시 대상

예를 들어 어떤 채널 :

vec3 dest.rgb = vec3(src1.r, src2.r, src3.r); 

이동합니다 SRC1 .r 채널을 dest.r 채널로, src2.r 채널을 dest.g 채널로, src3.r 채널을 dest.b 채널로.

스위 즐을 사용하면 GPU가 하드웨어에서이를 지원하기 때문에 채널을 수동으로 이동하는 것보다 효율적입니다. (일부 GPU 컴파일러가이를 감지하고 이동을 최적화 할 수도 있습니다).

관련 문제