iOS 앱의 프래그먼트 셰이더에서 몇 가지 기본 최적화를 수행하고 있습니다. gl_FragColor
에 몇 가지 색상 중 하나를 지정하고 싶습니다. 첫 번째 시도는 삼항 연산자를 사용했습니다. 이 시뮬레이터와 아이폰 5C 모두에서 제대로 일을 표시iOS에서의 조각 셰이더 동작
lowp float maxC = max(color.r, max(color.g, color.b);
lowp float minC = min(color.r, min(color.g, color.b);
gl_FragColor.rgb = (maxC > 1.0 ? result0 : (minC < 0.0 ? result1 : result2));
은 내가 덜 분기와 논리 위를 복제 할 수 있는지 확인하기 위해 mix
및 step
의 조합으로 삼항 연산자를 대체하기 위해 노력했다. 불행하게도,이 시뮬레이터에서가 아니라 iOS 장비에서 작동 :
lowp float step0 = step(0.0, minC);
lowp float step1 = step(1.001, maxC);
lowp vec3 mix0 = mix(result1, result2, step0);
gl_FragColor.rgb = mix(mix0, result0, step1);
는 특히, 시뮬레이터에서 제대로 그려 화면의 일부 흰색 영역이 장치에 검은 색 영역으로 잘못 그려집니다. 다른 모든 것은 괜찮아 보입니다.
위의 step
과 mix
의 조합이 3 진수 연산자를 사용하는 접근법과 동일한 결과를 재현하지 못하는 이유는 무엇입니까?