Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Вбудовані функції

Godot підтримує велику кількість вбудованих функцій, що приблизно відповідають специфікації GLSL ES 3.0.

Примітка

Наступні псевдоніми типів використовуються лише в документації, щоб зменшити повторювані оголошення функцій. Кожен з них може стосуватися будь-якого з кількох фактичних типів.

псевдонім

фактичні типи

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

vec_type

float, vec2, vec3, or vec4

genType

vec_int_type

int, ivec2, ivec3, or ivec4

genIType

vec_uint_type

uint, uvec2, uvec3, or uvec4

genUType

vec_bool_type

bool, bvec2, bvec3, or bvec4

genBType

mat_type

mat2, mat3, or mat4

mat

gvec4_type

vec4, ivec4, or 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))

Специфікація мови GLSL говорить у розділі 5.10 Векторні та матричні операції:

За кількома винятками, операції є компонентними. Зазвичай, коли оператор працює з вектором або матрицею, він діє незалежно від кожного компонента вектора або матриці, покомпонентно. [...] Винятками є матриця, помножена на вектор, помножена на матрицю, і матриця, помножена на матрицю. Вони не працюють покомпонентно, а скоріше виконують правильне лінійне алгебраїчне множення.

Ці описи функцій адаптовано та змінено з офіційної документації OpenGL, спочатку опублікованої Khronos Group згідно з Ліцензією відкритої публікації. Кожен опис функції містить посилання на відповідну офіційну документацію OpenGL. Історію змін цієї сторінки можна знайти на GitHub.


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

Тип повернення

Function

Опис/Повернене значення

vec_type

radians(vec_type degrees)

Перетворіть градуси в радіани.

vec_type

degrees(vec_type radians)

Перетворіть радіани в градуси.

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 радіан(vec_type degrees) 🔗

Component-wise Function.

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

парам ступенів:

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

return:

Введені градуси перетворені в радіани.

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


vec_type ступенів(vec_type radians) 🔗

Component-wise Function.

Перетворює величину, задану в радіанах, на градуси за формулою radians * (180 / PI)

параметр радіан:

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

return:

Введені радіани перетворені в градуси.

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


vec_type гріх(vec_type angle) 🔗

Component-wise Function.

Повертає тригонометричний синус angle.

параметр кута:

Кількість у радіанах, синус якої потрібно повернути.

return:

Синус від angle.

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


vec_type cos(vec_type angle) 🔗

Component-wise Function.

Повертає тригонометричний косинус angle.

параметр кута:

Кількість у радіанах, косинус якої потрібно повернути.

return:

Косинус від angle.

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


vec_type tan(vec_type angle) 🔗

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.

параметр і:

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

параметр 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


Показникові та математичні функції

Тип повернення

Function

Опис/Повернене значення

vec_type

pow(vec_type x, vec_type y)

Потужність (не визначено, якщо 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)

Натуральний (база-е).

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)

Усічення.

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.

параметр і:

Степінь, до якого буде зведено 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 піднесені до степеня х.

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 за основою 2, тобто значення 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 if x < 0, 0 if x == 0, and 1 if 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 modulo y. Іноді його також називають залишком.

Це обчислюється як x - y * floor(x/y).

параметр x:

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

return:

Значення x modulo y.

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


vec_type modf(vec_type x, out vec_type i) 🔗

Component-wise Function.

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

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

параметр x:

Значення, яке потрібно розділити.

param 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.

param a:

Перше значення для порівняння.

param 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.

param a:

Перше значення для порівняння.

param 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:

Значення, яке потрібно обмежити.

param minVal:

Нижня межа діапазону, в межах якого потрібно обмежити x.

param 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.

param a:

Початок діапазону для інтерполяції.

param b:

Кінець діапазону для інтерполяції.

param 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 є векторними типами, операція виконується component-wise. тобто. mix(vec2(42, 314), vec2(9.8, 6e23), bvec2(true, false))) поверне vec2(9.8, 314).

param a:

Значення, що повертається, коли c є false.

param b:

Значення, що повертається, коли c має значення true.

param 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. У випадках використання, коли повернуте значення зрештою споживається змінною, оголошеною як precise:

  • fma() вважається однією операцією, тоді як вираз a * b + c, що споживається змінною, оголошеною як precise, вважається двома операціями.

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

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

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

