Что именно составляет извращение в OpenGL ES 2.0? (PowerVR SGX специально.) - PullRequest
2 голосов
/ 31 августа 2011

PowerVR говорит:

Перемешивание компонентов низкочастотных векторов стоит дорого, и его следует избегать.

Что именно такое переворот?

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

Но как насчет vec3(color.b, color.r, color.g), или vec3(color), когда color является vec4?

Является ли доступ к одному компоненту или его изменение непростым делом?Я бы на самом деле так не думал, но если нет, то вы можете обойтись без труда, просто выполнив еще несколько операций присваивания вручную.У меня нет проблем с этим, но мне кажется волшебством, если бы вы могли получить тот же эффект на более высокой скорости, просто написав код без излишней нотации.

Ответы [ 2 ]

3 голосов
/ 31 августа 2011

В соответствии со спецификацией GLSL «маски Swizzle» определяются как селекторы полей компонента для векторных типов. .brg - это маска от пизды, как .rgba или .b. Все из них пьяные.

Что касается того, о чем говорит PowerVR, это их дело. Может быть, .rgb хорошо, так как он выбирает компоненты в том же порядке. Или, может быть, это не так.

2 голосов
/ 04 апреля 2014

Swizzling компоненты векторов 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 более эффективно, чем ручное перемещение каналов, поскольку графические процессоры поддерживают это аппаратно (опять же, некоторые компиляторы графических процессоров могут это обнаруживать и оптимизировать также и перемещения).

...