@tolokoban/tgd
Version:
ToloGameDev library for WebGL2
84 lines • 5 kB
JavaScript
/**
* Convert uv coords ([0.0, +1.0]) into xy coords ([-1.0, +1.0]).
* Requires uniform `uniAspectRatio`.
*/
export function tgdCodeFunction_mapRange(options = {}) {
const { name = "mapRange" } = options;
return {
[name]: `float ${name}(float value, float fromMin, float fromMax, float toMin, float toMax) {
float t = (value - fromMin) / (fromMax - fromMin);
return toMin + (toMax - toMin) * t;
}
`,
};
}
export function tgdCodeFunction_mod289(options = {}) {
const { name = "mod289" } = options;
return {
[name]: `float ${name}(const in float x) { return x - floor(x * (1. / 289.)) * 289.; }
vec2 ${name}(const in vec2 x) { return x - floor(x * (1. / 289.)) * 289.; }
vec3 ${name}(const in vec3 x) { return x - floor(x * (1. / 289.)) * 289.; }
vec4 ${name}(const in vec4 x) { return x - floor(x * (1. / 289.)) * 289.; }
`,
};
}
export function tgdCodeFunction_permute(options = {}) {
const { name = "permute" } = options;
return {
...tgdCodeFunction_mod289(),
[name]: `float ${name}(const in float v) { return mod289(((v * 34.0) + 1.0) * v); }
vec2 ${name}(const in vec2 v) { return mod289(((v * 34.0) + 1.0) * v); }
vec3 ${name}(const in vec3 v) { return mod289(((v * 34.0) + 1.0) * v); }
vec4 ${name}(const in vec4 v) { return mod289(((v * 34.0) + 1.0) * v); }`,
};
}
/**
* Taylor approximation of inverse square root.
*/
export function tgdCodeFunction_taylorInvSqrt(options = {}) {
const { name = "taylorInvSqrt" } = options;
return {
[name]: `float ${name}(in float r) { return 1.79284291400159 - 0.85373472095314 * r; }
vec2 ${name}(in vec2 r) { return 1.79284291400159 - 0.85373472095314 * r; }
vec3 ${name}(in vec3 r) { return 1.79284291400159 - 0.85373472095314 * r; }
vec4 ${name}(in vec4 r) { return 1.79284291400159 - 0.85373472095314 * r; }`,
};
}
/**
* Quintic function.
*/
export function tgdCodeFunction_quintic(options = {}) {
const { name = "quintic" } = options;
return {
[name]: `float ${name}(const in float v) { return v*v*v*(v*(v*6.0-15.0)+10.0); }
vec2 ${name}(const in vec2 v) { return v*v*v*(v*(v*6.0-15.0)+10.0); }
vec3 ${name}(const in vec3 v) { return v*v*v*(v*(v*6.0-15.0)+10.0); }
vec4 ${name}(const in vec4 v) { return v*v*v*(v*(v*6.0-15.0)+10.0); }`,
};
}
export function tgdCodeFunction_float01ToVec3(options = {}) {
const { name = "float01ToVec3" } = options;
return {
[name]: `vec3 ${name}(in float value) {
int z = int(float(0xFFFFFF) * value);
float r = float(z & 0xFF) / 255.0;
z >>= 8;
float g = float(z & 0xFF) / 255.0;
z >>= 8;
float b = float(z & 0xFF) / 255.0;
return vec3(r, g, b);
}`,
};
}
export function tgdCodeFunction_vec3ToFloat01(options = {}) {
const { name = "vec3ToFloat01" } = options;
return {
[name]: `float ${name}(in vec3 value) {
float r = value.r;
float g = value.g;
float b = value.b;
return (b * 256.0 * 256.0 + g * 256.0 + r) * 0.000015199185323666652;
}`,
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0aC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb2RlL21hdGgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLHdCQUF3QixDQUFDLFVBQXFDLEVBQUU7SUFDNUUsTUFBTSxFQUFFLElBQUksR0FBRyxVQUFVLEVBQUUsR0FBRyxPQUFPLENBQUE7SUFDckMsT0FBTztRQUNILENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxJQUFJOzs7O0NBSTVCO0tBQ0ksQ0FBQTtBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsc0JBQXNCLENBQUMsVUFBcUMsRUFBRTtJQUMxRSxNQUFNLEVBQUUsSUFBSSxHQUFHLFFBQVEsRUFBRSxHQUFHLE9BQU8sQ0FBQTtJQUVuQyxPQUFPO1FBQ0gsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLElBQUk7T0FDdEIsSUFBSTtPQUNKLElBQUk7T0FDSixJQUFJO0NBQ1Y7S0FDSSxDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSx1QkFBdUIsQ0FBQyxVQUFxQyxFQUFFO0lBQzNFLE1BQU0sRUFBRSxJQUFJLEdBQUcsU0FBUyxFQUFFLEdBQUcsT0FBTyxDQUFBO0lBRXBDLE9BQU87UUFDSCxHQUFHLHNCQUFzQixFQUFFO1FBQzNCLENBQUMsSUFBSSxDQUFDLEVBQUUsU0FBUyxJQUFJO09BQ3RCLElBQUk7T0FDSixJQUFJO09BQ0osSUFBSSw4REFBOEQ7S0FDcEUsQ0FBQTtBQUNMLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxVQUFxQyxFQUFFO0lBQ2pGLE1BQU0sRUFBRSxJQUFJLEdBQUcsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFBO0lBRTFDLE9BQU87UUFDSCxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsSUFBSTtPQUN0QixJQUFJO09BQ0osSUFBSTtPQUNKLElBQUksaUVBQWlFO0tBQ3ZFLENBQUE7QUFDTCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsVUFBcUMsRUFBRTtJQUMzRSxNQUFNLEVBQUUsSUFBSSxHQUFHLFNBQVMsRUFBRSxHQUFHLE9BQU8sQ0FBQTtJQUVwQyxPQUFPO1FBQ0gsQ0FBQyxJQUFJLENBQUMsRUFBRSxTQUFTLElBQUk7UUFDckIsSUFBSTtRQUNKLElBQUk7UUFDSixJQUFJLDREQUE0RDtLQUNuRSxDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxVQUFxQyxFQUFFO0lBQ2pGLE1BQU0sRUFBRSxJQUFJLEdBQUcsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFBO0lBQzFDLE9BQU87UUFDSCxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsSUFBSTs7Ozs7Ozs7RUFRMUI7S0FDRyxDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSw2QkFBNkIsQ0FBQyxVQUFxQyxFQUFFO0lBQ2pGLE1BQU0sRUFBRSxJQUFJLEdBQUcsZUFBZSxFQUFFLEdBQUcsT0FBTyxDQUFBO0lBQzFDLE9BQU87UUFDSCxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsSUFBSTs7Ozs7RUFLM0I7S0FDRyxDQUFBO0FBQ0wsQ0FBQyJ9