Props & values

How a definition points at its own props. p('radius') is a prop ref: hand it to any word that takes a color, a position or a number and the word reads that prop live on the GPU, with drivers and animation applied, and no rebuild when the value changes. A Scalar is a number built from props and masks. radialMask(…) returns one, so does oscillating(…) from motion, and .times(p('intensity')) scales one by a prop. Words that take a ScalarInput accept either a prop ref or a Scalar.

Prop refs and Scalars are data, not GPU values. A word turns them into GPU values when the shader is built. In a hand-written builder you do that yourself with uniformOf and resolveScalar from the invocation words.

import {p, Scalar} from 'shaders/std'

Reach for it when

When you needUse
a word should read one of your propsp
a strength that fades with distance from a point, scaled by a propradialMask chained with .times(p('intensity')) on the Scalar
a value that breathes or pulses on its ownoscillating or pulsing from motion, as a Scalar
a prop's value inside a hand-written builderuniformOf

Example

import {defineShader, p, tintToward, radialMask, crosses, isZero, transformColor, transformPosition} from 'shaders/std'

// A vignette: tint the layer inside toward a color, strongest past a radius from a point.
export const Vignette = defineShader({
  name: 'Vignette',
  props: {
    color: {default: '#000000', transform: transformColor},
    center: {default: {x: 0.5, y: 0.5}, transform: transformPosition},
    radius: {default: 0.4},
    falloff: {default: 0.6},
    intensity: {default: 1, recompile: crosses(0)},
  },
  effect: tintToward(p('color'), {
    amount: radialMask({center: p('center'), radius: p('radius'), falloff: p('falloff')}).times(p('intensity')),
  }),
  identityWhen: isZero('intensity'),
  missingChildMessage: 'Nest a layer inside Vignette to darken its edges.',
})

Types

TypeWhat it is
PropRefA reference to one of the definition's props by name.
ScalarInputWhat a number-valued input accepts: a prop ref p('x') or a Scalar.
ScalarSourceThe shapes a Scalar can hold: a prop, a product of two values, a radial mask, or a live signal.
SignalSlotParamsWhat a signal is given when it builds: the props, and the context values where the host has them (a warp's map: has no ctx).

Words