Что делает оператор квадратных скобок в HLSL - PullRequest
1 голос
/ 10 февраля 2020

Я работаю над переносом нашего приложения с Windows на Linux, и мне нужно понять, что делает оператор [] в HLSL и как перенести его в GLSL.

У меня есть такой код this:

red = texture.Sample(sampler, uv)[x];

Функция примера должна возвращать значение в пикселях, верно? Это что-то вроде смещения?

1 Ответ

1 голос
/ 10 февраля 2020

[] - оператор является оператором выбора элемента массива и может также использоваться для доступа к вектору.

Эквивалентный код glsl

red = texture.Sample(sampler, uv)[x];

is

float red = texture(sampler, uv)[x];

texture возвращает значение типа vec4 (например, для sampler2D). Компоненты вектора могут быть доступны с помощью оператора индекса. Поскольку x является индексом, он должен быть переменной или константой с целочисленным типом данных. Вектор имеет 4 компонента (.x, .y, .z, .w соответственно .r, .g, .b, .a), поэтому значение x должно быть 0 , 1, 2 или 3.
texture(sampler, uv)[0] совпадает с texture(sampler, uv).r. Смотрите также GLSL- Swizzling .

...