Встроенные функции

Godot поддерживает большое количество встроенных функций, примерно соответствующих спецификации GLSL ES 3.0.

Примечание

Следующие псевдонимы типов используются только в документации для сокращения количества повторяющихся объявлений функций. Каждый из них может ссылаться на любой из нескольких реальных типов.

псевдоним

фактические типы

псевдоним документации glsl

vec_type

float, vec2, vec3, или vec4

genType

vec_int_type

int, ivec2, ivec3, или ivec4

genIType

vec_uint_type

uint, uvec2, uvec3, или uvec4

genUType

vec_bool_type

bool, bvec2, bvec3, или bvec4

genBType

mat_type

mat2, mat3, или mat4

mat

gvec4_type

vec4, ivec4, или uvec4

gvec4

gsampler2D

sampler2D, isampler2D, или uSampler2D

gsampler2D

gsampler2DArray

sampler2DArray, isampler2DArray, или uSampler2DArray

gsampler2DArray

gsampler3D

sampler3D, isampler3D, или uSampler3D

gsampler3D

Если какой-либо из них указан для нескольких параметров, все они должны быть одного типа, если не указано иное.

Примечание

Многие функции, принимающие один или несколько векторов или матриц, выполняют описанную функцию над каждым компонентом вектора/матрицы. Вот несколько примеров:

Операция

Эквивалентная скалярная операция

sqrt(vec2(4, 64))

vec2(sqrt(4), sqrt(64))

min(vec2(3, 4), 1)

vec2(min(3, 1), min(4, 1))

min(vec3(1, 2, 3),vec3(5, 1, 3))

vec3(min(1, 5), min(2, 1), min(3, 3))

pow(vec3(3, 8, 5 ), 2)

vec3(pow(3, 2), pow(8, 2), pow(5, 2))

pow(vec3(3, 8, 5), vec3(1, 2, 4))

vec3(pow(3, 1), pow(8, 2), pow(5, 4))

В разделе 5.10 "Операции с векторами и матрицами" Спецификации языка GLSL говорится следующее:

За некоторыми исключениями, операции выполняются покомпонентно. Обычно, когда оператор работает с вектором или матрицей, он действует независимо над каждым компонентом вектора или матрицы, покомпонентно. [...] Исключениями являются умножение матрицы на вектор, умножение вектора на матрицу и умножение матрицы на матрицу. Эти операции не выполняются покомпонентно, а выполняют корректное линейное алгебраическое умножение.

Эти описания функций адаптированы и изменены из официальной документации OpenGL, первоначально опубликованной Khronos Group под лицензией Open Publication License. Каждое описание функции ссылается на соответствующую официальную документацию OpenGL. Историю изменений этой страницы можно найти на GitHub.


Тригонометрические функции

Тип возврата

Функция

Описание / Возвращаемое значение

vec_type

radians(vec_type градусы)

Преобразование градусов в радианы.

vec_type

degrees(vec_type радианы)

Преобразование радиан в градусы.

vec_type

sin(vec_type x)

Синус.

vec_type

cos(vec_type x)

Косинус.

vec_type

tan(vec_type x)

Тангенс.

vec_type

asin(vec_type x)

Арк-синус.

vec_type

acos(vec_type x)

Арк-косинус.

vec_type
vec_type
atan(vec_type y_over_x)
atan(vec_type y, vec_type x)

Арк-тангенс.

vec_type

sinh(vec_type x)

Гиперболический синус.

vec_type

cosh(vec_type x)

Гиперболический косинус.

vec_type

tanh(vec_type x)

Гиперболический тангенс.

vec_type

asinh(vec_type x)

Дугогиперболический синус.

vec_type

acosh(vec_type x)

Арк-гиперболический косинус.

vec_type

atanh(vec_type x)

Арк-гиперболический тангенс.

Описания тригонометрических функций

vec_type radians(vec_type градусы) 🔗

Component-wise Function.

Преобразует величину, указанную в градусах, в радианы по формуле градусы * (ПИ / 180).

парам градусов:

Величина в градусах, которую необходимо перевести в радианы.

return:

Входные градусы преобразуются в радианы.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/radians.xhtml


vec_type degrees(vec_type radians) 🔗

Component-wise Function.

Преобразует величину, указанную в радианах, в градусы по формуле радианы * (180 / ПИ)

параметр радианы:

Величина в радианах, которую необходимо перевести в градусы.

return:

Входные данные радианы преобразованы в градусы.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/degrees.xhtml


vec_type sin(vec_type угол) 🔗

Component-wise Function.

Возвращает тригонометрический синус угла.

угол параметра:

Величина в радианах, синус которой вычисляется.

return:

Синус угла.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/sin.xhtml


vec_type cos(vec_type угол) 🔗

Component-wise Function.

Возвращает тригонометрический косинус угла.

угол параметра:

Величина в радианах, косинус которой вычисляется.

return:

Косинус угла.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/cos.xhtml


vec_type tan(vec_type угол) 🔗

Component-wise Function.

Возвращает тригонометрический тангенс angle.

угол параметра:

Величина в радианах, тангенс которой вычисляется.

return:

Тангенс angle.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/tan.xhtml


vec_type asin(vec_type x) 🔗

Component-wise Function.

Арксинус, или арксинус. Вычисляет угол, синус которого равен x и находится в диапазоне [-PI/2, PI/2]. Результат не определён, если x < -1 или x > 1.

параметр x:

Значение, арксинус которого требуется вернуть.

return:

Угол, тригонометрический синус которого равен x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/asin.xhtml


vec_type acos(vec_type x) 🔗

Component-wise Function.

Арккосинус, или обратный косинус. Вычисляет угол, косинус которого равен x и находится в диапазоне [0, PI].

Результат не определен, если x < -1 или x > 1.

параметр x:

Значение, арк-косинус которого требуется вернуть.

return:

Угол, тригонометрический косинус которого равен x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/acos.xhtml


vec_type atan(vec_type y_over_x) 🔗

Component-wise Function.

Вычисляет арктангенс по значению тангенса y/x.

Примечание

Из-за неоднозначности знака функция не может точно определить, в какой квадрант попадает угол, только по значению его тангенса. Чтобы узнать квадрант, используйте atan(vec_type y, vec_type x).

параметр y_over_x:

Дробь, арк-тангенс которой требуется вернуть.

return:

Тригонометрический арктангенс y_over_x находится в диапазоне [-PI/2, PI/2].

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/atan.xhtml


vec_type atan(vec_type y, vec_type x) 🔗

Component-wise Function.

Вычисляет арктангенс по числителю и знаменателю. Знаки y и x используются для определения квадранта, в котором находится угол. Результат не определён, если x == 0.

Эквивалентно atan2() в GDScript.

параметр y:

Числитель дроби, арк-тангенс которой требуется вернуть.

параметр x:

Знаменатель дроби, арк-тангенс которой требуется вернуть.

return:

Тригонометрический арктангенс y/x находится в диапазоне [-PI, PI].

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/atan.xhtml


vec_type sinh(vec_type x) 🔗

Component-wise Function.

Вычисляет гиперболический синус с помощью (e^x - e^-x)/2.

параметр x:

Значение, гиперболический синус которого требуется вернуть.

return:

Гиперболический синус x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/sinh.xhtml


vec_type cosh(vec_type x) 🔗

Component-wise Function.

Вычисляет гиперболический косинус с помощью (e^x + e^-x)/2.

параметр x:

Значение, гиперболический косинус которого требуется вернуть.

return:

Гиперболический косинус x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/cosh.xhtml


vec_type tanh(vec_type x) 🔗

Component-wise Function.

Вычисляет гиперболический тангенс с помощью sinh(x)/cosh(x).

параметр x:

Значение, гиперболический тангенс которого требуется вернуть.

return:

Гиперболический тангенс x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/tanh.xhtml


vec_type asinh(vec_type x) 🔗

Component-wise Function.

Вычисляет арк-гиперболический синус x, или обратный ему sinh.

параметр x:

Значение, гиперболический синус дуги которого требуется вернуть.

return:

Арк-синус гиперболического числа x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/asinh.xhtml


vec_type acosh(vec_type x) 🔗

Component-wise Function.

Вычисляет арк-гиперболический косинус x или неотрицательный обратный косинус cosh. Результат не определён, если x < 1.

параметр x:

Значение, арк-гиперболический косинус которого требуется вернуть.

return:

Арк-гиперболический косинус x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/acosh.xhtml


vec_type atanh(vec_type x) 🔗

Component-wise Function.

Вычисляет аркгиперболический тангенс x или обратный ему tanh. Результат не определён, если abs(x) > 1.

параметр x:

Значение, дугу арк-гиперболический тангенс для возврата.

return:

Арк-гиперболический тангенс x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/atanh.xhtml


Экспоненциальные и математические функции

Тип возврата

Функция

Описание / Возвращаемое значение

vec_type

pow(vec_type x, vec_type y)

Power (не определена, если x < 0 или если x == 0 и y <= 0).

vec_type

exp(vec_type x)

Экспонента.

vec_type

exp2(vec_type x)

Экспонента по основанию 2.

vec_type

log(vec_type x)

Натуральный (по основанию e) логарифм.

vec_type

log2(vec_type x)

Логарифм по основанию 2.

vec_type

sqrt(vec_type x)

Квадратный корень.

vec_type

inversesqrt(vec_type x)

Обратный квадратный корень.

vec_type
vec_int_type
abs(vec_type x)
abs(vec_int_type x)

Абсолютное значение (возвращает положительное значение если отрицательно).

vec_type

sign(vec_type x)

Возвращает 1.0, если положительно, -1.0, если отрицательно, 0.0 в противном случае.

vec_int_type

sign(vec_int_type x)

Возвращает 1, если положительно, -1, если отрицательно, 0 в противном случае.

vec_type

floor(vec_type x)

Округляет до целого числа, указанного ниже.

vec_type

round(vec_type x)