param a:

Перше значення для множення.

param b:

Друге значення для множення.

param 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 повертається в іншому випадку.

param a:

Розташування краю ступінчастої функції.

param 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.

param a:

Значення нижнього краю функції Ерміта.

param b:

Значення верхнього краю функції Ерміта.

param 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


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

десяткове число

length(vec_type x)

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

десяткове число

distance(vec_type a, vec_type b)

Відстань між векторами, тобто довжина (a - b).

десяткове число

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)

Якщо точка(Nref, I) < 0, повертається N, інакше -N.

mat_type

matrixCompMult(mat_type x, mat_type y)

Множення компонент матриці.

mat_type

outerProduct(vec_type column, vec_type row)

Зовнішній продукт матриці.

mat_type

transpose(mat_type m)

Транспонуємо матрицю.

десяткове число

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.

тобто довжина (b - a);

param a:

Пункт перший.

param 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 + ...

param a:

Перший вектор.

param 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)
param a:

Перший вектор.

param 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 слід нормалізувати, щоб досягти бажаного результату.

param I:

Вектор інциденту.

param N:

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

return:

Вектор відбиття.

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


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

Обчисліть напрямок заломлення для падаючого вектора.

Для заданого вектора падіння I, нормалі до поверхні N і співвідношення показників заломлення eta, refract повертає вектор заломлення 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 необхідно нормалізувати, щоб отримати бажаний результат.

param I:

Вектор інциденту.

param N:

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

param 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.

param N:

Вектор для орієнтування.

param I:

Вектор інциденту.

param Nref:

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

return:

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

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


mat_type matrixCompMult(mat_type x, mat_type y) 🔗

Виконайте component-wise множення двох матриць.

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

параметр x:

Перше матричне множене.

параметр і:

Друге матричне множене.

return:

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

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


mat_type outerProduct(vec_type column, vec_type row) 🔗

Обчисліть зовнішній добуток пари векторів.

Чи виконує лінійна алгебраїчна матриця множення стовпець * рядок, утворюючи матрицю, кількість рядків якої є кількістю компонентів у стовпці, а кількість стовпців — це кількість компонентів рядка.

param column:

Вектор-стовпець для множення.

param row:

Вектор-рядок для множення.

return:

Зовнішня матриця продукту.

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


mat_type transpose(mat_type m) 🔗

Обчислити транспонування матриці.

param m:

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

return:

Нова матриця, яка є транспонуванням вхідної матриці m.

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


float determinant(mat_type m) 🔗

Обчислити визначник матриці.

param m:

Матриця.

return:

Визначник вхідної матриці m.

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


mat_type inverse(mat_type m) 🔗

Обчисліть обернену матрицю.

Значення у поверненій матриці є невизначеними, якщо m є сингулярним або погано обумовленим (майже сингулярним).

param m:

Матрицю якої взяти оберненою.

return:

Нова матриця, яка є оберненою до вхідної матриці m.

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


Функції порівняння

vec_bool_type

lessThan(vec_type x, vec_type y)

Порівняння векторів Bool на векторах < int/uint/float.

vec_bool_type

greaterThan(vec_type x, vec_type y)

Порівняння векторів Bool на векторах > int/uint/float.

vec_bool_type

lessThanEqual(vec_type x, vec_type y)

Порівняння векторів Bool на векторах <= int/uint/float.

vec_bool_type

greaterThanEqual( vec_type x, vec_type y)

Порівняння векторів Bool на векторах >= int/uint/float.

vec_bool_type

equal(vec_type x, vec_type y)

Порівняння векторів Bool на векторах == int/uint/float.

vec_bool_type

notEqual(vec_type x, vec_type y)

Порівняння векторів Bool на векторах != 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:

Перший вектор для порівняння.

параметр і:

Другий вектор для порівняння.

return:

Булев вектор, у якому кожен елемент 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:

Перший вектор для порівняння.

параметр і:

Другий вектор для порівняння.

return:

