gl-transitions
Version:
The open collection of GL Transitions
107 lines (95 loc) • 3.83 kB
TypeScript
// Types for the gl-transitions collection (generated from the GitHub repository).
export type ParamType =
| "float" | "int" | "bool"
| "vec2" | "vec3" | "vec4"
| "ivec2" | "ivec3" | "ivec4"
| "mat2" | "mat3" | "mat4";
export type ParamValue = number | boolean | number[];
export interface TransitionParam {
type: ParamType;
/** Default value, from the `// = value` comment of the uniform. */
default?: ParamValue;
/** Suggested bounds for a UI control, from `@range(min, max[, step])`. Per component for vectors. */
min?: number;
max?: number;
step?: number;
/** The value is an RGB / RGBA color, from `@color`. */
color?: boolean;
description?: string;
}
export interface Transition {
/** File name without `.glsl`. Stable: never renamed once published. */
name: string;
author: string;
license: string;
/** GLSL source implementing `vec4 transition(vec2 uv)` (GL Transition Specification v1). */
glsl: string;
description?: string;
tags: string[];
params: { [name: string]: TransitionParam };
/** Extra `sampler2D` inputs beyond `from` and `to`, to be provided by the implementer. */
textures: string[];
/** Legacy: parameter types. Prefer `params`. */
paramsTypes: { [name: string]: ParamType };
/** Legacy: parameter default values. Prefer `params`. */
defaultParams: { [name: string]: ParamValue };
createdAt?: string;
updatedAt?: string;
}
/** Uniform buffer and textures of `wgsl/<name>.wgsl` and `msl/<name>.metal`, from `layouts.json`. */
export interface ShaderLayout {
/** `progress`, `ratio`, then the parameters; offsets in bytes (std140 / WGSL uniform layout). `bool` is stored as a 32-bit int. */
uniforms: { name: string; type: ParamType; offset: number }[];
/** Uniform buffer size in bytes, a multiple of 16. */
size: number;
/** Extra textures, bound after `from` and `to`. */
textures: string[];
}
/** Content of `layouts.json`, by transition name. */
export type ShaderLayouts = { [name: string]: ShaderLayout };
export type TargetId = "sksl" | "glsl3" | "wgsl" | "msl";
/**
* Per transition and target, from `compatibility.json`. The target file is shipped
* for every status except `compile-error` and `unsupported`.
* - `match`: renders like the GLSL reference; `close`: up to 5% of pixels differ;
* `noise-only`: same picture, different random noise grain
* - `differs`: renders differently (usually random patterns that legitimately differ)
* - `compiled`: accepted by the target's compiler, not rendered
* - `translated`: generated, but no compiler for the target was available in the build
* - `no-reference`: rendered, but no reference to compare with
* - `compile-error`, `unsupported`: not shipped for this target
*/
export type CompatibilityStatus =
| "match"
| "noise-only"
| "close"
| "differs"
| "compiled"
| "translated"
| "no-reference"
| "compile-error"
| "unsupported";
export interface TargetCompatibility {
status: CompatibilityStatus;
/** Share of pixels that differ from the GLSL reference in the worst frame, 0 to 1. */
differingPixels?: number;
/** Uses hash noise (`fract(sin(x) * 43758.5453)`), which differs between implementations. */
hashNoise?: boolean;
/** First line of the compiler or converter error. */
error?: string;
}
/** Content of `compatibility.json`. */
export interface Compatibility {
targets: {
[target in TargetId]?: {
language: string;
/** File of a transition in the package, `{name}` being its name. */
path: string;
/** Statuses come from rendering and comparing with the GLSL reference, not only compiling. */
rendered: boolean;
};
};
transitions: { [name: string]: { [target in TargetId]?: TargetCompatibility } };
}
declare const transitions: Transition[];
export default transitions;