Округляет до ближайшего целого числа.

vec_type

roundEven(vec_type x)

Округляет до ближайшего четного целого числа.

vec_type

trunc(vec_type x)

Усечение (trunc(123.56) = 123).

vec_type

ceil(vec_type x)

Округляет до указанного выше целого числа.

vec_type

fract(vec_type x)

Дробная часть (возвращает x - floor(x)).

vec_type
vec_type
mod(vec_type x, vec_type y)
mod(vec_type x, float y)

Модуль (остаток от деления).

vec_type

modf(vec_type x, out vec_type i)

Дробь от x, с i в качестве целой части.

vec_type
vec_type
vec_int_type
vec_int_type
vec_uint_type
vec_uint_type
min(vec_type a, vec_type b)
min(vec_type a, float b)
min(vec_int_type a, vec_int_type b)
min(vec_int_type a, int b)
min(vec_uint_type a, vec_uint_type b)
min(vec_uint_type a, uint b)

Наименьшее значение между a и b.

vec_type
vec_type
vec_int_type
vec_int_type
vec_uint_type
vec_uint_type
max(vec_type a, vec_type b)
max(vec_type a, float b)
max(vec_int_type a, vec_int_type b)
max(vec_int_type a, int b)
max(vec_uint_type a, vec_uint_type b)
max(vec_uint_type a, uint b)

Наибольшее значение между a и b.

vec_type
vec_type
vec_int_type
vec_int_type
vec_uint_type
vec_uint_type
clamp(vec_type x, vec_type min, vec_type max)
clamp(vec_type x, float min, float max)
clamp(vec_int_type x, vec_int_type min, vec_int_type max)
clamp(vec_int_type x, int min, int max)
clamp(vec_uint_type x, vec_uint_type min, vec_uint_type max)
clamp(vec_uint_type x, uint min, uint max)

Зажимы x между min и max (включительно).

vec_type
vec_type
vec_type
mix(vec_type a, vec_type b, vec_type c)
mix(vec_type a, vec_type b, float c)
mix(vec_type a, vec_type b, vec_bool_type c)

Линейная интерполяция между a и b по c.

vec_type

fma(vec_type a, vec_type b, vec_type c)

Объединенная операция умножения-сложения: (a * b + c)

vec_type
vec_type
step(vec_type a, vec_type b)
step(float a, vec_type b)

b < a ? 0.0 : 1.0

vec_type
vec_type
smoothstep(vec_type a, vec_type b, vec_type c)
smoothstep(float a, float b, vec_type c)

Эрмитова интерполяция между a и b по c.

vec_bool_type

isnan(vec_type x)

Возвращает true, если скалярная или векторная компонента является NaN.

vec_bool_type

isinf(vec_type x)

Возвращает true, если скалярный или векторный компонент является INF.

vec_int_type

floatBitsToInt(vec_type x)

Побитовое копирование float в int, без преобразования.

vec_uint_type

floatBitsToUint(vec_type x)

Побитовое копирование float в uint, без преобразования.

vec_type

intBitsToFloat(vec_int_type x)

Копирование битов int в float, без преобразования.

vec_type

uintBitsToFloat(vec_uint_type x)

Побитовое копирование uint в float, без преобразования.

Описания экспоненциальных и математических функций

vec_type pow(vec_type x, vec_type y) 🔗

Component-wise Function.

Возводит x в степень y.

Результат не определен, если x < 0 или если x == 0 и y <= 0.

параметр x:

Значение, которое необходимо возвести в степень y.

параметр y:

Степень, в которую будет возведено x.

return:

Значение x, возведенное в степень y.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/pow.xhtml


vec_type exp(vec_type x) 🔗

Component-wise Function.

Возводит e в степень x, или в натуральную степень.

Эквивалентно pow(e, x).

параметр x:

Значение, которое необходимо возвести в степень.

return:

Естественное возведение в степень x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/exp.xhtml


vec_type exp2(vec_type x) 🔗

Component-wise Function.

Возводит 2 в степень x.

Эквивалентно pow(2.0, x).

параметр x:

Значение степени, в которую будет возведено 2.

return:

2, возведенное в степень x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/exp2.xhtml


vec_type log(vec_type x) 🔗

Component-wise Function.

Возвращает натуральный логарифм числа x, то есть значение y, удовлетворяющее условию x == pow(e, y). Результат не определён, если x <= 0.

параметр x:

Значение, от которого следует взять натуральный логарифм.

return:

Натуральный логарифм x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/log.xhtml


vec_type log2(vec_type x) 🔗

Component-wise Function.

Возвращает двоичный логарифм числа x, то есть значение y, удовлетворяющее условию x == pow(2, y). Результат не определён, если x <= 0.

параметр x:

Значение, из которого следует взять логарифм по основанию 2.

return:

Логарифм числа x по основанию 2.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/log2.xhtml


vec_type sqrt(vec_type x) 🔗

Component-wise Function.

Возвращает квадратный корень числа x. Результат не определён, если x < 0.

параметр x:

Значение, из которого следует извлечь квадратный корень.

return:

Квадратный корень из x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/sqrt.xhtml


vec_type inversesqrt(vec_type x) 🔗

Component-wise Function.

Возвращает значение, обратное квадратному корню x, или 1.0 / sqrt(x). Результат не определён, если x <= 0.

параметр x:

Значение, из которого следует извлечь обратный квадратный корень.

return:

Обратное значение квадратного корня x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/inversesqrt.xhtml


vec_type abs(vec_type x) 🔗

vec_int_type abs(vec_int_type x) 🔗

Component-wise Function.

Возвращает абсолютное значение x. Возвращает x, если x положительно, в противном случае возвращает -1 * x.

параметр x:

Значение, абсолютное значение которого необходимо вернуть.

return:

Абсолютное значение x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/abs.xhtml


vec_type sign(vec_type x) 🔗

vec_int_type sign(vec_int_type x) 🔗

Component-wise Function.

Возвращает -1, если x < 0, 0, если x == 0, и 1, если x > 0.

параметр x:

Значение, из которого извлекается знак.

return:

Знак x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/sign.xhtml


vec_type floor(vec_type x) 🔗

Component-wise Function.

Возвращает значение, равное ближайшему целому числу, которое меньше или равно x.

параметр x:

Округление значения вниз.

return:

Ближайшее целое число, меньшее или равное x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/floor.xhtml


vec_type round(vec_type x) 🔗

Component-wise Function.

Округляет x до ближайшего целого числа.

Примечание

Округление значений с дробной частью 0.5 зависит от реализации. Это включает в себя возможность того, что round(x) вернёт то же значение, что и roundEven(x) для всех значений x.

параметр x:

Значение, которое необходимо округлить.

return:

Округленное значение.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/round.xhtml


vec_type roundEven(vec_type x) 🔗

Component-wise Function.

Округляет x до ближайшего целого числа. Значение с дробной частью 0.5 всегда округляется до ближайшего четного целого числа. Например, 3.5 и 4.5 округляются до 4.0.

параметр x:

Значение, которое необходимо округлить.

return:

Округленное значение.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/roundEven.xhtml


vec_type trunc(vec_type x) 🔗

Component-wise Function.

Усекает x. Возвращает значение, равное ближайшему целому числу к x, абсолютное значение которого не превышает абсолютное значение x.

параметр x:

Значение для оценки.

return:

Усеченное значение.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/trunc.xhtml


vec_type ceil(vec_type x) 🔗

Component-wise Function.

Возвращает значение, равное ближайшему целому числу, которое больше или равно x.

параметр x:

Значение для оценки.

return:

Предельно допустимое значение.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/ceil.xhtml


vec_type fract(vec_type x) 🔗

Component-wise Function.

Возвращает дробную часть x.

Рассчитывается как x - floor(x).

параметр x:

Значение для оценки.

return:

Дробная часть x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/fract.xhtml


vec_type mod(vec_type x, vec_type y) 🔗

vec_type mod(vec_type x, float y) 🔗

Component-wise Function.

Возвращает значение x по модулю y. Иногда его также называют остатком.

Вычисляется как x - y * floor(x/y).

параметр x:

Значение для оценки.

return:

Значение x по модулю y.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/mod.xhtml


vec_type modf(vec_type x, вне vec_type i) 🔗

Component-wise Function.

Разделяет число с плавающей точкой x на целую и дробную части.

Функция возвращает дробную часть числа. Целая часть (в виде числа с плавающей точкой) возвращается в выходном параметре i.

параметр x:

Значение, которое необходимо отделить.

параметр out i:

Переменная, которая получает целую часть x.

return:

Дробная часть числа.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/modf.xhtml


vec_type min(vec_type a, vec_type b) 🔗

vec_type min(vec_type a, float b) 🔗

vec_int_type min(vec_int_type a, vec_int_type b) 🔗

vec_int_type min(vec_int_type a, int b) 🔗

vec_uint_type min(vec_uint_type a, vec_uint_type b) 🔗

vec_uint_type min(vec_uint_type a, uint b) 🔗

Component-wise Function.

Возвращает минимум двух значений a и b.

Возвращает b, если b < a, в противном случае возвращает a.

параметр а:

Первое значение для сравнения.

параметр b:

Второе значение для сравнения.

return:

Минимальное значение.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/min.xhtml


vec_type max(vec_type a, vec_type b) 🔗

vec_type max(vec_type a, float b) 🔗

vec_uint_type max(vec_uint_type a, vec_uint_type b) 🔗

vec_uint_type max(vec_uint_type a, uint b) 🔗

vec_int_type max(vec_int_type a, vec_int_type b) 🔗

vec_int_type max(vec_int_type a, int b) 🔗

Component-wise Function.

Возвращает максимальное из двух значений a и b.

Возвращает b, если b > a, в противном случае возвращает a.

параметр а:

Первое значение для сравнения.

параметр b:

Второе значение для сравнения.

return:

Максимальное значение.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/max.xhtml


