UNPKG

@tolokoban/tgd

Version:

ToloGameDev library for WebGL2

84 lines 5 kB
/** * 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