Логічний вектор, у якому кожен елемент i обчислюється як 1x[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:

Перший вектор для порівняння.

параметр і:

Другий вектор для порівняння.

return:

Логічний вектор, у якому кожен елемент i обчислюється як 1x[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:

Перший вектор для порівняння.

параметр і:

Другий вектор для порівняння.

return:

Логічний вектор, у якому кожен елемент 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:

Перший вектор для порівняння.

параметр і:

Другий вектор для порівняння.

return:

Логічний вектор, у якому кожен елемент 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:

Перший вектор для порівняння.

параметр і:

Другий вектор для порівняння.

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:

Істинний, якщо будь-який елемент x є істинним, і хибний в іншому випадку.

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) 🔗

Логічно інвертувати логічний вектор.

параметр 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)

Отримайте розмір текстури.

З міркувань продуктивності цієї функції слід уникати, оскільки вона завжди виконує повне зчитування текстури. Коли це можливо, слід передавати розмір текстури як однорідний.

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)

Виконує зчитування текстури на власному mipmap.

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, деталізація курсу.

Недоступно, якщо використовується рендерер сумісності.

vec_type

dFdxFine(vec_type p)

Похідна відносно віконної координати x, дрібна деталізація.

Недоступно, якщо використовується рендерер сумісності.

vec_type

dFdy(vec_type p)

Похідна відносно віконної координати y, автоматична деталізація.

vec_type

dFdyCoarse(vec_type p)

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

Недоступно, якщо використовується рендерер сумісності.

vec_type

dFdyFine(vec_type p)

Похідна відносно віконної координати y, дрібна деталізація.

Недоступно, якщо використовується рендерер сумісності.

vec_type

fwidth(vec_type p)

Сума абсолютної похідної в x і y.

vec_type

fwidthCoarse(vec_type p)

Сума абсолютної похідної в x і y.

Недоступно, якщо використовується рендерер сумісності.

vec_type

fwidthFine(vec_type p)

Сума абсолютної похідної в x і y.

Недоступно, якщо використовується рендерер сумісності.

Опис функцій текстури

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 (якщо є) текстури, прив’язаної до семплера.

Компоненти в поверненому значенні заповнюються в порядку ширини, висоти та глибини текстури. Для форм масиву останнім компонентом значення, що повертається, є кількість шарів у масиві текстур.

param s:

Семплер, до якого прив’язана текстура, розміри якої потрібно отримати.

param 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 повертаного значення.

Якщо викликати неповну текстуру, результат операції буде невизначеним.

param s:

Семплер, до якого прив’язана текстура, чий рівень деталізації запитуватиметься.

param 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.

param s:

Семплер, до якого прив’язана текстура, чий рівень міп-карти запитуватиметься.

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 не використовується для 1D тіньового пошуку.)

Для нетіньових варіантів шар масиву походить від останнього компонента P.

param s:

Семплер, до якого прив’язана текстура, з якої будуть отримані текселі.

param p:

Координати текстури, у яких текстура буде взята.

param 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. Отриманий 3-й компонент p у тіньових формах використовується як Dref. Після того, як ці значення обчислено, пошук текстури продовжується, як у текстурі.

param s:

Семплер, до якого прив’язана текстура, з якої будуть отримані текселі.

param p:

Координати текстури, у яких текстура буде взята.

param 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
param s:

Семплер, до якого прив’язана текстура, з якої будуть отримані текселі.

param p:

Координати текстури, у яких текстура буде взята.

param 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. Отриманий 3-й компонент p у тіньових формах використовується як Dref. Після обчислення цих значень пошук текстури виконується так, як у textureLod<shader_func_textureLod>, з lod, що використовується для визначення рівня деталізації, з якого буде взято вибірку текстури.

param s:

Семплер, до якого прив’язана текстура, з якої будуть отримані текселі.

param p:

Координати текстури, у яких текстура буде взята.

param 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 для 1D або 2D текстури, δp.p/δx інакше

  • δr/δy=0.0 для 1D або 2D текстури, δp.p/δy інакше

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

param s:

Семплер, до якого прив’язана текстура, з якої будуть отримані текселі.

param p:

Координати текстури, у яких текстура буде взята.

param dPdx:

Часткова похідна P відносно вікна x.

param 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 як градієнти.

param s:

Семплер, до якого прив’язана текстура, з якої будуть отримані текселі.

param p:

Координати текстури, у яких текстура буде взята.

param dPdx:

Часткова похідна від p відносно вікна x.

param 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 у текстурі, прив’язаній до семплера.

param s:

Семплер, до якого прив’язана текстура, з якої будуть отримані текселі.

param p:

Координати текстури, у яких текстура буде взята.