vec_type clamp(vec_type x, vec_type minVal, vec_type maxVal) 🔗

vec_type clamp(vec_type x, float minVal, float maxVal) 🔗

vec_int_type clamp(vec_int_type x, vec_int_type minVal, vec_int_type maxVal) 🔗

vec_int_type clamp(vec_int_type x, int minVal, int maxVal) 🔗

vec_uint_type clamp(vec_uint_type x, vec_uint_type minVal, vec_uint_type maxVal) 🔗

vec_uint_type clamp(vec_uint_type x, uint minVal, uint maxVal) 🔗

Component-wise Function.

Возвращает значение x, ограниченное диапазоном от minVal до maxVal.

Возвращаемое значение вычисляется как min(max(x, minVal), maxVal).

параметр x:

Значение, которое необходимо ограничить.

параметр minVal:

Нижняя граница диапазона, в котором ограничивается x.

параметр maxVal:

Верхний предел диапазона, в который следует ограничить x.

return:

Зафиксированное значение.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/clamp.xhtml


vec_type mix(vec_type a, vec_type b, vec_type c) 🔗

vec_type mix(vec_type a, vec_type b, float c) 🔗

Component-wise Function.

Выполняет линейную интерполяцию между a и b, используя c в качестве веса между ними.

Вычисляется как a * (1 - c) + b * c.

Эквивалентно lerp() в GDScript.

параметр а:

Начало диапазона, в котором следует интерполировать.

параметр b:

Конец диапазона, в котором следует выполнить интерполяцию.

параметр c:

Значение, используемое для интерполяции между a и b.

return:

Интерполированное значение.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/mix.xhtml


vec_type mix(vec_type a, vec_type b, vec_bool_type c) 🔗

Выбирает значение a или b на основе значения c. Если компонент c имеет значение "false", возвращается соответствующий компонент a. Если компонент c имеет значение "true", возвращается соответствующий компонент b. Невыбранные компоненты a и b могут быть недопустимыми значениями с плавающей запятой и не повлияют на результаты.

Если a, b и c являются векторными типами, то операция выполняется покомпонентно. т.е. mix(vec2(42, 314), vec2(9.8, 6e23), bvec2(true, false))) вернет vec2(9.8, 314).

параметр а:

Значение возвращается, когда c имеет значение false.

параметр b:

Значение возвращается, когда c равно true.

параметр c:

Значение, используемое для выбора между a и b.

return:

Интерполированное значение.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/mix.xhtml


vec_type fma(vec_type a, vec_type b, vec_type c) 🔗

Component-wise Function.

Выполняет, где это возможно, объединённую операцию умножения и сложения, возвращая a * b + c. В случаях, когда возвращаемое значение в конечном итоге используется переменной, объявленной как точная:

  • fma() считается одной операцией, тогда как выражение a * b + c, используемое переменной, объявленной как точная, считается двумя операциями.

  • Точность fma() может отличаться от точности выражения a * b + c.

  • fma() будет вычисляться с той же точностью, что и любой другой fma(), используемый точной переменной, давая инвариантные результаты для тех же входных значений a, b и c.

В противном случае, при отсутствии точного потребления, нет особых ограничений на количество операций или разницу в точности между fma() и выражением a * b + c.

параметр а:

Первое значение, которое необходимо умножить.

параметр b:

Второе значение, которое необходимо умножить.

параметр c:

Значение, которое необходимо добавить к результату.

return:

Значение a * b + c.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/fma.xhtml


vec_type step(vec_type a, vec_type b) 🔗

vec_type step(float a, vec_type b) 🔗

Component-wise Function.

Генерирует ступенчатую функцию путем сравнения "b" с "a".

Эквивалентно if (b < a) { return 0.0; } else { return 1.0; }. Для элемента "i" возвращаемого значения возвращается 0.0, если b[i] < a[i], и 1.0 в противном случае.

параметр а:

Местоположение края ступенчатой функции.

параметр b:

Значение, которое будет использоваться для генерации ступенчатой функции.

return:

0.0 или 1.0.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/step.xhtml


vec_type smoothstep(vec_type a, vec_type b, vec_type c) 🔗

vec_type smoothstep(float a, float b, vec_type c) 🔗

Component-wise Function.

Выполняет плавную интерполяцию Эрмита между 0 и 1 при a < c < b. Это полезно в случаях, когда требуется пороговая функция с плавным переходом.

Smoothstep (Плавный шаг) эквивалентен:

vec_type t;
t = clamp((c - a) / (b - a), 0.0, 1.0);
return t * t * (3.0 - 2.0 * t);

Результаты не определены, если a >= b.

параметр а:

Значение нижнего края функции Эрмита.

параметр b:

Значение верхнего края функции Эрмита.

параметр c:

Исходное значение для интерполяции.

return:

Интерполированное значение.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/smoothstep.xhtml


vec_bool_type isnan(vec_type x) 🔗

Component-wise Function.

Для каждого элемента i результата возвращает true, если x[i] является положительным или отрицательным числом с плавающей точкой NaN (не числом), и false в противном случае.

параметр x:

Значение для проверки на NaN.

return:

true или false.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/isnan.xhtml


vec_bool_type isinf(vec_type x) 🔗

Component-wise Function.

Для каждого элемента "i" результата возвращает true, если x[i] — положительное или отрицательное число с плавающей точкой, и "false" в противном случае.

параметр x:

Значение для проверки на бесконечность.

return:

true или false.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/isinf.xhtml


vec_int_type floatBitsToInt(vec_type x) 🔗

Component-wise Function.

Возвращает кодировку параметров с плавающей точкой как int.

Представление на уровне битов с плавающей точкой сохраняется.

параметр x:

Значение, кодировку которого с плавающей точкой требуется вернуть.

return:

Кодировка x с плавающей точкой.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/floatBitsToInt.xhtml


vec_uint_type floatBitsToUint(vec_type x) 🔗

Component-wise Function.

Возвращает кодировку параметров с плавающей точкой как uint.

Представление на уровне битов с плавающей точкой сохраняется.

параметр x:

Значение, кодировку которого с плавающей точкой требуется вернуть.

return:

Кодировка x с плавающей точкой.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/floatBitsToInt.xhtml


vec_type intBitsToFloat(vec_int_type x) 🔗

Component-wise Function.

Преобразует битовое кодирование в значение с плавающей точкой. Противоположно floatBitsToInt<shader_func_floatBitsToInt>

Если кодировка NaN передана в x, сигнал не будет подан, а результирующее значение будет неопределенным.

Если кодировка бесконечности с плавающей точкой передается в параметре x, то полученное значение с плавающей точкой будет соответствующей (положительной или отрицательной) бесконечностью с плавающей точкой.

параметр x:

Битовая кодировка, возвращаемая в виде значения с плавающей точкой.

return:

Значение с плавающей точкой.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/intBitsToFloat.xhtml


vec_type uintBitsToFloat(vec_uint_type x) 🔗

Component-wise Function.

Преобразует битовое кодирование в число с плавающей точкой. Противоположно floatBitsToUint<shader_func_floatBitsToUint>

Если кодировка NaN передана в x, сигнал не будет подан, а результирующее значение будет неопределенным.

Если кодировка бесконечности с плавающей точкой передается в параметре x, то полученное значение с плавающей точкой будет соответствующей (положительной или отрицательной) бесконечностью с плавающей точкой.

параметр x:

Битовая кодировка, возвращаемая в виде значения с плавающей точкой.

return:

Значение с плавающей точкой.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/intBitsToFloat.xhtml


Геометрические функции

float

length(vec_type x)

Длина вектора.

float

distance(vec_type a, vec_type b)

Расстояние между векторами, т.е. length(a - b).

float

dot(vec_type a, vec_type b)

Скалярное произведение.

vec3

cross(vec3 a, vec3 b)

Векторное произведение.

vec_type

normalize(vec_type x)

Нармализация к единицы длины.

vec3

reflect(vec3 I, vec3 N)

Отражение.

vec3

refract(vec3 I, vec3 N, float eta)

Преломление.

vec_type

faceforward(vec_type N, vec_type I, vec_type Nref)

Если dot(Nref, I) < 0, вернуть N, в противном случае -N.

mat_type

matrixCompMult(mat_type x, mat_type y)

Скалярное перемножение.

mat_type

outerProduct(vec_type столбец, vec_type строка)

Матричное внешнее произведение.

mat_type

transpose(mat_type m)

Транспонирование матрицы.

float

determinant(mat_type m)

Матричный определитель.

mat_type

inverse(mat_type m)

Обратная матрица.

Описания геометрических функций

float length(vec_type x) 🔗

Возвращает длину вектора. т.е. sqrt(x[0] * x[0] + x[1] * x[1] + ... + x[n] * x[n])

параметр x:

Вектор

return:

Длина вектора.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/length.xhtml


float distance(vec_type a, vec_type b) 🔗

Возвращает расстояние между двумя точками "a" и "b".

т.e., length(b - a);

параметр а:

Первый пункт.

параметр b:

Второй пункт.

return:

Скалярное расстояние между точками

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/distance.xhtml


float dot(vec_type a, vec_type b) 🔗

Возвращает скалярное произведение двух векторов, a и b. т.е., a.x * b.x + a.y * b.y + ...

параметр а:

Первый вектор.

параметр b:

Второй вектор.

return:

Скалярное произведение.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/dot.xhtml


vec3 cross(vec3 a, vec3 b) 🔗

Возвращает векторное произведение двух векторов. То есть:

vec2( a.y * b.z - b.y * a.z,
      a.z * b.x - b.z * a.x,
      a.x * b.z - b.x * a.y)
параметр а:

Первый вектор.

параметр b:

Второй вектор.

return:

Перекрестное произведение a и b.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/cross.xhtml


vec_type normalize(vec_type x) 🔗

Возвращает вектор с тем же направлением, что и x, но длиной 1.0.

параметр x:

Вектор для нормализации.

return:

