В GLSL законно ли функции читать аргумент out
после того, как она уже выполнила в него запись?
Например
void f(out float x) {
x = ...
x = sqrt(x);
}
Или нужно это написать так
void f(out float output_x) {
float x = ...
output_x = sqrt(x);
}
При тестировании вроде работает корректно, но в спецификации вроде бы ничего конкретно об этом не сказано. (только «Оценка выхода» Результатом параметра является l-значение, которое используется для копирования значения при возврате функции.")
в спецификации, похоже, ничего конкретного об этом не сказано. (только «Оценка выходного параметра приводит к получению l-значения, которое используется для копирования значения при возврате функции.»)
Это действительно все, что нужно сказать.
in
/out
/inout
— все о том, как параметры инициализируются при вызове функции и используются при завершении функции. То, что происходит в середине, не имеет значения для этих квалификаторов.
Параметр in
или inout
получает копию значения из аргумента во время вызова функции. Значение параметра out
или inout
копируется в аргумент при возврате функции. Значение квалифицированных параметров out
не определено в начале функции. Вот и все; это единственное, что делают эти квалификаторы. В противном случае переменную можно использовать по своему усмотрению.