param 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);
param s:

Семплер, до якого прив’язана текстура, з якої будуть отримані текселі.

param p:

Координати текстури, у яких текстура буде взята.

param 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)).

param p:

Вираз якого взяти частковою похідною.

Примітка

Передбачається, що вираз p є неперервним, і тому вирази, обчислені за допомогою нерівномірного потоку керування, можуть бути невизначеними.

return:

Часткова похідна від p.

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


vec_type dFdxCoarse(vec_type p) 🔗

Примітка

Доступно лише у фрагментному шейдері. Недоступно, якщо використовується рендерер сумісності.

Повертає часткову похідну p відносно координати вікна x.

Обчислює похідні за допомогою локальної різниці на основі значення p для сусідів поточного фрагмента та, можливо, але не обов’язково, включатиме значення для поточного фрагмента. Тобто, у певній області реалізація може обчислювати похідні в меншій кількості унікальних місць, ніж дозволено для відповідної функції dFdxFine.

Попередження

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

param p:

Вираз якого взяти частковою похідною.

Примітка

Передбачається, що вираз p є неперервним, і тому вирази, обчислені за допомогою нерівномірного потоку керування, можуть бути невизначеними.

return:

Часткова похідна від p.

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


vec_type dFdxFine(vec_type p) 🔗

Примітка

Доступно лише у фрагментному шейдері. Недоступно, якщо використовується рендерер сумісності.

Повертає часткову похідну p відносно координати вікна x.

Обчислює похідні за допомогою локального диференціювання на основі значення p для поточного фрагмента та його найближчого(их) сусіда(ів).

Попередження

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

param 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)).

param p:

Вираз якого взяти частковою похідною.

Примітка

Передбачається, що вираз p є неперервним, і тому вирази, обчислені за допомогою нерівномірного потоку керування, можуть бути невизначеними.

return:

Часткова похідна від p.

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


vec_type dFdyCoarse(vec_type p) 🔗

Примітка

Доступно лише у фрагментному шейдері. Недоступно, якщо використовується рендерер сумісності.

Повертає частинну похідну від p відносно координати y вікна.

Обчислює похідні за допомогою локальної різниці на основі значення p для сусідів поточного фрагмента та, можливо, але не обов’язково, включатиме значення для поточного фрагмента. Тобто, у заданій області реалізація може обчислювати похідні в меншій кількості унікальних місць, ніж це дозволено для відповідних функцій dFdyFine і dFdyFine.

Попередження

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

param p:

Вираз якого взяти частковою похідною.

Примітка

Передбачається, що вираз p є неперервним, і тому вирази, обчислені за допомогою нерівномірного потоку керування, можуть бути невизначеними.

return:

Часткова похідна від p.

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


vec_type dFdyFine(vec_type p) 🔗

Примітка

Доступно лише у фрагментному шейдері. Недоступно, якщо використовується рендерер сумісності.

Повертає частинну похідну від p відносно координати y вікна.

Обчислює похідні за допомогою локального диференціювання на основі значення p для поточного фрагмента та його найближчого(их) сусіда(ів).

Попередження

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

param 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)).

param p:

Вираз якого взяти частковою похідною.

return:

Часткова похідна.

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


vec_type fwidthCoarse(vec_type p) 🔗

Примітка

Доступно лише у фрагментному шейдері. Недоступно, якщо використовується рендерер сумісності.

Повертає суму абсолютних значень похідних по x і y.

Використовує локальну різницю для вхідного аргументу p.

Еквівалент abs(dFdxCoarse(p)) + abs(dFdyCoarse(p)).

param p:

Вираз якого взяти частковою похідною.

return:

Часткова похідна.

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


vec_type fwidthFine(vec_type p) 🔗

Примітка

Доступно лише у фрагментному шейдері. Недоступно, якщо використовується рендерер сумісності.

Повертає суму абсолютних значень похідних по x і y.

Використовує локальну різницю для вхідного аргументу p.

Еквівалент abs(dFdxFine(p)) + abs(dFdyFine(p)).

param p:

Вираз якого взяти частковою похідною.

return:

Часткова похідна.

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


Функції пакування та розпакування

Ці функції перетворюють числа з плаваючою комою в цілі числа різного розміру, а потім упаковують ці цілі числа в одне 32-розрядне ціле число без знаку. Функції «розпакувати» виконують протилежну операцію, повертаючи вихідні числа з плаваючою комою.