Нормализованный вектор.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/normalize.xhtml


vec3 reflect(vec3 I, vec3 N) 🔗

Рассчитайте направление отражения для падающего вектора.

Для заданного вектора падения I и нормали поверхности N функция reflect возвращает направление отражения, рассчитанное как I - 2.0 * dot(N, I) * N.

Примечание

Для достижения желаемого результата N следует нормализовать.

параметр "I":

Вектор инцидента.

параметр "N":

Нормальный вектор.

return:

Вектор отражения.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/reflect.xhtml


vec3 refract(vec3 I, vec3 N, float eta) 🔗

Рассчитайте направление преломления для падающего вектора.

Для заданного вектора падения I, нормали к поверхности N и отношения показателей преломления eta, функция reflect возвращает вектор преломления R.

R рассчитывается как:

k = 1.0 - eta * eta * (1.0 - dot(N, I) * dot(N, I));
if (k < 0.0)
    R = genType(0.0);       // or genDType(0.0)
else
    R = eta * I - (eta * dot(N, I) + sqrt(k)) * N;

Примечание

Для достижения желаемого результата входные параметры "I" и "N" должны быть нормализованы.

параметр "I":

Вектор инцидента.

параметр "N":

Нормальный вектор.

параметр eta:

Отношение показателей преломления.

return:

Вектор рефракции.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/refract.xhtml


vec_type faceforward(vec_type N, vec_type I, vec_type Nref) 🔗

Возвращает вектор, указывающий в том же направлении, что и другой вектор.

Ориентирует вектор так, чтобы он был направлен от поверхности, как определено его нормалью. Если dot(Nref, I) < 0, функция faceforward возвращает N, в противном случае возвращает -N.

параметр "N":

Вектор для ориентации.

параметр "I":

Вектор инцидента.

параметр Nref:

Опорный вектор.

return:

Ориентированный вектор.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/faceforward.xhtml


mat_type matrixCompMult(mat_type x, mat_type y) 🔗

Выполнить пок-омпонентное умножение двух матриц.

Выполняет по-компонентное умножение двух матриц, в результате чего получается матрица результата, где каждый компонент result[i][j] вычисляется как скалярное произведение x[i][j] и y[i][j].

параметр x:

Первый матричный множитель.

параметр y:

Второй матричный множитель.

return:

Результирующая матрица.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/matrixCompMult.xhtml


mat_type outerProduct(vec_type column, vec_type row) 🔗

Вычислите внешнее произведение пары векторов.

Умножает ли линейную алгебраическую матрицу столбец * строка, давая матрицу, количество строк которой равно количеству компонентов в столбце, а количество столбцов равно количеству компонентов в строке.

параметр column (столбец):

Вектор-столбец для умножения.

параметр row:

Вектор-строка для умножения.

return:

Внешняя матрица продукта.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/outerProduct.xhtml


mat_type transpose(mat_type m) 🔗

Вычислить транспонирование матрицы.

параметр m:

Матрица для транспонирования.

return:

Новая матрица, являющаяся транспонированной входной матрицей m.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/transpose.xhtml


float determinant(mat_type m) 🔗

Вычислить определитель матрицы.

параметр m:

Матрица.

return:

Определитель входной матрицы m.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/determinant.xhtml


mat_type inverse(mat_type m) 🔗

Вычислить обратную матрицу.

Значения в возвращаемой матрице не определены, если m является единственным или плохо обусловленным (почти единственным) числом.

параметр m:

Матрица, к которой нужно взять обратную.

return:

Новая матрица, являющаяся обратной входной матрицей m.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/inverse.xhtml


Функции сравнения

vec_bool_type

lessThan(vec_type x, vec_type y)

Логическое сравнение векторов < int/uint/float.

vec_bool_type

greaterThan(vec_type x, vec_type y)

Логическое сравнение векторов > int/uint/float.

vec_bool_type

lessThanEqual(vec_type x, vec_type y)

Логическое сравнение векторов <= int/uint/float.

vec_bool_type

greaterThanEqual( vec_type x, vec_type y)

Логическое сравнение векторов >= int/uint/float.

vec_bool_type

equal(vec_type x, vec_type y)

Логическое сравнение векторов == int/uint/float.

vec_bool_type

notEqual(vec_type x, vec_type y)

Логическое сравнение векторов != int/uint/float.

bool

any(vec_bool_type x)

true если любой компонент является true, иначе false.

bool

all(vec_bool_type x)

true если все компоненты являются true, иначе false.

vec_bool_type

not(vec_bool_type x)

Обратный логический вектор.

Описания функций сравнения

vec_bool_type lessThan(vec_type x, vec_type y) 🔗

Выполняет component-wise сравнение «меньше чем» двух векторов.

параметр x:

Первый вектор для сравнения.

параметр y:

Второй вектор для сравнения.

return:

Boolean вектор, в котором каждый элемент i вычисляется как x[i] < y[i].

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/lessThan.xhtml


vec_bool_type greaterThan(vec_type x, vec_type y) 🔗

Выполняет component-wise сравнение двух векторов «больше чем».

параметр x:

Первый вектор для сравнения.

параметр y:

Второй вектор для сравнения.

return:

Булев вектор, в котором каждый элемент i вычисляется как x[i] > y[i].

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/greaterThan.xhtml


vec_bool_type lessThanEqual(vec_type x, vec_type y) 🔗

Выполняет component-wise сравнение двух векторов по принципу «меньше или равно».

параметр x:

Первый вектор для сравнения.

параметр y:

Второй вектор для сравнения.

return:

A boolean вектор, в котором каждый элемент i вычисляется как x[i] <= y[i].

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/lessThanEqual.xhtml


vec_bool_type greaterThanEqual(vec_type x, vec_type y) 🔗

Выполняет component-wise сравнение двух векторов по принципу «больше или равно».

параметр x:

Первый вектор для сравнения.

параметр y:

Второй вектор для сравнения.

return:

A boolean вектор, в котором каждый элемент i вычисляется как x[i] >= y[i].

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/greaterThanEqual.xhtml


vec_bool_type equal(vec_type x, vec_type y) 🔗

Выполняет component-wise сравнение двух векторов на равенство.

параметр x:

Первый вектор для сравнения.

параметр y:

Второй вектор для сравнения.

return:

A boolean вектор, в котором каждый элемент i вычисляется как x[i] == y[i].

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/equal.xhtml


vec_bool_type notEqual(vec_type x, vec_type y) 🔗

Выполняет component-wise сравнение «не равно» двух векторов.

параметр x:

Первый вектор для сравнения.

параметр y:

Второй вектор для сравнения.

return:

Булев вектор, в котором каждый элемент i вычисляется как x[i] != y[i].

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/notEqual.xhtml


bool any(vec_bool_type x) 🔗

Возвращает true, если любой элемент булева вектора равен true, в противном случае — false.

Функционально эквивалентно:

bool any(bvec x) {     // bvec can be bvec2, bvec3 or bvec4
    bool result = false;
    int i;
    for (i = 0; i < x.length(); ++i) {
        result |= x[i];
    }
    return result;
}
параметр x:

Вектор, который необходимо проверить на истинность.

return:

"True", если любой элемент "x" является "true", и "false" в противном случае.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/any.xhtml


bool all(vec_bool_type x) 🔗

Возвращает true, если все элементы булева вектора равны true, в противном случае — false.

Функционально эквивалентно:

bool all(bvec x)       // bvec can be bvec2, bvec3 or bvec4
{
    bool result = true;
    int i;
    for (i = 0; i < x.length(); ++i)
    {
        result &= x[i];
    }
    return result;
}
параметр x:

Вектор, который необходимо проверить на истинность.

return:

true, если все элементы x являются true, и false в противном случае.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/all.xhtml


vec_bool_type not(vec_bool_type x) 🔗

Логически инвертировать boolean вектор.

параметр x:

Вектор, который необходимо инвертировать.

return:

Новый логический вектор, для которого каждый элемент "i" вычисляется как "!x[i]".

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/not.xhtml


Текстурные функции

ivec2
ivec2
ivec2
ivec3
ivec3
textureSize(gsampler2D s, int lod)
textureSize(samplerCube s, int lod)
textureSize(samplerCubeArray s, int lod)
textureSize(gsampler2DArray s, int lod)
textureSize(gsampler3D s, int lod)

Получает размер текстуры.

For performance reasons, this function should be avoided as it always performs a full texture read. When possible, you should pass the texture size as a uniform instead.

vec2
vec3
vec2
vec2
textureQueryLod(gsampler2D s, vec2 p)
textureQueryLod(gsampler2DArray s, vec2 p)
textureQueryLod(gsampler3D s, vec3 p)
textureQueryLod(samplerCube s, vec3 p)

Вычислите уровень детализации, который будет использоваться для выборки из текстуры.

int
int
int
int
textureQueryLevels(gsampler2D s)
textureQueryLevels(gsampler2DArray s)
textureQueryLevels(gsampler3D s)
textureQueryLevels(samplerCube s)

Получает количество доступных уровней mipmap текстуры.

gvec4_type
gvec4_type
gvec4_type
vec4
vec4
vec4
texture(gsampler2D s, vec2 p [, float bias] )
texture(gsampler2DArray s, vec3 p [, float bias] )
texture(gsampler3D s, vec3 p [, float bias] )
texture(samplerCube s, vec3 p [, float bias] )
texture(samplerCubeArray s, vec4 p [, float bias] )
texture(samplerExternalOES s, vec2 p [, float bias] )

Выполняет чтение текстуры.

gvec4_type
gvec4_type
gvec4_type
textureProj(gsampler2D s, vec3 p [, float bias] )
textureProj(gsampler2D s, vec4 p [, float bias] )
textureProj(gsampler3D s, vec4 p [, float bias] )

Выполняет чтение текстуры с проекцией.

