Что именно составляет вихри в OpenGL ES 2.0? (PowerVR SGX специально.)
PowerVR говорит
Перемешивание компонентов низкокачественных векторов стоит дорого, и его следует избегать.
Что именно извергает?
color.brg // This fits the definition I'm familiar with.
Но что насчет vec3(color.b, color.r, color.g)
, или же vec3(color)
когда цвет vec4?
Доступ к одному компоненту или его изменение представляют собой мошенничество? Я бы на самом деле так не думал, но если нет, то вы можете обойтись без излишеств, просто выполнив еще несколько операций присваивания вручную. У меня нет проблем с этим, но для меня это кажется волшебством, если бы вы могли получить тот же эффект на более высокой скорости, просто написав код без излишней нотации.
2 ответа
В соответствии со спецификацией GLSL "маски Swizzle" определяются как селекторы полей компонента для векторных типов. .brg
это маска изгиба, как есть .rgba
или же .b
, Все из них пьяные.
Что касается того, о чем говорит PowerVR, это их дело. Может быть .rgb
хорошо, так как он выбирает компоненты в том же порядке. Или, может быть, это не так.
Перемешивание компонентов низкокачественных векторов стоит дорого, и его следует избегать.
векторы lowp являются 8-битными плавающими на канал, я не уверен насчет Powervr, но, вообще говоря, передача движущихся данных между плавающим 32-битным регистром (или 16-битным, опять же в зависимости от архитектуры) более эффективна в отличие от плавающего 8-битного, потому что это не требует дополнительных инструкций маскировки / перемещения. В основном память GPU выравнивается таким образом.
Что именно извергает?
Проще говоря,
Swizzle говорит, что какой канал источника (или комбинация источников) должен идти в какой канал назначения
пример:
vec3 dest.rgb = vec3(src1.r, src2.r, src3.r);
переместит канал src1.r в канал dest.r, канал src2.r в канал dest.g и канал src3.r в канал dest.b.
использование swizzle более эффективно, чем перемещение каналов вручную, поскольку графические процессоры поддерживают это аппаратно (опять же, некоторые компиляторы GPU могут это обнаруживать и оптимизировать также и перемещения).