uint
Vec2
packHalf2x16(vec2 v)

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

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 старших бітів.

param v:

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

return:

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

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


vec2 unpackHalf2x16(uint v) 🔗

Зворотне до packHalf2x16.

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

param 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)

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

param v:

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

return:

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

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


vec2 unpackUnorm2x16(uint v) 🔗

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

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

Перетворення неупакованого значення фіксованої коми f у число з плаваючою комою виконується наступним чином:

f / 65535.0

Перший компонент повернутого вектора буде витягнуто з молодших бітів вхідних даних; останній компонент буде виділено зі старших бітів.

param 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)

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

param 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)

Перший компонент повернутого вектора буде витягнуто з молодших бітів вхідних даних; останній компонент буде виділено зі старших бітів.

param 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)

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

param v:

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

return:

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

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


vec4 unpackUnorm4x8(uint v) 🔗

Розпаковує значення з плаваючою комою з цілого числа без знаку.

Розпаковує окремі 32-розрядні цілі числа без знака в чотири 8-розрядні цілі числа без знаку. Потім кожен компонент перетворюється на нормалізоване значення з плаваючою комою, щоб створити повернутий чотирикомпонентний вектор.

Перетворення неупакованого значення фіксованої коми f у число з плаваючою комою виконується наступним чином:

f / 255.0

Перший компонент повернутого вектора буде витягнуто з молодших бітів вхідних даних; останній компонент буде виділено зі старших бітів.

param 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)

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

param 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)

Перший компонент повернутого вектора буде витягнуто з молодших бітів вхідних даних; останній компонент буде виділено зі старших бітів.

param 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].

Старші біти результату будуть встановлені на нуль.

Примітка

Якщо біт дорівнює нулю, результат буде нульовим.

Попередження

Результат буде невизначеним, якщо:

  • зсув або біти від’ємні.

  • якщо сума зсуву та бітів більша за кількість бітів, які використовуються для зберігання операнда.

param value:

Ціле число, з якого потрібно отримати біти.

param offset:

Індекс першого біта для вилучення.

param 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].

Для старших бітів буде встановлено значення зміщення + основа - 1 (тобто це знак, розширений на ширину типу, що повертається).

Примітка

Якщо біт дорівнює нулю, результат буде нульовим.

Попередження

Результат буде невизначеним, якщо:

  • зсув або біти від’ємні.

  • якщо сума зсуву та бітів більша за кількість бітів, які використовуються для зберігання операнда.

param value:

Ціле число, з якого потрібно отримати біти.

param offset:

Індекс першого біта для вилучення.

param 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.

Вставляє біти молодші значущі біти insert у основу зі зміщенням offset.

Повернуте значення матиме біти [зсув, зсув + біти + 1], взяті з [0, біти - 1] вставки, а всі інші біти взяті безпосередньо з відповідних бітів основи.

Примітка

Якщо біт дорівнює нулю, результатом буде вихідне значення основи.

Попередження

Результат буде невизначеним, якщо:

  • зсув або біти від’ємні.

  • якщо сума зсуву та бітів більша за кількість бітів, які використовуються для зберігання операнда.

param base:

Ціле число, у яке потрібно вставити insert.

param insert:

Значення бітів для вставки.

param offset:

Індекс першого біта для вставки.

param 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 значення, де біт - це загальна кількість бітів, які використовуються для представлення значення.

param 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 біта в цілому числі.

param value:

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

return:

Кількість бітів, для яких встановлено значення 1 у двійковому представленні value.

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.

Примітка

Якщо значення дорівнює нулю, буде повернено -1.

param 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.

param 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:

Перше множене.

параметр і:

Друге множене.

param msb:

Змінна для отримання найважливішого слова продукту.

param 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:

Перше множене.

параметр і:

Друге множене.

param msb:

Змінна для отримання найважливішого слова продукту.

param 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:

Перший операнд.

параметр і:

Другий операнд.

param 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:

Перший операнд.

параметр і:

Другий операнд.

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:

Значення, яке буде використовуватися як джерело значущості.

param 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:

Значення, з якого слід витягти значуще число та показник степеня.

param exp:

Змінна, в яку потрібно підставити показник степеня x.

return:

Значуще значення x.

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