gvec4_type
gvec4_type
gvec4_type
vec4
vec4
textureLod(gsampler2D s, vec2 p, float lod)
textureLod(gsampler2DArray s, vec3 p, float lod)
textureLod(gsampler3D s, vec3 p, float lod)
textureLod(samplerCube s, vec3 p, float lod)
textureLod(samplerCubeArray s, vec4 p, float lod)

Выполняет чтение текстуры в пользовательском MIP-текстуре.

gvec4_type
gvec4_type
gvec4_type
textureProjLod(gsampler2D s, vec3 p, float lod)
textureProjLod(gsampler2D s, vec4 p, float lod)
textureProjLod(gsampler3D s, vec4 p, float lod)

Выполняет чтение текстуры с проекцией/LOD.

gvec4_type
gvec4_type
gvec4_type
vec4
vec4
textureGrad(gsampler2D s, vec2 p, vec2 dPdx, vec2 dPdy)
textureGrad(gsampler2DArray s, vec3 p, vec2 dPdx, vec2 dPdy)
textureGrad(gsampler3D s, vec3 p, vec2 dPdx, vec2 dPdy)
textureGrad(samplerCube s, vec3 p, vec3 dPdx, vec3 dPdy)
textureGrad(samplerCubeArray s, vec3 p, vec3 dPdx, vec3 dPdy)

Выполняет чтение текстуры с явными градиентами.

gvec4_type
gvec4_type
gvec4_type
textureProjGrad(gsampler2D s, vec3 p, vec2 dPdx, vec2 dPdy)
textureProjGrad(gsampler2D s, vec4 p, vec2 dPdx, vec2 dPdy)
textureProjGrad(gsampler3D s, vec4 p, vec3 dPdx, vec3 dPdy)

Выполняет чтение текстуры с проекцией/LOD и с явным

gvec4_type
gvec4_type
gvec4_type
texelFetch(gsampler2D s, ivec2 p, int lod)
texelFetch(gsampler2DArray s, ivec3 p, int lod)
texelFetch(gsampler3D s, ivec3 p, int lod)

Получает один тексель, используя целочисленные координаты.

gvec4_type
gvec4_type
vec4
textureGather(gsampler2D s, vec2 p [, int comps] )
textureGather(gsampler2DArray s, vec3 p [, int comps] )
textureGather(samplerCube s, vec3 p [, int comps] )

Собирает четыре текселя из текстуры.

vec_type

dFdx(vec_type p)

Производная по координате окна x, автоматическая гранулярность.

vec_type

dFdxCoarse(vec_type p)

Производная по координате окна x, степень детализации.

Недоступно при использовании рендерера Compatibility.

vec_type

dFdxFine(vec_type p)

Производная по координате окна x, мелкая зернистость.

Недоступно при использовании рендерера Compatibility.

vec_type

dFdy(vec_type p)

Производная по координате окна y, автоматическая гранулярность.

vec_type

dFdyCoarse(vec_type p)

Производная по координате окна y, степень детализации курса.

Недоступно при использовании рендерера Compatibility.

vec_type

dFdyFine(vec_type p)

Производная по оконной координате y, мелкая гранулярность.

Недоступно при использовании рендерера Compatibility.

vec_type

fwidth(vec_type p)

Сумма абсолютной производной по x и y.

vec_type

fwidthCoarse(vec_type p)

Сумма абсолютной производной по x и y.

Недоступно при использовании рендерера Compatibility.

vec_type

fwidthFine(vec_type p)

Сумма абсолютной производной по x и y.

Недоступно при использовании рендерера Compatibility.

Описания функций текстуры

ivec2 textureSize(gsampler2D s, int lod) 🔗

ivec2 textureSize(samplerCube s, int lod) 🔗

ivec2 textureSize(samplerCubeArray s, int lod) 🔗

ivec3 textureSize(gsampler2DArray s, int lod) 🔗

ivec3 textureSize(gsampler3D s, int lod) 🔗

Возвращает размеры уровня текстуры.

Возвращает размеры уровня lod (если присутствует) текстуры, привязанной к сэмплеру.

Компоненты возвращаемого значения заполняются по порядку шириной, высотой и глубиной текстуры. Для форм массива последний компонент возвращаемого значения — это количество слоёв в массиве текстур.

параметр "s":

Сэмплер, к которому привязана текстура, размеры которой требуется извлечь.

параметр "lod":

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

return:

Размеры уровня lod (если присутствует) текстуры, привязанной к сэмплеру.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/textureSize.xhtml


vec2 textureQueryLod(gsampler2D s, vec2 p) 🔗

vec2 textureQueryLod(gsampler2DArray s, vec2 p) 🔗

vec2 textureQueryLod(gsampler3D s, vec3 p) 🔗

vec2 textureQueryLod(samplerCube s, vec3 p) 🔗

Примечание

Доступно только во фрагментном шейдере.

Вычислите уровень детализации, который будет использоваться для выборки из текстуры.

Массив(ы) mipmap, к которым будет осуществляться доступ, возвращается в компоненте x возвращаемого значения. Вычисленный уровень детализации относительно базового уровня возвращается в компоненте y возвращаемого значения.

При вызове на неполной текстуре результат операции не определен.

параметр "s":

Сэмплер, к которому привязана текстура, уровень детализации которой будет запрошен.

параметр "p":

Координаты текстуры, по которым будет запрашиваться уровень детализации.

return:

См. описание.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/textureQueryLod.xhtml


int textureQueryLevels(gsampler2D s) 🔗

int textureQueryLevels(gsampler2DArray s) 🔗

int textureQueryLevels(gsampler3D s) 🔗

int textureQueryLevels(samplerCube s) 🔗

Вычислить количество доступных уровней mipmap.

При вызове неполной текстуры или если сэмплеру не сопоставлена ни одна текстура, возвращается 0.

параметр "s":

Сэмплер, к которому привязана текстура, для которой будет запрошен счетчик уровней mipmap.

return:

Количество доступных уровней mipmap в текстуре, или 0.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/textureQueryLevels.xhtml


gvec4_type texture(gsampler2D s, vec2 p [, float bias] ) 🔗

gvec4_type texture(gsampler2DArray s, vec3 p [, float bias] ) 🔗

gvec4_type texture(gsampler3D s, vec3 p [, float bias] ) 🔗

vec4 texture(samplerCube s, vec3 p [, float bias] ) 🔗

vec4 texture(samplerCubeArray s, vec4 p [, float bias] ) 🔗

vec4 texture(samplerExternalOES s, vec2 p [, float bias] ) 🔗

Извлекает текселы из текстуры.

Выполняет выборку текселей из текстуры, привязанной к s в координате текстуры p. Необязательное смещение, указанное в bias, включается в вычисление уровня детализации, используемое для выбора MIP-карт для выборки.

Для форм тени последний компонент p используется как Dsub, а слой массива указывается во втором с конца компоненте p. (Второй компонент p не используется для поиска одномерных теней.)

Для вариантов без тени слой массива берется из последнего компонента P.

параметр "s":

Сэмплер, к которому привязана текстура, из которой будут извлечены текселы.

параметр "p":

Координаты текстуры, по которым будет производиться выборка текстуры.

параметр "bias":

Необязательное смещение, которое можно применять при вычислении уровня детализации.

return:

Тексель.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/texture.xhtml


gvec4_type textureProj(gsampler2D s, vec3 p [, float bias] ) 🔗

gvec4_type textureProj(gsampler2D s, vec4 p [, float bias] ) 🔗

gvec4_type textureProj(gsampler3D s, vec4 p [, float bias] ) 🔗

Выполнить поиск текстуры с помощью проекции.

Координаты текстуры, полученные из p, за исключением последнего компонента p, делятся на последний компонент p. Полученный третий компонент p в теневых формах используется как Dref. После вычисления этих значений поиск текстуры продолжается так же, как в случае с текстурой.

параметр "s":

Сэмплер, к которому привязана текстура, из которой будут извлечены текселы.

параметр "p":

Координаты текстуры, по которым будет производиться выборка текстуры.

параметр "bias":

Необязательное смещение, которое может применяться при вычислении уровня детализации.

return:

Тексель.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/textureProj.xhtml


gvec4_type textureLod(gsampler2D s, vec2 p, float lod) 🔗

gvec4_type textureLod(gsampler2DArray s, vec3 p, float lod) 🔗

gvec4_type textureLod(gsampler3D s, vec3 p, float lod) 🔗

vec4 textureLod(samplerCube s, vec3 p, float lod) 🔗

vec4 textureLod(samplerCubeArray s, vec4 p, float lod) 🔗

Выполняет поиск текстуры в точке с координатой p из текстуры, привязанной к сэмплеру, с явным уровнем детализации, указанным в lod. lod задает λbase и задает частные производные следующим образом:

δu/δx=0, δv/δx=0, δw/δx=0
δu/δy=0, δv/δy=0, δw/δy=0
параметр "s":

Сэмплер, к которому привязана текстура, из которой будут извлечены текселы.

параметр "p":

Координаты текстуры, по которым будет производиться выборка текстуры.

параметр "lod":

Явный уровень детализации.

return:

Тексель.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/textureLod.xhtml


gvec4_type textureProjLod(gsampler2D s, vec3 p, float lod) 🔗

gvec4_type textureProjLod(gsampler2D s, vec4 p, float lod) 🔗

gvec4_type textureProjLod(gsampler3D s, vec4 p, float lod) 🔗

Выполняет поиск текстуры с проекцией из явно указанного уровня детализации.

Координаты текстуры, полученные из "P", за исключением последнего компонента p, делятся на последний компонент p. Полученный третий компонент p в теневых формах используется в качестве Dref. После вычисления этих значений поиск текстуры выполняется так же, как в textureLod<shader_func_textureLod>, где lod используется для указания уровня детализации, из которого будет взята текстура.

параметр "s":

Сэмплер, к которому привязана текстура, из которой будут извлечены текселы.

параметр "p":

Координаты текстуры, по которым будет производиться выборка текстуры.

параметр "lod":

Явный уровень детализации, из которого следует извлекать текселы.

return:

тексель

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/textureProjLod.xhtml


gvec4_type textureGrad(gsampler2D s, vec2 p, vec2 dPdx, vec2 dPdy) 🔗

gvec4_type textureGrad(gsampler2DArray s, vec3 p, vec2 dPdx, vec2 dPdy) 🔗

gvec4_type textureGrad(gsampler3D s, vec3 p, vec2 dPdx, vec2 dPdy) 🔗

vec4 textureGrad(samplerCube s, vec3 p, vec3 dPdx, vec3 dPdy) 🔗

vec4 textureGrad(samplerCubeArray s, vec3 p, vec3 dPdx, vec3 dPdy) 🔗

Выполняет поиск текстуры в точке с координатами p из текстуры, привязанной к сэмплеру, с явными градиентами текстурных координат, указанными в dPdx и dPdy. Задает:
  • δs/δx=δp/δx для одномерной текстуры, δp.s/δx в противном случае

  • δs/δy=δp/δy для одномерной текстуры, δp.s/δy в противном случае

  • δt/δx=0.0 для одномерной текстуры, δp.t/δx в противном случае

  • δt/δy=0.0 для одномерной текстуры, δp.t/δy в противном случае

  • δr/δx=0.0 для одномерной или двумерной текстуры, δp.p/δx в противном случае

  • δr/δy=0.0 для одномерной или двумерной текстуры, δp.p/δy в противном случае

Для кубической версии предполагается, что частные производные p находятся в системе координат, используемой до того, как координаты текстуры проецируются на соответствующую грань куба.

параметр "s":

Сэмплер, к которому привязана текстура, из которой будут извлечены текселы.

параметр "p":

Координаты текстуры, по которым будет производиться выборка текстуры.

параметр "dPdx":

Частная производная "P" по окну "x".

параметр "dPdy":

Частная производная "P" по окну "y".

return:

Тексель.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/textureGrad.xhtml


gvec4_type textureProjGrad(gsampler2D s, vec3 p, vec2 dPdx, vec2 dPdy) 🔗

gvec4_type textureProjGrad(gsampler2D s, vec4 p, vec2 dPdx, vec2 dPdy) 🔗

gvec4_type textureProjGrad(gsampler3D s, vec4 p, vec3 dPdx, vec3 dPdy) 🔗

Выполнить поиск текстуры с проекцией и явными градиентами.

Координаты текстуры, полученные из p, за исключением последнего компонента p, делятся на последний компонент p. После вычисления этих значений поиск текстуры выполняется так же, как в textureGrad<shader_func_textureGrad>, передавая dPdx и dPdy в качестве градиентов.

параметр "s":

Сэмплер, к которому привязана текстура, из которой будут извлечены текселы.

параметр "p":

Координаты текстуры, по которым будет производиться выборка текстуры.

параметр "dPdx":

Частная производная p по окну "x".

параметр "dPdy":

Частная производная p по окну "y".

return:

Тексель.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/textureProjGrad.xhtml


gvec4_type texelFetch(gsampler2D s, ivec2 p, int lod) 🔗

gvec4_type texelFetch(gsampler2DArray s, ivec3 p, int lod) 🔗

gvec4_type texelFetch(gsampler3D s, ivec3 p, int lod) 🔗

Выполняет поиск одного текселя из координаты текстуры p в текстуре, привязанной к сэмплеру.

параметр "s":

Сэмплер, к которому привязана текстура, из которой будут извлечены текселы.

параметр "p":

Координаты текстуры, по которым будет производиться выборка текстуры.

параметр "lod":

Задает уровень детализации текстуры, из которой будет извлечен тексель.

return:

Тексель.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/texelFetch.xhtml


gvec4_type textureGather(gsampler2D s, vec2 p [, int comps] ) 🔗

gvec4_type textureGather(gsampler2DArray s, vec3 p [, int comps] ) 🔗

vec4 textureGather(samplerCube s, vec3 p [, int comps] ) 🔗

Собирает четыре текселя из текстуры.

Возвращает значение:

vec4(Sample_i0_j1(p, base).comps,
     Sample_i1_j1(p, base).comps,
     Sample_i1_j0(p, base).comps,
     Sample_i0_j0(p, base).comps);
параметр "s":

Сэмплер, к которому привязана текстура, из которой будут извлечены текселы.

параметр "p":

Координаты текстуры, по которым будет производиться выборка текстуры.

парамет "comps":

необязательно компонент исходной текстуры (0 -> x, 1 -> y, 2 -> z, 3 -> w), который будет использоваться для генерации результирующего вектора. Ноль, если не указано.

return:

Собранный тексель.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/textureGather.xhtml


vec_type dFdx(vec_type p) 🔗

Примечание

Доступно только во фрагментном шейдере.

Возвращает частную производную p по координате окна "x", используя локальное дифференцирование.

Возвращает либо dFdxCoarse, либо dFdxFine. Реализация может выбирать, какие вычисления выполнять, основываясь на таких факторах, как производительность или значение подсказки API GL_FRAGMENT_SHADER_DERIVATIVE_HINT.

Предупреждение

Выражения, подразумевающие производные более высокого порядка, такие как dFdx(dFdx(n)), имеют неопределенные результаты, как и производные смешанного порядка, такие как dFdx(dFdy(n)).

параметр "p":

Выражение, от которого следует взять частную производную.

Примечание

Предполагается, что выражение p является непрерывным, и поэтому выражения, вычисляемые посредством неоднородного потока управления, могут быть неопределенными.

return:

Частная производная p.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/dFdx.xhtml


vec_type dFdxCoarse(vec_type p) 🔗

Примечание

Доступно только во фрагментном шейдере. Недоступно при использовании рендера Compatibility.

Возвращает частную производную p по координате окна "x".

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

Предупреждение

Выражения, подразумевающие производные более высокого порядка, такие как dFdx(dFdx(n)), имеют неопределенные результаты, как и производные смешанного порядка, такие как dFdx(dFdy(n)).

параметр "p":

Выражение, от которого следует взять частную производную.

Примечание

Предполагается, что выражение p является непрерывным, и поэтому выражения, вычисляемые посредством неоднородного потока управления, могут быть неопределенными.

return:

Частная производная p.

https://registry.khronos.org/OpenGL-Refpages/gl4/html/dFdx.xhtml


vec_type dFdxFine(vec_type p) 🔗

Примечание

Доступно только во фрагментном шейдере. Недоступно при использовании рендера Compatibility.

Возвращает частную производную p по координате окна "x".

Вычисляет производные с использованием локального дифференцирования на основе значения p для текущего фрагмента и его ближайших соседей.

Предупреждение

Выражения, подразумевающие производные более высокого порядка, такие как dFdx(dFdx(n)), имеют неопределенные результаты, как и производные смешанного порядка, такие как dFdx(dFdy(n)).

параметр "p":

Выражение, от которого следует взять частную производную.

Примечание

Предполагается, что выражение p является непрерывным, и поэтому выражения, вычисляемые посредством неоднородного потока управления, могут быть неопределенными.

return:

Частная производная p.

https://registry.khronos.org/OpenGL-Refpages/gl4/html/dFdx.xhtml


vec_type dFdy(vec_type p) 🔗

Примечание

Доступно только во фрагментном шейдере.

Возвращает частную производную p по координате окна y, используя локальное дифференцирование.

Возвращает либо dFdyCoarse, либо dFdyFine. Реализация может выбирать, какие вычисления выполнять, основываясь на таких факторах, как производительность или значение подсказки API GL_FRAGMENT_SHADER_DERIVATIVE_HINT.

Предупреждение

Выражения, подразумевающие производные более высокого порядка, такие как dFdx(dFdx(n)), имеют неопределенные результаты, как и производные смешанного порядка, такие как dFdx(dFdy(n)).

параметр "p":

Выражение, от которого следует взять частную производную.

Примечание

Предполагается, что выражение p является непрерывным, и поэтому выражения, вычисляемые посредством неоднородного потока управления, могут быть неопределенными.

return:

Частная производная p.

https://registry.khronos.org/OpenGL-Refpages/gl4/html/dFdx.xhtml


vec_type dFdyCoarse(vec_type p) 🔗

Примечание

Доступно только во фрагментном шейдере. Недоступно при использовании рендера Compatibility.

Возвращает частную производную p по координате y окна.

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

Предупреждение

Выражения, подразумевающие производные более высокого порядка, такие как dFdx(dFdx(n)), имеют неопределенные результаты, как и производные смешанного порядка, такие как dFdx(dFdy(n)).

параметр "p":

Выражение, от которого следует взять частную производную.

Примечание

Предполагается, что выражение p является непрерывным, и поэтому выражения, вычисляемые посредством неоднородного потока управления, могут быть неопределенными.

return:

Частная производная p.

https://registry.khronos.org/OpenGL-Refpages/gl4/html/dFdx.xhtml


vec_type dFdyFine(vec_type p) 🔗

Примечание

Доступно только во фрагментном шейдере. Недоступно при использовании рендера Compatibility.

Возвращает частную производную p по координате y окна.

Вычисляет производные с использованием локального дифференцирования на основе значения p для текущего фрагмента и его ближайших соседей.

Предупреждение

Выражения, подразумевающие производные более высокого порядка, такие как dFdx(dFdx(n)), имеют неопределенные результаты, как и производные смешанного порядка, такие как dFdx(dFdy(n)).

параметр "p":

Выражение, от которого следует взять частную производную.

Примечание

Предполагается, что выражение p является непрерывным, и поэтому выражения, вычисляемые посредством неоднородного потока управления, могут быть неопределенными.

return:

Частная производная p.

https://registry.khronos.org/OpenGL-Refpages/gl4/html/dFdx.xhtml


vec_type fwidth(vec_type p) 🔗

Возвращает сумму абсолютных значений производных по "x" и "y".

Использует локальное дифференцирование для входного аргумента p.

Эквивалентно abs(dFdx(p)) + abs(dFdy(p)).

параметр "p":

Выражение, от которого следует взять частную производную.

return:

Частная производная.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/fwidth.xhtml


vec_type fwidthCoarse(vec_type p) 🔗

Примечание

Доступно только во фрагментном шейдере. Недоступно при использовании рендера Compatibility.

Возвращает сумму абсолютных значений производных по "x" и "y".

Использует локальное дифференцирование для входного аргумента "p".

Эквивалентно abs(dFdxCoarse(p)) + abs(dFdyCoarse(p)).

параметр "p":

Выражение, от которого следует взять частную производную.

return:

Частная производная.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/fwidth.xhtml


vec_type fwidthFine(vec_type p) 🔗

Примечание

Доступно только во фрагментном шейдере. Недоступно при использовании рендера Compatibility.

Возвращает сумму абсолютных значений производных по "x" и "y".

Использует локальное дифференцирование для входного аргумента "p".

Эквивалентно abs(dFdxFine(p)) + abs(dFdyFine(p)).

параметр "p":

Выражение, от которого следует взять частную производную.

return:

Частная производная.

https://registry.khronos.org/OpenGL-Refpages/gl4/html/fwidth.xhtml


Функции упаковки и распаковки

Эти функции преобразуют числа с плавающей точкой в целые числа различных размеров, а затем упаковывают их в одно 32-битное беззнаковое целое число. Функции распаковки выполняют обратную операцию, возвращая исходные числа с плавающей точкой.

uint
vec2
packHalf2x16(vec2 v)

Преобразовать два 32-битных floats в 16-битные floats и упаковать их.

uint
vec2

Преобразовать два нормализованных (диапазон 0..1) 32-битных числа с плавающей точкой в 16-битные беззнаковые целые числа и упаковать их.

uint
vec2

Преобразовать два знаковых нормализованных (диапазон -1..1) 32-битных числа с плавающей точкой в 16-битные знаковые целые числа и упаковать их.

uint
vec4
packUnorm4x8(vec4 v)

Преобразовать четыре нормализованных (диапазон 0..1) 32-битных числа с плавающей точкой в 8-битные беззнаковые целые числа и упаковать их.

uint
vec4
packSnorm4x8(vec4 v)

Преобразовать четыре знаковых нормализованных (диапазон -1..1) 32-битных числа с плавающей точкой в 8-битные знаковые целые числа и упаковать их.

Описания функций упаковки и распаковки

uint packHalf2x16(vec2 v) 🔗

Преобразует два 32-битных числа с плавающей точкой в 16-битные числа с плавающей точкой и упаковывает их в одно 32-битное целое число.

Возвращает беззнаковое целое число, полученное путём преобразования компонентов двухкомпонентного вектора с плавающей точкой в 16-битное представление с плавающей точкой, описанное в спецификации OpenGL, и последующей упаковки этих двух 16-битных целых чисел в 32-битное беззнаковое целое число. Первый компонент вектора определяет 16 младших значащих бит результата; второй компонент определяет 16 старших значащих бит.

параметр "v":

Вектор из двух 32-битных значений с плавающей точкой, которые необходимо преобразовать в 16-битное представление и упаковать в результат.

return:

Упакованная ценность.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/packHalf2x16.xhtml


vec2 unpackHalf2x16(uint v) 🔗

Inverse of packHalf2x16.

Распаковывает 32-битное целое число в два 16-битных числа с плавающей точкой, преобразует их в 32-битные числа с плавающей точкой и помещает в вектор. Первый компонент вектора получается из 16 младших битов v; второй компонент получается из 16 старших битов v.

параметр "v":

Одно 32-битное беззнаковое целое число, содержащее 2 упакованных 16-битных значения с плавающей запятой.

return:

Два распакованных значения с плавающей точкой.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/unpackHalf2x16.xhtml


uint packUnorm2x16(vec2 v) 🔗

Упаковать значения с плавающей точкой в беззнаковое целое число.

Преобразует каждый компонент нормализованного значения с плавающей запятой v в 16-битные целые значения, а затем упаковывает результаты в 32-битное беззнаковое целое число.

Преобразование компонента c числа v в число с фиксированной точкой выполняется следующим образом:

round(clamp(c, 0.0, 1.0) * 65535.0)

Первый компонент вектора будет записан в наименее значимые биты выходных данных; последний компонент будет записан в наиболее значимые биты.

параметр "v":

Вектор значений, которые необходимо упаковать в беззнаковое целое число.

return:

Беззнаковое 32-битное целое число, содержащее упакованную кодировку вектора.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/packUnorm.xhtml


vec2 unpackUnorm2x16(uint v) 🔗

Распаковать значения с плавающей точкой из беззнакового целого числа.

Распаковывает отдельные 32-битные беззнаковые целые числа в пару 16-битных беззнаковых целых чисел. Затем каждый компонент преобразуется в нормализованное значение с плавающей запятой для формирования возвращаемого двух-компонентного вектора.

Преобразование неупакованного значения с фиксированной точкой "f" в значение с плавающей точкой выполняется следующим образом:

f / 65535.0

Первый компонент возвращаемого вектора будет извлечен из наименее значимых битов входных данных; последний компонент будет извлечен из наиболее значимых битов.

параметр "v":

Беззнаковое целое число, содержащее упакованные значения с плавающей точкой.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/unpackUnorm.xhtml


uint packSnorm2x16(vec2 v) 🔗

Упаковывает значения с плавающей точкой в беззнаковое целое число.

Преобразует каждый компонент нормализованного значения с плавающей запятой v в 16-битные целые значения, а затем упаковывает результаты в 32-битное беззнаковое целое число.

Преобразование компонента c числа v в число с фиксированной точкой выполняется следующим образом:

round(clamp(c, -1.0, 1.0) * 32767.0)

Первый компонент вектора будет записан в наименее значимые биты выходных данных; последний компонент будет записан в наиболее значимые биты.

параметр "v":

Вектор значений, которые необходимо упаковать в беззнаковое целое число.

return:

Беззнаковое 32-битное целое число, содержащее упакованную кодировку вектора.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/packUnorm.xhtml


vec2 unpackSnorm2x16(uint v) 🔗

Распаковывает значения с плавающей точкой из беззнакового целого числа.

Распаковывает отдельные 32-битные беззнаковые целые числа в пару 16-битных знаковых целых чисел. Затем каждый компонент преобразуется в нормализованное значение с плавающей запятой для формирования возвращаемого двухкомпонентного вектора.

Преобразование неупакованного значения с фиксированной точкой "f" в значение с плавающей точкой выполняется следующим образом:

clamp(f / 32727.0, -1.0, 1.0)

Первый компонент возвращаемого вектора будет извлечен из наименее значимых битов входных данных; последний компонент будет извлечен из наиболее значимых битов.

параметр "v":

Беззнаковое целое число, содержащее упакованные значения с плавающей точкой.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/unpackUnorm.xhtml


uint packUnorm4x8(vec4 v) 🔗

Упаковывает значения с плавающей точкой в беззнаковое целое число.

Преобразует каждый компонент нормализованного значения с плавающей запятой v в 16-битные целые значения, а затем упаковывает результаты в 32-битное беззнаковое целое число.

Преобразование компонента c числа v в число с фиксированной точкой выполняется следующим образом:

round(clamp(c, 0.0, 1.0) * 255.0)

Первый компонент вектора будет записан в наименее значимые биты выходных данных; последний компонент будет записан в наиболее значимые биты.

параметр "v":

Вектор значений, которые необходимо упаковать в беззнаковое целое число.

return:

Беззнаковое 32-битное целое число, содержащее упакованную кодировку вектора.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/packUnorm.xhtml


vec4 unpackUnorm4x8(uint v) 🔗

Распаковывает значения с плавающей точкой из беззнакового целого числа.

Распаковывает отдельные 32-битные беззнаковые целые числа в четыре 8-битных беззнаковых целых числа. Затем каждый компонент преобразуется в нормализованное значение с плавающей запятой для формирования возвращаемого четырёхкомпонентного вектора.

Преобразование неупакованного значения с фиксированной точкой "f" в значение с плавающей точкой выполняется следующим образом:

f / 255.0

Первый компонент возвращаемого вектора будет извлечен из наименее значимых битов входных данных; последний компонент будет извлечен из наиболее значимых битов.

параметр "v":

Беззнаковое целое число, содержащее упакованные значения с плавающей точкой.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/unpackUnorm.xhtml


uint packSnorm4x8(vec4 v) 🔗

Упаковывает значения с плавающей точкой в беззнаковое целое число.

Преобразует каждый компонент нормализованного значения с плавающей запятой v в 16-битные целые значения, а затем упаковывает результаты в 32-битное беззнаковое целое число.

Преобразование компонента c числа v в число с фиксированной точкой выполняется следующим образом:

round(clamp(c, -1.0, 1.0) * 127.0)

Первый компонент вектора будет записан в наименее значимые биты выходных данных; последний компонент будет записан в наиболее значимые биты.

параметр "v":

Вектор значений, которые необходимо упаковать в беззнаковое целое число.

return:

Беззнаковое 32-битное целое число, содержащее упакованную кодировку вектора.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/packUnorm.xhtml


vec4 unpackSnorm4x8(uint v) 🔗

Распаковать значения с плавающей точкой из беззнакового целого числа.

Распаковывает отдельные 32-битные беззнаковые целые числа в четыре 8-битных знаковых целых числа. Затем каждый компонент преобразуется в нормализованное значение с плавающей запятой для формирования возвращаемого четырёхкомпонентного вектора.

Преобразование неупакованного значения с фиксированной точкой "f" в значение с плавающей точкой выполняется следующим образом:

clamp(f / 127.0, -1.0, 1.0)

Первый компонент возвращаемого вектора будет извлечен из наименее значимых битов входных данных; последний компонент будет извлечен из наиболее значимых битов.

параметр "v":

Беззнаковое целое число, содержащее упакованные значения с плавающей точкой.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/unpackUnorm.xhtml


Побитовые функции

vec_int_type
vec_uint_type
bitfieldExtract(vec_int_type value, int offset, int bits)
bitfieldExtract(vec_uint_type value, int offset, int bits)

Извлечение диапазона битов из целого числа.

vec_int_type
vec_uint_type
bitfieldInsert(vec_int_type base, vec_int_type insert, int offset, int bits)
bitfieldInsert(vec_uint_type base, vec_uint_type insert, int offset, int bits)

Вставка диапазона битов в целое число.

vec_int_type
vec_uint_type
bitfieldReverse(vec_int_type value)
bitfieldReverse(vec_uint_type value)

Изменение порядка следования битов в целых числах.

vec_int_type
vec_uint_type
bitCount(vec_int_type value)
bitCount(vec_uint_type value)

Подсчитывает количество бит 1 в целых числах.

vec_int_type
vec_uint_type
findLSB(vec_int_type value)
findLSB(vec_uint_type value)

Находит индекс наименьшего значащего бита, установленного в 1, в целом числе.

vec_int_type
vec_uint_type
findMSB(vec_int_type value)
findMSB(vec_uint_type value)

Находит индекс старшего бита, установленного в 1, в целом числе.

void
void
imulExtended(vec_int_type x, vec_int_type y, out vec_int_type msb, out vec_int_type lsb)
umulExtended(vec_uint_type x, vec_uint_type y, out vec_uint_type msb, out vec_uint_type lsb)

Умножает два 32-битных числа и даёт 64-битный результат.

vec_uint_type

uaddCarry(vec_uint_type x, vec_uint_type y, out vec_uint_type carry)

Складывает два беззнаковых целых числа и генерирует перенос.

vec_uint_type

usubBorrow(vec_uint_type x, vec_uint_type y, out vec_uint_type borrow)

Вычитает два беззнаковых целых числа и генерирует заимствование.

vec_type

ldexp(vec_type x, out vec_int_type exp)

Сборка числа с плавающей точкой из значения и экспоненты.

vec_type

frexp(vec_type x, out vec_int_type exp)

Разбивает число с плавающей точкой (x) на значимую и целую части

Описания побитовых функций

vec_int_type bitfieldExtract(vec_int_type value, int offset, int bits) 🔗

Извлекает подмножество битов value и возвращает его в младших битах результата. Диапазон извлекаемых битов: [offset, offset + bits - 1].

Наиболее значимые биты результата будут установлены в ноль.

Примечание

Если бит равен нулю, результат будет равен нулю.

Предупреждение

Результат будет неопределенным, если:

  • смещение или биты отрицательны.

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

параметр "value":

Целое число, из которого извлекаются биты.

параметр "offset":

Индекс первого извлекаемого бита.

параметр "bits":

Количество извлекаемых битов.

return:

Целое число с запрошенными битами.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/bitfieldExtract.xhtml


vec_uint_type bitfieldExtract(vec_uint_type value, int offset, int bits) 🔗

Component-wise Function.

Извлекает подмножество битов value и возвращает его в младших битах результата. Диапазон извлекаемых битов: [offset, offset + bits - 1].

Наиболее значимым битам будет присвоено значение offset + base - 1 (т.е. это знак, расширенный до ширины возвращаемого типа).

Примечание

Если бит равен нулю, результат будет равен нулю.

Предупреждение

Результат будет неопределенным, если:

  • смещение или биты отрицательны.

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

параметр "value":

Целое число, из которого извлекаются биты.

параметр "offset":

Индекс первого извлекаемого бита.

параметр "bits":

Количество извлекаемых битов.

return:

Целое число с запрошенными битами.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/bitfieldExtract.xhtml


vec_uint_type bitfieldExtract(vec_uint_type value, int offset, int bits) 🔗

vec_uint_type bitfieldInsert(vec_uint_type base, vec_uint_type insert, int offset, int bits) 🔗

Component-wise Function.

Вставляет младшие биты bits из insert в base со смещением offset.

Возвращаемое значение будет иметь биты [offset, offset + bits + 1], взятые из [0, биты - 1] insert, а все остальные биты будут взяты непосредственно из соответствующих битов базы.

Примечание

Если бит равен нулю, результатом будет исходное значение базы.

Предупреждение

Результат будет неопределенным, если:

  • смещение или биты отрицательны.

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

параметр "base":

Целое число, в которое следует вставить insert.

параметр "insert" (вставка):

Значение битов для insert.

параметр "offset":

Индекс первого бита для вставки.

параметр "bits":

Количество битов для вставки.

return:

base со вставленными битами.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/bitfieldInsert.xhtml


vec_int_type bitfieldReverse(vec_int_type value) 🔗

vec_uint_type bitfieldReverse(vec_uint_type value) 🔗

Component-wise Function.

Изменение порядка следования битов в целых числах.

Бит с номером n будет взят из бита (биты - 1) - n из value, где биты - это общее количество бит, используемых для представления value.

параметр "value":

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

return:

value, но с обратными битами.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/bitfieldReverse.xhtml


vec_int_type bitCount(vec_int_type value) 🔗

vec_uint_type bitCount(vec_uint_type value) 🔗

Component-wise Function.

Подсчитывает количество бит 1 в целых числах.

параметр "value":

Значение, биты которого нужно подсчитать.

return:

Количество бит, которые в двоичном представлении value установлены в 1.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/bitCount.xhtml


vec_int_type findLSB(vec_int_type value) 🔗

vec_uint_type findLSB(vec_uint_type value) 🔗

Component-wise Function.

Найдите индекс наименее значимого бита, установленного в 1.

Примечание

Если value равно нулю, будет возвращено -1.

параметр "value":

Значение, биты которого нужно сканировать.

return:

Номер младшего бита, который в двоичном представлении значения установлен в 1.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/findLSB.xhtml


vec_int_type findMSB(vec_int_type value) 🔗

vec_uint_type findMSB(vec_uint_type value) 🔗

Component-wise Function.

Найдите индекс самого старшего бита, установленного в 1.

Примечание

Для знаковых целых типов сначала проверяется бит знака, а затем:
  • Для положительных целых чисел результатом будет номер самого старшего бита, установленного в 1.

  • Для отрицательных целых чисел результатом будет номер самого старшего бита, установленный в 0.

Примечание

Для значения ноль или отрицательной 1 будет возвращено -1.

параметр "value":

Значение, биты которого нужно сканировать.

return:

Номер самого старшего бита, который в двоичном представлении значения установлен в 1.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/findMSB.xhtml


void imulExtended(vec_int_type x, vec_int_type y, out vec_int_type msb, out vec_int_type lsb) 🔗

Component-wise Function.

Выполнить 32-битное знаковое умножение на 32-битное для получения 64-битного результата.

32 младших бита этого произведения возвращаются в lsb, а 32 старших бита возвращаются в msb.

параметр x:

Первый множимый.

параметр y:

Второй множимый.

параметр "msb":

Переменная для получения наиболее значимого слова продукта.

параметр "lsb":

Переменная для получения наименее значимого слова произведения.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/umulExtended.xhtml


void umulExtended(vec_uint_type x, vec_uint_type y, out vec_uint_type msb, out vec_uint_type lsb) 🔗

Component-wise Function.

Выполнить 32-битное на 32-битное беззнаковое умножение для получения 64-битного результата.

32 младших бита этого произведения возвращаются в lsb, а 32 старших бита возвращаются в msb.

параметр x:

Первый множимый.

параметр y:

Второй множимый.

параметр "msb":

Переменная для получения наиболее значимого слова продукта.

параметр "lsb":

Переменная для получения наименее значимого слова произведения.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/umulExtended.xhtml


vec_uint_type uaddCarry(vec_uint_type x, vec_uint_type y, out vec_uint_type carry) 🔗

Component-wise Function.

Складываем беззнаковые целые числа и создаем перенос.

складывает две 32-битные беззнаковые целые переменные (скаляры или векторы) и генерирует 32-битный беззнаковый целочисленный результат вместе с результатом переноса. Значение переноса равно .

параметр x:

Первый операнд.

параметр y:

Второй операнд.

параметр "carry" (перенос):

0, если сумма меньше 232, в противном случае 1.

return:

(x + y) % 2^32.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/uaddCarry.xhtml


vec_uint_type usubBorrow(vec_uint_type x, vec_uint_type y, out vec_uint_type borrow) 🔗

Component-wise Function.

Вычтите беззнаковые целые числа и сгенерируйте заем.

параметр x:

Первый операнд.

параметр y:

Второй операнд.

param "borrow" (заимствовать):

0 если x >= y, в противном случае 1.

return:

Разность x и y, если число неотрицательное, или 232 плюс эта разность в противном случае.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/usubBorrow.xhtml


vec_type ldexp(vec_type x, out vec_int_type exp) 🔗

Component-wise Function.

Составляет число с плавающей точкой из значения и показателя степени.

Предупреждение

Если это произведение слишком велико для представления в виде числа с плавающей точкой, результат не определен.

параметр x:

Значение, которое будет использоваться в качестве источника означающего.

параметр "exp":

Значение, которое будет использоваться в качестве источника показателя степени.

return:

x * 2^exp

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/ldexp.xhtml


vec_type frexp(vec_type x, out vec_int_type exp) 🔗

Component-wise Function.

Извлекает x в мантису с плавающей точкой в диапазоне [0.5, 1.0) и в целочисленную степень двух, таким образом:

x = significand * 2 ^ exponent

Для плавающего значения, равного нулю, мантисса и показатель степени равны нулю.

Предупреждение

Для значения с плавающей точкой, которое равно бесконечности или NaN с плавающей точкой, результаты не определены.

параметр x:

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

параметр "exp":

Переменная, в которую помещается показатель степени x.

return:

Значащая часть x.

https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/frexp.xhtml